【问题标题】:Google Maps MarkerClusterer v3 Return Cluster of Marker谷歌地图 MarkerClusterer v3 返回标记集群
【发布时间】:2012-05-17 22:40:06
【问题描述】:

我目前正在使用 Google Maps MarkerClusterer v3 (http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html),并且对到目前为止的功能。

但是,我现在希望在我的地图中添加一个附加功能。当用户将鼠标悬停在标记列表上时,标记图像会发生变化。当标记没有聚集时,这很有效,但由于我也在使用 Clusterer,所以我需要能够返回特定标记所属的集群。

有人知道这是否可能吗?我检查了 API 文档,但找不到返回集群数组的方法。

基本上,这是我需要做的伪代码:

function changeClusterIcon(the_marker)
{
    var clusters = _CLUSTERER.getClusters();
    var clusters_length = clusters.length;
    var marker_pos = the_marker.getPosition().toString();

    for(var i = 0; i < clusters_length; i++)
    {
        var this_cluster = clusters[i];
        var the_markers = this_cluster.markers.length;

        for(var j = 0; j < the_markers; j++) 
        {
            var this_marker = this_cluster.markers[i];
            if(this_marker.getPosition().toString() == marker_pos)
            {
                return this_cluster;
            }
        }
    }

    return false;
}

【问题讨论】:

    标签: javascript google-maps markerclusterer


    【解决方案1】:

    MarkerClusterer 库不提供检索集群的方法。但是有一个增强版的库,MarkerClustererPlus,它提供了更多的功能。使用 MarkerClustererPlusapi-doc,您可以使用MarkerClusterer.getClusters() 函数检索Cluster 类实例的Array。然后,您可以使用Cluster.getMarkers() 函数检索位于Cluster 内的标记的Array。有了这个,您应该拥有前进所需的一切。

    【讨论】:

    • 感谢您的帮助。我能够在原始MarkerClusterer 库中构造一个辅助函数,该函数返回它创建的集群数组。本质上,库确实存储集群,只是不提供访问它们的本机函数。不过我会接受你的回答,因为我可以通过研究 Plus 库的代码来解决这个问题。
    • 是的,MarkerClusterer 绝对拥有集群;我自己也经历过那段代码。我试图用“不提供检索集群的方法”的措辞来传达这一点,但我想这并不完全清楚。无论如何,它帮助你前进,这是最重要的部分。很高兴它对你有用 -
    【解决方案2】:

    你的函数几乎是正确的,这里是正确的版本:

    function changeClusterIcon(the_marker)
    {
    var clusters = _CLUSTERER.getClusters();
    var clusters_length = clusters.length;
    var marker_pos = the_marker.getPosition().toString();
    
    for(var i = 0; i < clusters_length; i++)
    {
        var this_cluster = clusters[i];
        var the_markers = this_cluster.markers_.length;
    
        for(var j = 0; j < the_markers; j++) 
        {
            var this_marker = this_cluster.markers_[j];
            if(this_marker.getPosition().toString() == marker_pos)
            {
                return this_cluster;
            }
        }
    }
    
    return false;
    }
    

    所以 ma​​rkers 属性应该被称为 ma​​rkers_ 并且第二个 foreach 使用 j 而不是 i

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 2016-04-03
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      相关资源
      最近更新 更多