2012-05-09 2 views
1

В настоящее время я использую Google Maps MarkerClusterer v3 (http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html) и были очень впечатлены функциональностью до сих пор.Google Maps MarkerClusterer v3 Возвратный кластер маркера

Однако теперь я хочу добавить дополнительную функцию к своей карте. Когда пользователь наводится над списком маркеров, изображение маркера изменяется. Это отлично работает, когда маркеры не кластеризованы, но поскольку я также использую кластер, мне нужно вернуть кластер, к которому принадлежит определенный маркер.

Кто-нибудь знает, возможно ли это? Я проверил документы 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() для извлечения Array из экземпляров класса Cluster. Затем вы можете использовать функцию Cluster.getMarkers() для извлечения Array маркеров, которые находятся в пределах этого 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_ и второй Еогеасп использует J вместо я.

Смежные вопросы