markerclusterer проверьте, находится ли маркер в кластере
У меня есть веб-карты на основе с помощью jQuery-интерфейс-карту и markerclusterer плагин, чтобы сделать карту Google.
Я отфильтровываю, какие маркеры должны быть показаны или нет, а затем обновляю карту.
Мне нужно создать список некластеризованных маркеров, и поэтому для этого нужен способ проверить кластеры по маркерам и выяснить, какие из них не кластеризованы.
Существуют ли какие-либо методы для этого?
Я попытался пройтись по кластерам и вручную проверить маркеры против кластеров, но получаю ошибку, сообщающую мне, что свойство кластеров var_clusterer.clusters_
не определено.
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; }