J'essaye d'obtenir un fichier KML ( wijken.kml ) dans Shapely . Le fichier KML est validé par rapport au schéma XML approprié, donc je suppose que l'entrée est correcte.
Itinéraires que j'ai essayés:
1) Conversion au format WKT ou WKB et lecture avec les fonctions intégrées
Conversion:
ogr2ogr -f CSV wijken.csv wijken.kml -lco GEOMETRY=AS_WKT
ogr2ogr -f SQLite wijken.wkb wijken.kml
En forme:
from shapely import wkt, wkb
f = open('../kml/wijken.wkb')
wkb.load(f)
Ce qui donne (pareil pour wkt()
):
ReadingError: Could not create geometry because of errors while reading input.
Comme il ne fournit aucune autre information et que le code Python enveloppe d'autres bibliothèques (C?), Je ne sais pas ce qui ne va pas avec le format. Le fichier CSV contient plusieurs colonnes, peut-être que quelque chose ne va pas, mais je n'ai pas trouvé d'exemple WKT en ligne comparable à tester.
2) Conversion en GeoJSON et en utilisant la construction dans galbé asShape
fonction
ogr2ogr2 -f GeoJSON wijken.json wijken.kml
En forme:
import json
from shapely.geometry import asShape
f = open('wijken.json', 'r')
js = json.load(f)
f.close()
asShape(js)
Qui donne:
ValueError: Unknown geometry type: featurecollection
Cette erreur est la même pour un exemple GeoJSON minimal et valide. En regardant le code Shapley, le problème est que les types GeoJSON de base tels que "Feature" et "FeatureCollection" ne sont pas reconnus. La route à suivre pour passer des fonctionnalités GeoJSON aux fonctionnalités comprises par Shapely n'est pas claire.
3) Lire en KML avec fastkml , qui renvoie des objets Shapely
Cela fonctionne, mais il semble perdre les propriétés / valeurs ExtendedData dans le KML (ou du moins ne pas les transmettre aux objets Shapely).
Je sens que je manque quelque chose, il ne peut pas être si difficile d'entrer des données dans Shapely. Quelqu'un peut-il m'orienter vers la solution la plus robuste / la plus fonctionnelle?