Подтвердить что ты не робот

Leaflet.draw извлекает тип слоя при рисовании: отредактированное событие

Я использую плагин https://github.com/Leaflet/Leaflet.draw и пытаюсь получить тип слоя отредактированного слоя.

На событии draw:created layerType меня есть layer и layerType, но при draw:edited (срабатывает при сохранении всех правок) я получаю список слоев, которые были отредактированы.

Розыгрыш: созданное событие

map.on('draw:created', function (e) {
    var type = e.layerType,
        layer = e.layer;

    if (type === 'marker') {
        // Do marker specific actions
    }

    // Do whatever else you need to. (save to db, add to map etc)
    map.addLayer(layer);
});

Розыгрыш: отредактированное событие

map.on('draw:edited', function (e) {
    var layers = e.layers;
    layers.eachLayer(function (layer) {
        //do stuff, but I can't check which type I'm working with
        // the layer parameter doesn't mention its type
    });
});
4b9b3361

Ответ 1

Вы можете использовать instanceof (документы здесь).

map.on('draw:edited', function (e) {
    var layers = e.layers;
    layers.eachLayer(function (layer) {
        if (layer instanceof L.Marker){
            //Do marker specific actions here
        }
    });
});

Ответ 2

Будьте очень осторожны при использовании instanceof. Leaflet.draw плагин использует стандартный Leaflet L.Rectangle. Лист прямоугольника расширяет Polygon. Polygon extends Polyline. Поэтому некоторые формы могут дать вам неожиданные результаты, используя этот метод.

var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);

... add layers to drawnItems ...

// Iterate through the layers    
drawnItems.eachLayer(function(layer) {

    if (layer instanceof L.Rectangle) {
        console.log('im an instance of L rectangle');
    }

    if (layer instanceof L.Polygon) {
        console.log('im an instance of L polygon');
    }

    if (layer instanceof L.Polyline) {
        console.log('im an instance of L polyline');
    }

});

Как узнать тип формы?

var getShapeType = function(layer) {

    if (layer instanceof L.Circle) {
        return 'circle';
    }

    if (layer instanceof L.Marker) {
        return 'marker';
    }

    if ((layer instanceof L.Polyline) && ! (layer instanceof L.Polygon)) {
        return 'polyline';
    }

    if ((layer instanceof L.Polygon) && ! (layer instanceof L.Rectangle)) {
        return 'polygon';
    }

    if (layer instanceof L.Rectangle) {
        return 'rectangle';
    }

};