【问题标题】:google maps - if zoom level is equal to max zoom do something?谷歌地图 - 如果缩放级别等于最大缩放做什么?
【发布时间】:2015-06-09 15:18:00
【问题描述】:

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

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

我的问题是......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
    }
});

markerCluster.getZoomOnClick(); 无论是否达到 maxZoom 级别都会返回 true,所以我认为这不会有用。

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

【问题讨论】:

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


    【解决方案1】:

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

    对于您的用例,您可以这样做

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

    请记住,markerCluster 实例从不检测点击事件的google.maps.OverlayView 扩展而来。

    在这种情况下,这只会起作用,因为 ClusterIcon.prototype 在其点击事件上声明了一个 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 上添加其他与鼠标相关的侦听器,您会发现它们不会被触发。

    【讨论】:

    • 感谢您的回复。我的问题仍然存在。地图上的某个位置是否有可能具有高于 15 的“最低缩放级别”?我不担心代码或如何做...我只需要知道该逻辑是否始终成立...换句话说,是否始终可以将任何位置放大到 15 级以上。
    • 这不是你的主要问题。但是,据我了解,在最坏的情况下,您仍然可以缩放到 15 以上,只是不会加载更详细的图块,而是会继续放大现有的图块。
    • 如果你看我的帖子,这是我唯一的问题。当我将 maxZoom 设置为 15 时,您无法缩放超过 15,因此这不是问题。如果它是一个集群,我将使用缩放 15 来触发显示集群信息......我想知道地图的某些部分是否只能缩放到 16、17 等......在这种情况下,我的缩放 15永远不会满足条件,也永远不会显示集群信息。
    • 如果您可以缩放到 16 或 17,那么将满足“大于或等于 15”的条件。如果您在地图实例中声明一个 maxZoom(而不是在您的 markerClusterer 实例中声明它),那么您将无法缩放超过 15。无论如何,无法查询谷歌地图以了解图像的详细程度对于给定的位置。
    • 我倒退了...如果某个地图视图可以达到的最高缩放比例小于 15,则不满足条件。关键是当您达到某个缩放级别并且它仍然聚集时,您几乎可以假设标记基本上位于同一位置或相距不远。然后我将在信息窗口中单击时显示集群的所有标记详细信息。
    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    相关资源
    最近更新 更多