markerclusterer проверьте, находится ли маркер в кластере


У меня есть веб-карты на основе с помощью jQuery-интерфейс-карту и markerclusterer плагин, чтобы сделать карту Google.

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

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

Существуют ли какие-либо методы для этого?

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

3 4

3 ответа:

Примечание : это решение использует библиотеку 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 () теперь находится в docs: MarkerClustererPlus docs

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

Вы можете вставлять маркеры по отдельности в объект кластеризации маркеров и немедленно (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 );
}

Примечание: Использование 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;
}