1

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

ClusterMarker_.prototype = new GOverlay();

ClusterMarker_.prototype = new GMarker();

这样我就可以openInfoWindow()在clustermarker中获得该功能,但这没有成功。有一些错误。如果可能,请提出解决方案,以便可以使用MarkerClusterer. 或者任何其他能够做到这一点的图书馆。任何帮助将不胜感激。

4

2 回答 2

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);
});

您还必须将 zoomOnClick 选项设置为 false:

var mcoptions = { zoomOnClick: false, showText: true, averageCenter: true}
var mc = new MarkerClusterer(map, markersArray, mcoptions);
于 2010-12-02T17:18:32.943 回答
1

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

目前:

  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 添加配置选项以指定是否执行放大功能或信息窗口功能
  • 定义一个回调函数设置,您可以在其中指定单击集群时 MarkerClusterer 将调用的函数。
于 2010-05-21T20:05:22.247 回答