2012-05-09 56 views
1

我目前使用Google Maps MarkerClusterer v3(http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html ),并且迄今为止对功能印象非常深刻。Google地图MarkerClusterer v3标记返回集群

但是,我现在希望在我的地图中添加一个附加功能。当用户将鼠标悬停在标记列表上时,标记图像会发生变化。这在标记未聚集的情况下效果很好,但由于我也在使用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; 
} 

回答

2

MarkerClusterer库不提供一种方法来检索集群。但有一个增强版本的库,MarkerClustererPlus,它提供了更多的功能。使用MarkerClustererPlus api-doc,您可以使用MarkerClusterer.getClusters()函数检索Cluster类实例的Array。然后,您可以使用Cluster.getMarkers()函数检索Cluster内的标记的Array。就此而言,你应该拥有需要向前迈进的东西。

+0

感谢您的帮助。我能够在最初的'MarkerClusterer'库中构建一个辅助函数,它返回它创建的一个簇的数组。从本质上讲,库**不会存储集群,它只是不提供本地功能来访问它们。尽管我会接受你的回答,因为我可以通过研究Plus库的代码来解决问题。 – BenM

+0

是的,'MarkerClusterer'完全保存了簇;我自己经历了这些代码。我试图用“没有提供检索集群的措辞”的措词来表达这一点,但我想这并不完全清楚。无论如何,它帮助你前进,这是最重要的部分。很高兴它为你工作 - –

0

你的功能几乎是正确的,这里的正确的版本:

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

所以标记属性应该被称为markers_和第二的foreach使用Ĵ,而不是