HOW TO: Unir mucho shapefiles en un solo shapefile con GDAL en Windows

Si trabajas con cartografía es normal que te den un montón de shapefiles como respuesta a “necesito el vectorial de una zona”, y en algunos casos (en el mío) no es manejable cuando su número es mayor de 1000 ficheros.

Para unir todos los ficheros, y de paso borrando las geometrías repetidas, podemos usar la fabulosa herramienta ogr2ogr del paquete GDAL, que puedes obtener desde el instalador de la OSGeo4W que nos permite instalar de manera sencilla GDAL compilado para Windows. Creo que esta parte es suficientemente sencilla como para explicarla, pero si hay dudas, deja un comentario.

Una vez instalado, entramos en “Inicio > OSGeo4W > OSGeo4W Shell”, y vamos a la ruta donde tenemos la montonera de shapefiles. Y creamos el siguiente fichero “.bat” dentro del mismo directorio:

@echo off
mkdir merged
set counter=0

setlocal ENABLEDELAYEDEXPANSION

for %%f in (*.shp) do (
	if not exist merged\mergedFilter.shp (
		echo Uniendo %%f
		ogr2ogr -f "ESRI Shapefile" merged\mergedFilter.shp %%f
	) else (
		echo Uniendo %%f - Iteracion !counter!
		ogr2ogr -f "ESRI Shapefile" -update -append merged\mergedFilter.shp %%f  
		if !counter! GTR 500 (
			echo Simplificando %%f
			ogr2ogr -f "ESRI Shapefile" merged\mergedFilterAux.shp merged\mergedFilter.shp -sql "SELECT * FROM mergedFilter GROUP BY id_parcela" -dialect sqlite
			del merged\mergedFilter.*
			ren merged\mergedFilterAux.* mergedFilter.*
			set counter=0
		)
	)
	set /A counter=counter+1
)

Este código tendrás que adaptarlo a tus necesidades, por ejemplo lo nombres de los fichero y demas, pero te cuento lo que hace:

  • Va leyendo todos los fichero del directorio donde se ejecuta
  • Une el fichero con un fichero que se va creando dentro de “merge/mergedFilter.shp”
  • Cada 500 uniones, borra todas las features que tengan el mismo “id” (en tu caso puede que sea diferente y tengas que usarlo comprobando la geometria).

Le das unas horas, y al final tendrás un fichero Shapefile gigante… pero al menos uno.

Please follow and like us:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *