2013-08-02 8 views
23

Ich bin mit der https://github.com/Leaflet/Leaflet.draw Plugin, und ich versuche, herauszufinden, wie ich den Schichttyp der bearbeiteten Schicht abrufen kann.Leaflet.draw abrufen Schichttyp auf Unentschieden: bearbeitet Ereignis

Auf der draw:created Veranstaltung habe ich die layer und layerType, aber auf draw:edited (ausgelöst, wenn alle Änderungen zu speichern) ich eine Liste von Schichten erhalten, die bearbeitet wurde.

Das draw:created Ereignis

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

Das draw:edited Ereignis

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

Dank für Ihre Zeit danken.

Antwort

29

Sie könnten instanceof(docs here) verwenden.

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

sehr vorsichtig sein, wenn instanceof verwenden. Leaflet.draw plugin verwendet Standard Leaflet's L.Rectangle. Das Rechteck des Flugblatts erstreckt sich Polygon. Polygon erweitert Polyline. Daher können einige Formen unerwartete Ergebnisse mit dieser Methode liefern.

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

}); 

Wie finde ich den Formtyp heraus?

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

Sollte es nicht besser sein, die Reihenfolge umzukehren? Test Rectangle -> return, test Polygon -> return, Test Polyline -> return – Don

+0

Danke Kumpel !! War stecken geblieben und fragte mich, warum meine Polyline als Polygon gefunden wurde. Ich verstehe jetzt warum! Dankesssssssss –

Verwandte Themen