javascript - 通过循环显示来自json的多个谷歌地图
问题描述
我想动态显示多个谷歌地图而不必输入以下内容:
<div id="map"></div>
<div id="map1"></div>
<div id="map2"></div>
在下面的代码中,我对 json 进行了硬编码,并包含了 3 个纬度和经度对象。当我迭代 3 个对象时,我做了一个循环来显示 3 个地图。但是,它只显示了一张地图。有人可以帮我解决这个问题吗?先感谢您。
#map {
height: 300px;
width: 500px;
margin: 0px;
padding: 0px
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="map"></div>
<script>
//hardcoded json
var json = [{
lat: 51.143183,
lng: 0.915349
}, {
lat: 51.261797,
lng: 1.087446
}, {
lat: 51.286869,
lng: 0.556317
}];
var obj, map, uluru, marker, text = "";
//init map function
function initMap() {
for (var i in json) {
obj = json[i];
//txt = "<div id='map'></div>"
console.log(obj.lat + " " + obj.lng);
uluru = {
lat: parseFloat(obj.lat),
lng: parseFloat(obj.lng)
};
map = new google.maps.Map(document.getElementById('map'), {
center: {
lat: parseFloat(obj.lat),
lng: parseFloat(obj.lng)
},
zoom: 15
});
marker = new google.maps.Marker({
position: uluru,
map: map
});
}
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDqKWHQOwdndu3GbTZfxb2HdMS4wDrpBv4&callback=initMap">
</script>
</body>
</html>
解决方案
您必须将每个已初始化的 google-maps 对象保存在单独的可访问内存地址中,例如变量、数组元素等。试试这个:
var json = [{lat:51.143183, lng: 0.915349}, {lat: 51.261797, lng: 1.087446}, {lat: 51.286869, lng: 0.556317}];
var mapInstances = [];
//init map function
function initMap() {
json.map(function(jsonObject, index){
uluru = {lat: parseFloat(jsonObject.lat), lng: parseFloat(jsonObject.lng)};
mapInstances.push(new google.maps.Map(document.querySelector('#map' + index), {
center: { lat: parseFloat(jsonObject.lat), lng: parseFloat(jsonObject.lng) },
zoom: 15
}));
var marker = new google.maps.Marker({position: uluru, map: mapInstances[index]});
});
console.log(mapInstances);
}
div{
display: inline-block;
width: 400px;
height: 400px;
border: 1px solid;
margin-right: 8px;
}
<div id="map0"></div>
<div id="map1"></div>
<div id="map2"></div>
<script async src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDqKWHQOwdndu3GbTZfxb2HdMS4wDrpBv4&callback=initMap">
</script>
推荐阅读
- excel - 在 Excel VBA 中通过电子邮件将选定的单元格作为多个附件发送
- python - Python - 如果小于某个数字,如何替换布尔值?
- jenkins - 如何将 CascadeChoiceParameter 的 Jenkins 管道中的 referencedParameters 值发送到 ScriptlerScript
- python - 鼠标单击时的精灵动画
- android - 任务 generateJsonModelArmDebug 执行失败
- javascript - 在 Vue.js 上的 Jest 测试中调用“created”方法
- java - 提交 Storm 拓扑失败/开始)
- entity-framework - 运行 DbMigrator.Update 的 EF 代码优先迁移失败
- angular - Angular Ant Design DatePicker 默认模式
- opencv - 从二维图像中查找相机方向和平移