Ich versuche eine KML-Datei ( wijken.kml ) in Shapely zu bekommen . Die KML-Datei wird anhand des richtigen XML-Schemas validiert, daher denke ich, dass die Eingabe korrekt ist.
Routen, die ich versucht habe:
1) Konvertieren in das WKT- oder WKB-Format und Einlesen mit integrierten Funktionen
Umwandlung:
ogr2ogr -f CSV wijken.csv wijken.kml -lco GEOMETRY=AS_WKT
ogr2ogr -f SQLite wijken.wkb wijken.kml
In Form:
from shapely import wkt, wkb
f = open('../kml/wijken.wkb')
wkb.load(f)
Welches gibt (das gleiche für wkt()
):
ReadingError: Could not create geometry because of errors while reading input.
Da es keine weiteren Informationen enthält und der Python-Code andere (C?) Bibliotheken umschließt, weiß ich nicht, was mit dem Format nicht stimmt. Die CSV-Datei enthält mehrere Spalten, vielleicht stimmt dort etwas nicht, aber ich habe kein vergleichbares Online-WKT-Beispiel zum Testen gefunden.
2) Konvertieren in GeoJSON und Verwenden der eingebauten Shapely- asShape
Funktion
ogr2ogr2 -f GeoJSON wijken.json wijken.kml
In Shapely:
import json
from shapely.geometry import asShape
f = open('wijken.json', 'r')
js = json.load(f)
f.close()
asShape(js)
Welches gibt:
ValueError: Unknown geometry type: featurecollection
Dieser Fehler ist für ein minimales, gültiges GeoJSON-Beispiel gleich. Beim Betrachten des Shapley-Codes besteht das Problem darin, dass grundlegende GeoJSON-Typen wie "Feature" und "FeatureCollection" nicht erkannt werden. Es ist nicht klar, welchen Weg Sie von GeoJSON-Funktionen zu Funktionen gehen müssen, die Shapely versteht.
3) Lesen Sie KML mit fastkml ein , das Shapely-Objekte zurückgibt
Dies funktioniert, aber es scheint, dass die Eigenschaften / ExtendedData-Werte in der KML verloren gehen (oder zumindest nicht an die Shapely-Objekte übergeben werden).
Ich habe das Gefühl, dass mir etwas fehlt. Es kann nicht so schwer sein, Daten in Shapely zu bekommen. Kann mich jemand auf die robusteste / funktionierende Lösung hinweisen?