谷歌地图,标记信息并不接近他的标记

时间:2017-07-21 14:20:09

标签: javascript google-maps google-maps-api-3

我使用最新版本的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已加载到对话框中(按需打开对话框时)

如何解决此问题?

enter image description here

1 个答案:

答案 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]);
}