15 votos

Unir un archivo CSV a shapefile usando gdal / ogr?

Tengo un shapefile con varios atributos, por ejemplo YEAR , COUNTY , y AREA . También tengo un archivo CSV con más campos que quiero en el archivo de forma, como POPULATION . Tanto el archivo shape como el archivo CSV tienen un campo GISJOIN . Sé cómo hacer una unión en QGIS. Pero, ¿cómo puedo hacer una unión permanente y escribir en un shapefile usando ogr2ogr o una de las otras herramientas en GDAL / OGR?

29voto

Lucas Puntos 128

La utilidad ogr2ogr admite una sintaxis de SQL limitada . Puedes unir tu CSV al shapefile usando algo como lo siguiente:

 ogr2ogr -sql "select inshape.*, joincsv.* from inshape left join 'joincsv.csv'.joincsv on inshape.GISJOIN = joincsv.GISJOIN" shape_join.shp inshape.shp
 

13voto

La respuesta aceptada es realmente útil, pero descubrí que era lenta con una base de datos de gran tamaño. Creo que también limita sus opciones al unir los datos.

Mi método ahora es colocar todo en SQLite (usando una combinación de csvkit y ogr2ogr):

 csvsql --db sqlite:///myjoindb.db --insert myjoincsv.csv
ogr2ogr -append -f "SQLite" myjoindb.db myjoinshp.shp
 

Luego únete a todo y crea un shapefile a partir de él:

 ogr2ogr -f "ESRI Shapefile" -sql "SELECT csv.*, shp.* FROM myjoinshp shp INNER JOIN myjoincsv csv ON csv.joinfield = shp.joinfield" joined_output.shp myjoindb.db
 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X