【问题标题】:Google maps info windows displaying same information谷歌地图信息窗口显示相同的信息
【发布时间】:2013-06-08 12:21:02
【问题描述】:

我的网站上有显示英国各地位置列表的谷歌地图。 但是信息窗口为每个单独的记录显示相同的记录。我的代码在下面。有什么原因吗?

var locations = [[52.478899, -1.894055, 'test 1', '87', 'Name: test 1'],
[52.479474, -1.895946, 'test 2', '88', 'Name: test 2 '],
[52.477082, -1.893929, 'test 3', '89', 'Name: test 3 ']];


function initialize() {

var mapOptions = {
    zoom: 8,
    center: new google.maps.LatLng(52.528680, -1.839480),
    mapTypeId: google.maps.MapTypeId.ROADMAP
};

var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var bounds = new google.maps.LatLngBounds();


for (var i = 0; i < locations.length; i++) {
    var curLoc = locations[i];
    myLatLng = new google.maps.LatLng(curLoc[0], curLoc[1]);
    var beachMarker = new google.maps.Marker({
        position: myLatLng,
        map: map,
        title: curLoc[2],
        data: curLoc[4], //add content to the Marker-object
        zIndex: 50 - i
    });

    var infowindow = new google.maps.InfoWindow({
        content: curLoc[4]
    });

    google.maps.event.addListener(beachMarker, 'click', (function() {
        infowindow.setContent(beachMarker.data);
        infowindow.setPosition(beachMarker.position);
        infowindow.open(map);
    }));

    bounds.extend(myLatLng);
    map.fitBounds(bounds);


}
}

google.maps.event.addDomListener(window, 'load', initialize);

更新:我更改了代码,但问题仍然存在,但现在单击标记会关注最后一个标记,而不仅仅是显示最后一个标记文本。

这是一个示例网址http://map.projects.webskii.com/default.html

【问题讨论】:

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


    【解决方案1】:

    我在这些情况下使用的解决方法是在创建标记时为标记分配一个 id。此 id 将在回调中可用,因此您可以使用它来按需获取 HTML 内容。方法如下:

    var locations = [
        [52.478899, -1.894055, 'test 1', '87', 'Name: test 1'],
        [52.479474, -1.895946, 'test 2', '88', 'Name: test 2'],
        [52.477082, -1.893929, 'test 3', '89', 'Name: test 3']
    ];
    var map = new google.maps.Map(document.getElementById("map_div"), {
        center: new google.maps.LatLng(52.528680, -1.839480),
        zoom: 8,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    var infoWindow = new google.maps.InfoWindow(); // 2: infoWindow is global
    var markerClickHandler = function () {
        infoWindow.setContent(locations[this.dataId][4]); // 3: use dataId stored in marker to fetch content from locations array
        infoWindow.open(map, this);
    };
    var bounds = new google.maps.LatLngBounds();
    var i;
    for (i = 0; i < locations.length; i++) {
        var latlng = new google.maps.LatLng(locations[i][0], locations[i][1]);
        var marker = new google.maps.Marker({
            position: latlng,
            map: map,
            title: locations[i][2],
            dataId: i // 1: assign an id
        });
        bounds.extend(latlng);
        google.maps.event.addListener(marker, "click", markerClickHandler);
    }
    map.fitBounds(bounds);
    

    Demo here。请注意,也可以将 Text/HTML 存储到标记中而不是 id。

    【讨论】:

      【解决方案2】:

      我猜它总是显示最后一条记录的数据?例如 infowindow.setContent(curLoc[4]); curLoc 始终是数据集位置中的最后一个。

      试试这个

      var beachMarker = new google.maps.Marker({
           position: myLatLng,
           map: map,
           title: curLoc[2],
           data : curLoc[4], //add content to the Marker-object 
           icon: image,
           zIndex: 50 - i,
           childMinderId: curLoc[3]
      });
      

      ...

      google.maps.event.addListener(beachMarker, 'click', (function () {
          infowindow.setContent(beachMarker.data);
          infowindow.setPosition(beachMarker.position);
          infowindow.open(map);
      }
      

      【讨论】:

      • 我已经进行了这些更改,但现在我遇到了另一个问题。当我单击地图上的一个图标时,它会重新定位到地图上的最后一条记录并显示该信息窗口。例如,我点击了 tom,但地图聚焦于 sharon 并显示了她的窗口。焦点之前是您单击的图标,但在信息窗口中显示相同的数据。
      【解决方案3】:

      只是对 davidkonrad 回应的补充。最后一个数据弹出时也有同样的问题。如果您使用标记上的数据并使用 'this' ,它会拾取标记上的数据以及标记对象的位置。

      google.maps.event.addListener(beachMarker, 'click', (function () {
          infowindow.setContent(this.data);
          infowindow.open(map,this);
      }
      

      【讨论】:

        猜你喜欢
        • 2017-11-21
        • 2016-12-21
        • 2012-02-18
        • 1970-01-01
        • 1970-01-01
        • 2014-07-21
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        相关资源
        最近更新 更多