markerclusterer проверяет, находится ли маркер в кластере - PullRequest
4 голосов
/ 23 ноября 2011

У меня есть веб-карта, использующая плагин jquery-ui-map и markerclusterer для создания карты Google.

Я отфильтрую, какие маркерыдолжно быть показано или нет, а затем обновите карту.

Мне нужно создать список некластеризованных маркеров, и поэтому для этого нужен способ проверить кластеры по маркерам и выяснить, какие из них не кластеризованы.

Есть ли способы сделать это?

Я пытался циклически проходить через кластеры и вручную проверять маркеры по кластерам, но получаю сообщение об ошибке, сообщая, что свойство кластеров var_clusterer.clusters_ не определено.

Ответы [ 3 ]

7 голосов
/ 02 января 2012

ПРИМЕЧАНИЕ : в этом решении используется библиотека MarkerClustererPlus

Вы можете использовать метод getClusters () для разбивки массива всех объектов кластера, которые в данный момент обрабатываются MarkerClusterer.

var clusterManager = new MarkerClusterer( googleMap, markersArray, clusterOptions ); // setup a new MarkerClusterer

var clusters = clusterManager.getClusters(); // use the get clusters method which returns an array of objects

for( var i=0, l=clusters.length; i<l; i++ ){
    for( var j=0, le=clusters[i].markers_.length; j<le; j++ ){
        marker = clusters[i].markers_[j]; // <-- Here's your clustered marker
    }
}

После того, как вы получите массив с помощью цикла getClusters () через объекты кластера. Для каждого кластера вы можете извлечь текущий массив markers_ и получить свой кластерный маркер.

getClusters () теперь находится в документах: MarkerClustererPlus docs

2 голосов
/ 26 июля 2018

ПРИМЕЧАНИЕ: с использованием MarkerClustererPlus v2.1.10

isMarkerClustered(marker: Marker, clusterer: MarkerClusterer): boolean {
   const clusters = clusterer.getClusters();
   for (let i = 0, l = clusters.length; i < l; i++) {
      const markers = clusters[i].getMarkers();
      for (const m of markers) {
        if (m === marker && markers.length > 1) {
          return true;
        }
      }
    }
    return false;
}
2 голосов
/ 04 мая 2012

Немного дамп, но эффективный метод ....

Вы можете вставлять маркеры индивидуально в объект кластера маркеров и сразу (1) до и (2) после вызывать его метод .getTotalCluster ().чтобы увидеть, попадет ли недавно добавленный маркер в кластер.

Я использую этот метод, после того как getClusters () у меня не сработал, может быть, я не использую его через jquery.

var old_cluster_val = markerCluster.getTotalClusters(); // <-----(1)
     markerCluster.addMarker( marker );
var new_cluster_val = markerCluster.getTotalClusters(); // <-----(2)

if (old_cluster_val == new_cluster_val) {
    in_a_cluster.push(marker);  
} else {
    not_in_cluster.push( marker );
}
...