¿Seleccionando tipos de entidades cuando usa ogr2ogr para convertir a shapefile?

22

Los shapefiles solo pueden tener un tipo de geometría, pero muchos otros formatos (kml, geojson) pueden tener varios tipos.

Al convertir a shapefiles, ¿es posible decirle a ogr2ogr que cree múltiples shapefiles, uno para cada tipo?

Parece que la opción "-where" puede ser útil pero la página de manual no explica la sintaxis.

Por ejemplo, aquí hay un comando que falla:

$ 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)
    
pregunta slinkp 01.06.2012 - 18:51

3 respuestas

20

Lo descubrí leyendo la documentación de OGR SQL en enlace

Esto funciona, usando un comando y un archivo de salida por tipo de geometría:

$ 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
    
respondido por el slinkp 04.06.2012 - 21:08
4

Si el parámetro output es un directorio en lugar de un nombre de archivo, ogr2ogr convertirá automáticamente todos los tipos de geometría en shapefiles separados:

ogr2ogr out_dir d:\incoming\nhn_09AA001_1_0.gml

Desafortunadamente para el OP, esto no funciona para KML, pero sí para algunos de los otros formatos de tipo de geometría múltiple como ArcInfo Coverages y GML. Publicar aquí porque esta es la pregunta más votada al seleccionar el tipo de geometría.

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
    
respondido por el matt wilkie 08.04.2015 - 22:00
-1

ogr2ogr: convierte un solo kml a shapefile:

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

ogr2ogr: convierte múltiples archivos kml en shapefiles:

for %f in (*.kml) do ogr2ogr -f "ESRI Shapefile" %~nf.shp %f

Es necesario acceder a la carpeta de entrada.

    
respondido por el Jorge Santos 02.06.2012 - 06:21

Lea otras preguntas en las etiquetas