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?
Respuestas
¿Demasiados anuncios?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
Vasilache Anton Ciprian
Puntos
6
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