2013-08-02 20 views
23

https://github.com/Leaflet/Leaflet.draw eklentisini kullanıyorum ve düzenlenmiş katmanın katman türünü nasıl alabileceğimi bulmaya çalışıyorum. draw:created olayda Leaflet.draw çizimde katman türünü al: Düzenlenen olay

, ben layer ve layerType var, ama draw:edited ben düzeltmeden geçmiş tabakaların bir listesini almak (tüm düzenlemeleri kaydederken Tetiklendi).

draw:created olay

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

Zaman ayırdığınız için teşekkür ederiz draw:edited olay.

cevap

29

instanceof(docs here)'u kullanabilirsiniz.

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

instanceof'u kullanırken çok dikkatli olun. Leaflet.draw plugin, standart Leaflet's L.Rectangle kullanır. Broşürün dikdörtgeni Polygon'u uzatır. Poligon, Polyline'u uzatır. Bu nedenle, bazı şekiller bu yöntemi kullanarak beklenmedik sonuçlar verebilir.

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

}); 

Şekil türünü nasıl bulurum?

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

}; 
+1

Siparişi tersine çevirmek daha iyi olmaz mı? test dikdörtgeni -> geri dön, çokgen testi -> dönüş, polyline testi -> geri dön – Don

+0

Teşekkür ederim dostum! Polyline'm neden bir Poligon olarak bulunduğunu merak ettim. Şimdi anlıyorum neden! thanksssssssss –