En este momento estás viendo Cómo importar masivamente datos espaciales a PostGis

Cómo importar masivamente datos espaciales a PostGis

  • Categoría de la entrada:Blog / PostGis / Qgis
  • Tiempo de lectura:11 minutos de lectura

Si alguna vez has sentido que importar shapefiles a Postgis es un dolor de cabeza interminable, no eres el único. Muchos profesionales SIG pasan horas valiosas lidiando con errores de SRID, instalaciones incompletas o herramientas que no saben configurar. Pero la verdad es que con la guía adecuada, este proceso puede ser mucho más sencillo y eficiente.

Hoy te explico las dos herramientas más utilizadas para importar masivamente datos espaciales a postgis: ogr2ogr y shp2pgsql. También te mostraré las herramientas gráficas disponibles, las variables necesarias, y por qué algunos comandos no funcionan si no está todo bien configurado. Vamos paso a paso.


Requisitos previos detallados

Antes de importar datos, asegúrate de tener:

  1. PostgreSQL y PostGIS instalados. Puedes usar instaladores como stackbuilder o la distribución OSGeo4W para windows, que incluye herramientas como GDAL y Qgis.
  2. Una base de datos creada con PostGIS habilitado. Esto se hace con el comando: CREATE EXTENSION postgis;
  3. Las rutas de las variables de entorno correctamente configuradas, especialmente si estás en windows. esto le dice a tu sistema dónde encontrar los archivos necesarios de GDAL y PROJ.
  4. Conocer el SRID de tu shapefile. Puedes encontrarlo en el archivo .prj o consultarlo desde Qgis.

Si no cumples alguno de estos puntos, es probable que los comandos no funcionen o que los datos se importen con errores.


Herramientas para importar: ogr2ogr vs shp2pgsql

ogr2ogr

  • Parte de la librería GDAL.
  • Permite importar muchos formatos, no solo shapefiles. Multiformato como shapefiles, GeoJSON, GML, KML y además exportar a varios destinos como PostGIS, MySQL, SQLite, entre otros.
  • Permite transformar los datos al SRID deseado mientras realiza la carga, lo que es útil si los datos de entrada tienen un SRID diferente al esperado en PostGIS.
  • Puede ser más rápido si se usa con la opción PG_USE_COPY=YES, que optimiza la carga masiva usando la instrucción COPY de PostgreSQL en lugar de INSERT
  • Se conecta directamente a la base de datos y hace la importación en un solo paso.

shp2pgsql

  • Viene con la instalación de PostGIS.
  • Está específicamente diseñado para trabajar con PostGIS y se integra de manera más eficiente con esta base de datos.
  • Utiliza la instrucción COPY de PostgreSQL para cargar grandes volúmenes de datos rápidamente, lo que lo hace muy eficiente para cargas masivas.
  • Primero convierte un shapefile en un script sql.
  • Luego requiere ejecutar el script con psql.
  • Es más adecuado si quieres revisar o versionar el sql antes de cargarlo.

¿Cuál usar?

  • Para cargas pequeñas, cualquiera sirve.
  • En resumen, shp2pgsql es la opción más rápida y eficiente para cargar grandes volúmenes de shapefiles a PostGIS, pero si tu flujo de trabajo requiere flexibilidad, soporte para otros formatos, o transformaciones avanzadas durante la carga, ogr2ogr es una mejor opción.
  • Para cargas masivas (100.000 registros o más), usa ogr2ogr con PG_USE_COPY=YES.

Ejemplo práctico con ogr2ogr

Exportar más de 150.000 registros de la malla vial de Bogotá.

ogr2ogr -f "PostgreSQL" PG:"dbname=malla_bogota user=postgres password=postgres" MallaVial.shp -nln malla_bogota_ogr -a_srs EPSG:4326 -lco PG_USE_COPY=YES
  • -f: formato de salida. En este caso “PostgreSQL”
  • PG: conexión de tu base de datos
  • -nln: nombre de la tabla
  • -a_srs: asigna el SRID (clave para que no se dañe tu geometría)
  • -lco PG_USE_COPY=YES: Esto le dice a ogr2ogr que utilice la instrucción COPY en lugar de INSERT para cargar los datos en la base de datos PostGIS. Esta es una de las formas más eficaces de cargar datos de manera masiva.

Si estás en windows y usas OSGeo4W, tal vez necesites esto si al ejecutar el comando te genera algún error al no encontrar el proj:

set PROJ_DATA=C:\\OSGeo4W\\share\\proj
set PROJ_LIB=C:\\OSGeo4W\\share\\proj
set GDAL_DATA=C:\\OSGeo4W\\share\\gdal

Esto asegura que ogr2ogr encuentre los datos de sistemas de referencia y formatos. si no están definidos, podrías recibir errores como “SRID desconocido” o “no se reconoce el driver”.

Ejemplo práctico con shp2pgsql

Exportar más de 150.000 registros de la malla vial de Bogotá.

"C:\Program Files\PostgreSQL\16\bin\shp2pgsql.exe" -s 4326 -I MallaVial.shp malla_vial_pgsql > malla_vial.sql
"C:\Program Files\PostgreSQL\16\bin\psql.exe" -h localhost -U postgres -d malla_bogota -f malla_vial.sql

Puedes abrir el archivo malla_vial.sql antes de ejecutarlo para revisar qué datos se están cargando, modificar tipos de columna o adaptarlo a otros entornos.

  • shp2pgsql: Convierte el shapefile MallaVial.shp a un archivo SQL.
  • -I: crea un índice espacial en la columna geom.
  • psql: Ejecuta el archivo SQL generado para insertar los datos en la base de datos PostGIS.

Herramientas gráficas para importar datos

Si prefieres algo más visual:

  • Qgis: importa datos a PostGIS desde el menú “Database” > “DB Manager”. Muy intuitivo.
  • PgAdmin: permite ejecutar scripts SQL, como los generados por shp2pgsql.
  • ogr2gui: interfaz gráfica para ogr2ogr. Menos usada, pero puede ser útil.

Consejos esenciales para evitar errores comunes

  • Define siempre el SRID correcto.
  • Usa ST_IsValid() para verificar la validez de tus geometrías.
  • Aplica ST_Transform() si necesitas cambiar el sistema de coordenadas.
  • Crea un índice espacial con CREATE INDEX ... USING GIST(geom); para mejorar el rendimiento.
  • Asegúrate de que el usuario que ejecuta la importación tenga permisos adecuados sobre la base de datos.
  • Revisa que el nombre de la tabla destino no exista o usa -overwrite en ogr2ogr para reemplazarla.

Importar masivamente datos espaciales a PostGIS no tiene por qué ser complicado. Con las herramientas correctas, buena configuración y estos consejos, puedes hacerlo de forma rápida y sin errores.

Si te gustó este contenido, descarga las 10 consultas más usadas en Postgis o encuentra cursos útiles en el canal de youtube.https://youtu.be/CDrjibfobi0