2016-07-26 22 views
0

Ich versuche eine KML-Datei in eine Broschüre zu importieren und sie für die Leaflet-Draw bearbeitbar zu machen. Ich verwende Flugblatt-Allesfresser, um die KML zu importieren.KML-Datei zu Leaflet-Draw drawnItems hinzufügen

<script src='https://api.mapbox.com/mapbox.js/plugins/leaflet-omnivore/v0.2.0/leaflet-omnivore.min.js'></script> 
var kmlFile = omnivore.kml('Point.kml') 

Wenn ich die kmlFile hinzufügen abzubilden es funktioniert perfekt, aber um die Formen zu machen editierbare Ich muss die Schicht zu drawnItems hinzufügen

var drawnItems = new L.FeatureGroup(); 
omnivore.kml('Point.kml').addTo(drawnItems); 

Jedoch habe ich eine Fehlermeldung erhalten:

Und wenn ich versuche, auf die Layer-Koordinaten zuzugreifen, um Objekte selbst zu erstellen und sie zu drawnItems hinzuzufügen, kann ich das anscheinend nicht tun, da ich keine Möglichkeit finde, auf die Objektkoordinaten zuzugreifen.

Wenn ich versuche, um die Schichten gelangen sie erscheinen leer

console.dir(omnivore.kml('Point.kml').getLayers()); 

Aber wenn ich die Allesfresser kml Objekt inspizieren kann ich sehen, dass _layers die Objekte und Koordinaten enthält.

console.dir(omnivore.kml('Point.kml')); 

Aber wenn die Methode getLayers ausgeführt wird, erscheint das Ebenen-Array leer.

Irgendwelche Vorschläge?

Antwort

1

Bitte beachten Sie, dass Leaflet omnivore Plugin asynchrone Methoden zur Verfügung stellt, da es Dateien herunterladen muss, bevor es sie analysieren und Leaflet-Layer erstellen kann.

Weitere Informationen über asynchrone Aufgaben in JavaScript, lesen Sie bitte: How do I return the response from an asynchronous call?

Deshalb ist Ihre Layer-Gruppe leer aussieht, wenn Sie versuchen, es sofort zu lesen.

Wenn Sie einige Operationen nur ausführen müssen, wenn die Daten korrekt heruntergeladen und in Leaflet-Layer konvertiert wurden, verwenden Sie die .on("ready", fn)-Syntax, as explained in the plugin README.

Zum Hinzufügen der resultierenden Ebenen zu einer Feature-Gruppe (zur späteren Verwendung mit dem Leaflet.draw-Plugin) beachten Sie, dass Sie Ihre Feature-Gruppe direkt als 3rd argument von omnivore.kml() angeben können.