Google地图MarkerClusterer v3标记返回集群
问题描述:
我目前使用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;
}
答
的MarkerClusterer
库不提供一种方法来检索集群。但有一个增强版本的库,MarkerClustererPlus,它提供了更多的功能。使用MarkerClustererPlus api-doc,您可以使用MarkerClusterer.getClusters()
函数检索Cluster
类实例的Array
。然后,您可以使用Cluster.getMarkers()
函数检索Cluster
内的标记的Array
。就此而言,你应该拥有需要向前迈进的东西。
答
你的功能几乎是正确的,这里的正确的版本:
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使用Ĵ,而不是我。
感谢您的帮助。我能够在最初的'MarkerClusterer'库中构建一个辅助函数,它返回它创建的一个簇的数组。从本质上讲,库**不会存储集群,它只是不提供本地功能来访问它们。尽管我会接受你的回答,因为我可以通过研究Plus库的代码来解决问题。 – BenM
是的,'MarkerClusterer'完全保存了簇;我自己经历了这些代码。我试图用“没有提供检索集群的措辞”的措词来表达这一点,但我想这并不完全清楚。无论如何,它帮助你前进,这是最重要的部分。很高兴它为你工作 - –