Mapbox - кластеризация только маркеров с одинаковыми координатами

Можно ли кластеризовать только маркеры по одним и тем же координатам? При использовании кластеризации маркеров mapbox все маркеры группируются в зависимости от уровня масштабирования карты. Я бы хотел, чтобы все маркеры были независимыми (не сгруппированными), кроме маркеров в одних и тех же координатах широта-долгота.

Это возможно?


person Marinko Dragojević    schedule 26.12.2015    source источник
comment
Это не кластеризация (см. Википедию), а обнаружение повторяющихся координат, гораздо более простая проблема.   -  person Has QUIT--Anony-Mousse    schedule 27.12.2015
comment
Вы хоть мой пост читали? Задача - ГРУППИРОВАТЬ маркеры с одинаковыми координатами и НЕ ГРУППИРОВАТЬ другие.   -  person Marinko Dragojević    schedule 27.12.2015
comment
[ссылка] mapbox.com/mapbox.js/ пример / v1.0.0 / filtering-marker-clusters   -  person Marinko Dragojević    schedule 27.12.2015
comment
да. Вы хотите сгруппировать дубликаты и не выполнять кластеризацию, но в заголовке вашего вопроса говорится о кластеризации (см. Википедию для кластеризации)   -  person Has QUIT--Anony-Mousse    schedule 27.12.2015
comment
Очевидное (и, вероятно, лучшее) решение - объединить повторяющиеся координаты одного маркера перед их добавлением на карту.   -  person Has QUIT--Anony-Mousse    schedule 27.12.2015


Ответы (1)


Это не идеальное решение, но оно сработает ... Я решил свою проблему, используя две группы слоев, одну для отдельных маркеров, а другую для кластерных маркеров.

Что-то вроде этого:

var overlay1 = L.layerGroup().addTo(map);//this one is for single markers
var overlay2 = L.layerGroup().addTo(map);//this one is for clustered

var layers;


//load markers from external source
var featureLayer = L.mapbox.featureLayer()

.loadURL('/my_geojson_script/')

.on('ready', function(e) {

    layers = e.target;

    //go and do the filtering
    doTheThing();



})





function doTheThing()

    overlay1.clearLayers();//remove all single markers
    overlay2.clearLayers();//remove all clustered

    var clusterGroup = new L.MarkerClusterGroup().addTo(overlay2);



    layers.eachLayer(function(layer) {


        //the number of markers on this layer coordinates (info collected from json property. I calculate this in advance)
        var numberOfMarkers = layer.feature.properties.numberOfMarkers;


        //if number of markers is greater than 1 add layer to cluster group         
        if(numberOfMarkers>1){

            clusterGroup.addLayer(layer);
        }
        else{//if number of markers is 1 add layer to individual layer group

            overlay1.addLayer(layer);
        }




    }); 
}
person Marinko Dragojević    schedule 26.12.2015