Selecionando tipos de recurso ao usar ogr2ogr para converter em shapefile?

22

Os arquivos de forma podem ter apenas um tipo de geometria, mas muitos outros formatos (kml, geojson) podem ter vários tipos.

Ao converter para shapefiles, é possível dizer ao ogr2ogr para criar vários shapefiles, um para cada tipo?

Parece que a opção "-where" pode ser útil, mas a página do manual não explica a sintaxe.

Por exemplo, aqui está um comando que falha:

$ wget http://a841-tfpweb.nyc.gov/jackson-heights/wp-content/themes/tfp/kml/transit.kml
$ ogr2ogr -f "ESRI Shapefile" transit.shp transit.kml
Warning 6: Normalized/laundered field name: 'Description' to 'Descriptio'
ERROR 1: Attempt to write non-linestring (POINT) geometry to ARC type shapefile.
ERROR 1: Terminating translation prematurely after failed
translation of layer Transit (use -skipfailures to skip errors)
slinkp
fonte

Respostas:

21

Descobri isso lendo a documentação SQL do OGR em http://www.gdal.org/ogr/ogr_sql.html

Isso funciona, usando um comando e um arquivo de saída por tipo de geometria:

$ ogr2ogr -where "OGR_GEOMETRY='Point'" -f "ESRI Shapefile" transit_points.shp transit.kml
$ ogr2ogr -where "OGR_GEOMETRY='LineString'" -f "ESRI Shapefile" transit_linestrings.shp transit.kml
slinkp
fonte
4

Se o outputparâmetro for um diretório em vez de um nome de arquivo, o ogr2ogr converterá automaticamente todos os tipos de geometria em shapefiles separados:

ogr2ogr out_dir d:\incoming\nhn_09AA001_1_0.gml

Infelizmente para o OP, isso não funciona para o KML, mas para alguns dos outros vários formatos de tipo de geometria, como ArcInfo Coverages e GML. Publique aqui porque esta é a pergunta mais votada na seleção do tipo de geometria.

D:\>dir /s/b converted\*.shp

D:\converted\NHN_HD_ISLAND_2.shp
D:\converted\NHN_HD_MANMADE_0.shp
...
D:\converted\NHN_TO_NAMEDFEA_0.shp
D:\converted\NHN_WORKUNIT_LIMIT_2.shp
Matt Wilson
fonte
-1

ogr2ogr: converte um único kml em shapefile:

ogr2ogr -f "ESRI Shapefile" C: \ kml \ LJ0047.shp C: \ kml \ LJ0047_.kml

ogr2ogr: converta múltiplos arquivos kml em shapefiles:

para% f em (* .kml) faça ogr2ogr -f "ESRI Shapefile"% ~ nf.shp% f

É necessário acessar a pasta de entrada.

Jorge Santos
fonte
Obrigado, mas essa não é a pergunta que fiz.
slinkp