2012-05-09 12 views
1

現在Google Maps MarkerClusterer v3(http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html)を使用しています。 )これまでの機能に非常に感銘を受けました。GoogleマップMarkerClusterer v3マーカークラスターを返す

ただし、マップに追加機能を追加したいと考えています。ユーザがマーカのリストの上を移動すると、マーカ画像が変更される。これはマーカがクラスタ化されていない場合には効果的ですが、クラスタ化も使用しているため、特定のマーカーが属するクラスタを返す必要があります。

これが可能なら誰でも知っていますか?私はAPIドキュメントをチェックしましたが、クラスターの配列を返すメソッドを見つけることができませんでした。 MarkerClustererライブラリは、クラスタを取得する方法はありません

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

基本的に、ここで私は何をする必要があるかの擬似コードです。しかし、より多くの機能を提供するライブラリの拡張バージョンMarkerClustererPlusがあります。 MarkerClustererPlus api-docを使用すると、クラスインスタンスのArrayを取得するのに、MarkerClusterer.getClusters()関数を使用できます。次に、Cluster.getMarkers()関数を使用して、Cluster内のマーカーのを取得することができます。それで、あなたは前進するために必要なものを持っているはずです。

+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はJ代わりのIを使用しています。

関連する問題