Добавить поиск листовок через группу объектов - PullRequest
2 голосов
/ 02 апреля 2020

Аналогично Поиск маркеров в группе маркеров кластера Leaflet-MarkerCluster

Но я использую Контрольную группу поверх Маркерный кластер поэтому они будут отображаться после щелчка переключателя.

var map = L.map("map"),

parentGroup = L.markerClusterGroup(options), // Could be any other Layer Group type.
  
// arrayOfMarkers refers to layers to be added under the parent group as sub group feature
    
mySubGroup = L.featureGroup.subGroup(parentGroup, arrayOfMarkers);

parentGroup.addTo( map );
mySubGroup.addTo( map );

Я пытаюсь реализовать Поиск по листовке - но, согласно документации, требуется group layer маркеров в качестве второго параметра для его работы. , Проблема в том, что для использования L.featureGroup.subGroup требуется массив маркеров.

Попытка перебрать mySubGroup во время выполнения, чтобы получить слои маркеров, используя Leaflet eachLayer , но это будет дублировать количество маркеры у меня есть на карте для поиска, чтобы работать.

var markersLayer = new L.LayerGroup().addTo( this.map );

forEach( mySubGroup, layers => {
    layers.eachLayer( function (layer ) {
        console.log ( layer );

        markersLayer.addLayer( layer );

    })
});

   map.addControl( new L.Control.Search({layer: markersLayer}) );

1 Ответ

0 голосов
/ 02 апреля 2020

Решил эту проблему - хотя она довольно неэффективна. Если вы можете найти более изящное решение, чтобы избежать дублирования, не стесняйтесь представить его в качестве ответа!

 var title = layer.options.title;

// iterate through the cluster points
forEach( mySubGroup, layers => {
    layers.eachLayer(function (layer) {
        var title = layer.options.title; // match the search title to marker title

         marker = new L.Circle(new L.LatLng(layer.getLatLng().lat,layer.getLatLng().lng),
            {radius: 0, title: title, fill: 'red', fillOpacity: 0, opacity: 0 }); // Create an invisible L circle marker for each cluseter marker 


        markersLayer.addLayer(marker);

    })
});

Затем вы добавляете маркерный слой в поиск листовок

...