谷歌地图infowindow共享相同的纬度/经度

时间:2014-02-23 15:31:05

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

SO成员通过以下代码帮助我,允许我使用PHP数组中的多个标记并将它们绘制在地图上:

    for (i = 0; i < locations.length; i++) 
    { 

  marker = new google.maps.Marker({
    position: new google.maps.LatLng(locations[i][0], locations[i][1]),
    map: map
   });


  google.maps.event.addListener(marker, 'click', (function(marker, i) {
    return function() 
    {

      infowindow.setContent(locations[i][2]);
      infowindow.open(map, marker);
    }
  })(marker, i));
    }

因此,代码正在抓取我的数组并将我的标记放在地图上和infowindow中,打印出客户名称。 然而,我很快就遇到了一个问题。如果客户共享相同的纬度/经度(它们来自邮政编码),则只有一个客户出现 - 例如客户1在LN1 7HQ和客户2在LN1 7HQ,只有客户1将出现在信息窗口中。 我找到的一些解决方案包括聚类标记和偏移它们 - 但我想要的是每个邮政编码有1个信息窗口,然后列出窗口中的客户。 我还没有找到办法,但会假设它会涉及改变下面的For循环并添加类似“如果lat,long === lat,long,then locations [i] [2] ++ ... “但我只是抓住PHP而javascript对我来说还是新手。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案:使用数组跟踪创建的标记

var markers = [];

使用以下对象获取有关位置索引的信息:

function MarkerInfo(marker, idx) {
    this.marker    = marker;
    this.locations = [idx];
}

有两个循环。 MarkerInfo的第一个循环构建数组,带有来自locations数组的标记和索引列表。第二个循环为infowindow准备内容字符串并创建监听器。

请参阅example at jsbin

注意:以便将来更改:如果您使用有关这两个循环之间的客户的信息更改locations数组,解决方案将无法正常运行。