web-dev-qa-db-ja.com

Leaflet.drawは、draw:editedイベントでレイヤータイプを取得します

https://github.com/Leaflet/Leaflet.draw プラグインを使用していて、編集したレイヤーのレイヤータイプを取得しようとしています。

draw:createdイベント、layerlayerTypeがありますが、draw:edited(すべての編集を保存するときにトリガーされます)編集されたレイヤーのリストを取得します。

draw:createdイベント

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);
});

draw:editedイベント

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
    });
});
29
Daniel Tavares

instanceof(docs here) を使用できます。

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

instanceofを使用するときは十分注意してください。 Leaflet.draw plugin は標準 リーフレットのL.Rectangle を使用します。リーフレットの長方形は Polygon に拡張されます。ポリゴンは 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';
    }

};
23
martynas