谷歌地图中的MarkerClusterer上的infoWindow

时间:2010-05-21 09:57:10

标签: javascript google-maps google-maps-markers

点击ClusterMarker时,我需要打开infoWindow而不是放大地图。 我正在使用Gmaps util库MarkerClusterer来创建标记簇。我尝试在markerclusterer.js中更改以下行

ClusterMarker_.prototype = new GOverlay();

ClusterMarker_.prototype = new GMarker();

这样我就可以在群集标记中获得openInfoWindow()函数,但这并没有成功。有一些错误。 如果可能,请建议解决方案,以便MarkerClusterer完成此操作。或者任何其他能够执行此操作的库。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

对于MarkerCluster v3,有一个名为“ clusterclick ”的自定义事件,它返回markerCluster对象,然后您可以获取其中心并将其分配给infoWindow,如下所示:

google.maps.event.addListener(mc, 'clusterclick', function (mCluster) {
     //infowindow must be declared before in your code
     infowindow.setContent("your info");
     var myLatlng = new google.maps.LatLng(mCluster.getCenter().ya, mCluster.getCenter().za);
     infowindow.setPosition(myLatlng);
     infowindow.open(map);
});

此外,您必须在false:

上设置zoomOnClick选项
var mcoptions = { zoomOnClick: false, showText: true, averageCenter: true}
var mc = new MarkerClusterer(map, markersArray, mcoptions);

答案 1 :(得分:1)

最好从第672行开始修改markerclusterer.js中标记的click事件。

目前:

  GEvent.addDomListener(div, "click", function () {
    var pos = map.fromLatLngToDivPixel(latlng);
    var sw = new GPoint(pos.x - padding, pos.y + padding);
    sw = map.fromDivPixelToLatLng(sw);
    var ne = new GPoint(pos.x + padding, pos.y - padding);
    ne = map.fromDivPixelToLatLng(ne);
    var zoom = map.getBoundsZoomLevel(new GLatLngBounds(sw, ne), map.getSize());
    map.setCenter(latlng, zoom);
  });

更改为:

  GEvent.addDomListener(div, "click", function () {
    map.openInfoWindowHtml(latlng, "Put your infowindow content here");
  });

显然,根据你想要抽象的东西,你可以做几件事:

  • 向MarkerClusterer添加配置选项以指定是放大功能还是infowindow功能
  • 定义一个回调函数设置,您可以在其中指定单击群集时MarkerClusterer将调用的函数。