谷歌地图 - 如果缩放级别等于最大缩放做某事?

时间:2015-04-04 19:44:06

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

使用Google Maps v3并使用markerclusterplus.js进行标记聚类(link)。

目前一切正常。现在我要做的是,如果已达到maxZoom,则在点击markerClusterer时显示一个信息窗口。目前我将maxZoom设置为15.这个想法是,如果有人点击一个群集,它将继续缩放,直到它不再是一个群集并显示多个标记,或者它击中maxZoom(15),它仍然是一组多个标记。如果它到达maxZoom,集群中可能包含任意数量的标记,所有标记都可以使用c.getMarkers());检索。然后,我可以使用返回标记的数组来显示包含整个组信息的信息窗。 / p>

我的问题是...... if(map.getZoom() == 15)是一个合法的测试,可以知道群集何时达到缩放级别? 15也是我设置的maxZoom,但是只有它只能缩放到16,17,20等的情况?如果是这样,我的逻辑将无法工作,并且在这些情况下不会显示信息窗口....有没有办法测试地图是否无法进一步缩放?

出于某种原因,我认为世界某些地区的缩放级别有限。一部分可能可以缩放到4而另一部分可能只能缩放到20.这就是我的问题。这一点的重点是显示有关多个标记的信息,这些标记要么是确切的位置,要么距离它们的距离非常近。

群集逻辑:

// var map = my google map
// var markers = my array of markers

// set mc options
var mcOptions = {
    gridSize: 50,
    maxZoom: 15,
    title: 'Multiple Users'
};

//set marker clusterer
var markerCluster = new MarkerClusterer(map, markers, mcOptions);

//markercluster listener
google.maps.event.addListener(markerCluster, "click", function (c) {                
    console.log('zoom is : '+map.getZoom());
    console.log('zoom on click is : '+markerCluster.getZoomOnClick());
    console.log('array of markers is : '+c.getMarkers());

    if(map.getZoom() == 15)
    {
        //display infowindow with all marker info
    }
});
无论是否已达到maxZoom级别,

markerCluster.getZoomOnClick();都会返回true,因此我认为这不会有用。

另一方面,

map.getZoom();会显示当前的缩放级别,所以如果我知道缩放级别总是可以达到至少15级,那么一切都应该可以正常工作,但那是我的问题......会吗?

1 个答案:

答案 0 :(得分:0)

getZoomOnClick()返回静态属性zoomOnClick_,它定义了缩放点击的默认行为。它不会根据缩放级别而改变。

对于您的用例,您可以

if(map.getZoom()>= c.getMaxZoom()) {
  // display infowindow
}

请注意,markerCluster实例从google.maps.OverlayView延伸,但不检测点击事件。

在这种情况下,这只会起作用,因为ClusterIcon.prototype在其click事件上声明了一个DOM侦听器,以编程方式触发MarkerClusterer单击事件。

ClusterIcon.prototype.onAdd = function () {    
  google.maps.event.addDomListener(this.div_, "click", function (e) {
    var mc = cClusterIcon.cluster_.getMarkerClusterer();

    google.maps.event.trigger(mc, "click", cClusterIcon.cluster_);
  };
};

我提到这一点是因为如果你尝试在markerClusterer上添加其他鼠标相关的监听器,你会发现它们没有被触发。