Estou tentando obter um arquivo KML ( wijken.kml ) no Shapely . O arquivo KML é validado contra o esquema XML adequado, então acho que a entrada está correta.
Rotas que tentei:
1) Convertendo para o formato WKT ou WKB e lendo com funções incorporadas
Conversão:
ogr2ogr -f CSV wijken.csv wijken.kml -lco GEOMETRY=AS_WKT
ogr2ogr -f SQLite wijken.wkb wijken.kml
Em bem torneado:
from shapely import wkt, wkb
f = open('../kml/wijken.wkb')
wkb.load(f)
O que fornece (o mesmo para wkt()
):
ReadingError: Could not create geometry because of errors while reading input.
Como ele não fornece mais informações, e o código Python envolve outras bibliotecas (C?), Não sei o que há de errado com o formato. O arquivo CSV contém várias colunas, talvez algo esteja errado por lá, mas não encontrei um exemplo WKT on-line comparável para testar.
2) Convertendo para GeoJSON e usando a construção na asShape
função Shapely
ogr2ogr2 -f GeoJSON wijken.json wijken.kml
Em Shapely:
import json
from shapely.geometry import asShape
f = open('wijken.json', 'r')
js = json.load(f)
f.close()
asShape(js)
Que dá:
ValueError: Unknown geometry type: featurecollection
Este erro é o mesmo para um exemplo GeoJSON mínimo e válido. Observando o código de Shapley, o problema é que tipos básicos de GeoJSON, como "Feature" e "FeatureCollection", não são reconhecidos. Não está claro qual rota seguir para ir dos recursos GeoJSON aos recursos que Shapely entende.
3) Leia em KML com fastkml , que retorna objetos Shapely
Isso funciona, mas parece perder os valores de properties / ExtendedData no KML (ou pelo menos não o passa para os objetos Shapely).
Sinto que estou perdendo alguma coisa, não pode ser tão difícil inserir dados no Shapely. Alguém pode me indicar a solução mais robusta / funcional?