我使用最新版本的Google地图,并尝试在markers
中打印map
。
为此,我使用:
function initmap2() {
map2 = new google.maps.Map(document.getElementById('map-scan'), {
zoom: 16,
styles: style,
center: { lat: 13.7218501, lng: -89.2039192 }
});
for (i = 0; i < positions.length; i++) {
markers = new google.maps.Marker({
position: new google.maps.LatLng(positions[i]),
map: map2
});
}
var markers = positions.map(function (location, i) {
return new google.maps.Marker({
position: location,
});
});
for (var i = 0; i < markers.length; i++) {
markers[i].info = new google.maps.InfoWindow({
content: '<b>' + positions[i]["title"].toUpperCase() + '</b>'
});
markers[i].info.open(map2, markers[i]);
}
}
标记显示在正确的位置,但InfoWindws
距离很远。
为什么我使用map2
代替map
。我已预加载另一个googlemap
并且map2
已加载到对话框中(按需打开对话框时)
如何解决此问题?
答案 0 :(得分:0)
你的问题是这个......你循环positions
,为你的每个职位创建一个标记:
for (i = 0; i < positions.length; i++) {
markers = new google.maps.Marker({
position: new google.maps.LatLng(positions[i]),
map: map2
});
}
然后你再做同样的事情:
var markers = positions.map(function (location, i) {
return new google.maps.Marker({
position: location,
});
});
在第二种方式结束时,markers
是一系列标记。然后你循环设置infowindows。
但是,第一次创建标记时,您指定了map
属性。所以这些标记出现在地图上。
第二次你没有打扰,所以这些标记不在地图上。
由于您的第一种方式,您已经看到了标记。但是,然后你将infowindows附加到第二种方式创建的不可见标记! : - /
代码有点乱,你可以在positions
的一个循环中完成所有操作,并确保为每个标记指定map
属性。我只是这样做:
var markers = [];
for (i = 0; i < positions.length; i++) {
markers.push(new google.maps.Marker({
position: new google.maps.LatLng(positions[i]),
map: map2
}));
markers[i].info = new google.maps.InfoWindow({
content: '<b>' + positions[i]["title"].toUpperCase() + '</b>'
});
markers[i].info.open(map2, markers[i]);
}