https://github.com/Leaflet/Leaflet.draw プラグインを使用していて、編集したレイヤーのレイヤータイプを取得しようとしています。
draw:created
イベント、layer
とlayerType
がありますが、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
});
});
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
}
});
});
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';
}
};