2013-08-02 9 views
23

Używam wtyczki https://github.com/Leaflet/Leaflet.draw i próbuję ustalić, w jaki sposób mogę pobrać typ warstwy edytowanej.Leaflet.draw pobierz typ warstwy w losowaniu: edytowane zdarzenie

Na razie draw:created, mam layer i layerType, ale na draw:edited (uruchamiane podczas zapisywania wszystkie edycje) uzyskać listę warstw, które były edytowane.

draw:created wydarzenie

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

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

Dziękuję za poświęcony czas.

Odpowiedz

29

Można użyć 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 
     } 
    }); 
}); 
17

Zachowaj ostrożność podczas korzystania z instanceof. Leaflet.draw plugin używa standardu Leaflet's L.Rectangle. Prostokąt ulotki rozciąga się na Polygon. Wielokąt rozszerza się o Polyline. Dlatego niektóre kształty mogą dać ci nieoczekiwane rezultaty przy użyciu tej metody.

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

}); 

Jak mogę się dowiedzieć, jaki jest typ kształtu?

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

Nie powinno być lepiej odwrócić kolejność? test Prostokąt -> powrót, test Wielokąt -> powrót, test Polilinia -> powrót – Don

+0

Dziękuję kolego !! Utknęłam, zastanawiając się, dlaczego moja Polilinia została znaleziona jako wielokąt. Teraz rozumiem, dlaczego! Thanksssssssss –