Временно удалить маркер из MarkerClusterGroup, пока открыто всплывающее окно - PullRequest
0 голосов
/ 10 мая 2019

В настоящее время я создаю приложение, которое отслеживает некоторых пользователей на пользовательской карте SVG.Я использую листовки 1.4.0 и leaflet.markercluster 1.4.1 для построения карты и отображения маркеров.Каждую секунду местоположение маркеров обновляется.К кластерам и маркерам прикреплены пользовательские всплывающие окна.На данный момент обновление позиции маркера при открытом всплывающем окне не обеспечивает хорошего опыта, поэтому при открытии всплывающего окна маркера его местоположение не обновляется, но обновляются все остальные маркеры.Проблема в том, что, когда другой маркер оказывается достаточно близко к открытому, открытый маркер присоединяется к другому маркеру и создает кластер, закрывая открытое всплывающее окно.

Я уже пытался удалить маркер изMarkerClusterLayer, когда открывается всплывающее окно и просто добавляется на карту как простой маркер, но это полностью удаляет маркер с карты.

        this.clusterLayer = L.markerClusterGroup({
            spiderfyOnMaxZoom: false,
            showCoverageOnHover: false,
            zoomToBoundsOnClick: false,
            maxClusterRadius: 20,
            animate: true,
            iconCreateFunction: () => {
                return this.aggregateIcon;
            }
        });

        this.clusterLayer.on('clusterclick', (clusterEvent: any) => {
            clusterEvent.sourceTarget
            .bindPopup((e) => {
                return this.createAggregatePopup(clusterEvent);
            }, { className: 'custom-popup aggregate', closeButton: false})
            .openPopup();
        });   

        this.map.addLayer(this.clusterLayer);

        this.map.on('popupopen', (e: any) => {
            //Remove marker from clusterLayer and add it to the map
            e.popup._source.addTo(this.map);
            this.clusterLayer.removeLayer(e.popup._source);
        });

        this.map.on('popupclose', (e: any) => {
            //Re-add the marker to the cluster layer
            this.map.removeLayer(e.popup._source);
            this.clusterLayer.addLayer(e.popup._source);
        }); 

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

...