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对我来说还是新手。 任何帮助将不胜感激。
答案 0 :(得分:0)
一种可能的解决方案:使用数组跟踪创建的标记
var markers = [];
使用以下对象获取有关位置索引的信息:
function MarkerInfo(marker, idx) {
this.marker = marker;
this.locations = [idx];
}
有两个循环。 MarkerInfo
的第一个循环构建数组,带有来自locations
数组的标记和索引列表。第二个循环为infowindow准备内容字符串并创建监听器。
请参阅example at jsbin。
注意:以便将来更改:如果您使用有关这两个循环之间的客户的信息更改locations
数组,解决方案将无法正常运行。