谷歌地图spiderfly功能-在同一点上有多个标记

Google maps spiderfy function - more than one marker at the same point

本文关键字:一点 功能 spiderfly 谷歌地图      更新时间:2023-12-27

我正在尝试使用这里找到的Google Maps API v3的重叠标记蜘蛛器。(我的问题在这个文本/代码块的底部)

https://github.com/jawj/OverlappingMarkerSpiderfier/blob/master/README.textile

我试图实现它的页面与他们在源代码页面上使用的代码有点不同。它们初始化页面,并在初始化函数中实现所有函数调用。我的页面初始化地图并加载一个点,然后使用单独的函数(通过地理编码)添加其他点。

因此,基本上在这一点上,地图已经初始化,现在我调用我的数据库来获取要添加的新位置。

var cityArray= <?php echo json_encode($cityArray); ?>; //get the city
var title = <?php echo json_encode($title); ?>; //and the title to go on it's infowindow
  function plotMarkers(){ 
        for(var i = 0; i < <?php echo json_encode($length); ?>; i++){
            codeAddresses(cityArray[i],title[i]); //geocode the address
        }
  }

所以,上面的这个片段给了我两个数组;一个带有位置,一个带有要进入信息窗口的标题。

现在是codeAddresses函数,它对地址进行地理编码,并将该标记添加到地图中。从plotMarkers函数中可以看到,数组循环通过并添加到codeAddresses函数中。

function codeAddresses(address,title){
      geocoder.geocode( { 'address': address}, function(results, status) { 
              if (status == google.maps.GeocoderStatus.OK) {
                  marker = new google.maps.Marker({
                 map: map,
                 position: results[0].geometry.location
                });      
            google.maps.event.addListener(marker, 'click', (function(marker) {
              return function() {
                  infowindow.setContent(title);
                  infowindow.open(map, marker);
              }
            })(marker));
        }
    });
  }

我的问题是,我应该将侦听器(在上面链接的页面上)添加到加载第一个点的第一个函数中,还是应该将其添加到codeAddresses函数中?

此外,我应该将其包含在我的codeAddresses函数中还是其他地方?如果它确实进入了codeAddresses,这是否意味着我可以去掉for循环,因为codeAddresses是从循环中触发的(并在每次迭代中运行)?

 for (var i = 0; i < window.mapData.length; i ++) {
   var datum = window.mapData[i];
   var loc = new gm.LatLng(datum.lat, datum.lon);
   var marker = new gm.Marker({
   position: loc,
   title: datum.h,
   map: map
});
 marker.desc = datum.d;
 oms.addMarker(marker);  // <-- here
}

最好的策略是离线对地址进行地理编码(使用地理编码web服务),将坐标存储在数据库中,然后使用它们来显示标记,这将减少加载页面的时间,因为地理编码受到速率限制和配额的限制。