Ionic + Leaflet Как я могу очистить существующий слой перед его перерисовкой? - PullRequest
0 голосов
/ 05 июля 2018

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

Вот что я делаю до сих пор:

.ts file

ngOnInit() {
    // get saved polygons from db
   ...
   .subscribe((res => {
       res.forEach(data => {
           this.drawPolygon(data);
       });
   }));
}

...


// Draw each of the saved polygons
drawPolygon(data) {
    if (data.polygon.geometry) {
        let shape = {
            polygon: data,
            type: data.polygon.type,
            geometry: {
                type: data.polygon.geometry.type,
                coordinates: data.polygon.geometry.coordinates
            },
            properties: {}
        };

        // Remove all existing layers


        L.geoJSON(shape, {
            onEachFeature: this.onEachFeature.bind(this),
        }).addTo(this.myMay);
    }
}


// onEachFeature method to trigger popover
onEachFeature(feature, layer) {
    layer.on('click', event => {
        let popover = this.popoverCtrl.create('MyComponent', {
        layer: feature
    });

    popover.present();

    }, this);
}

Я пробовал различные методы removeLayer или clearLayers, чтобы даже без удачи удалить карту. Любые предложения приветствуются!

EDIT

Если я обновлю страницу после всего, все дополнительные слои будут удалены - и один слой останется, как и должно быть.

1 Ответ

0 голосов
/ 06 июля 2018

Для удаления всех слоев должен работать следующий код, предполагая, что ваш объект карты называется myMap:

myMap.eachLayer(function (layer) {
    myMap.removeLayer(layer);
});

Я бы не стал помещать его в drawPolygon - ngOnInit или откуда он вызывается, кажется лучшим местом для очистки данных карты перед добавлением новых.

...