La librería geoespacial GDAL/OGR cuenta con la funcionalidad ogr2ogr que resulta de gran interés para realizar importación de datos vectoriales en formatos tan diversos como Shapefile, Geopackage, CSV o GeoJSON a nuestra base de datos PostgreSQL – PostGIS.
En este breve artículo vamos a ver cómo importar archivos Shapefile, Geopackage y GeoJSON a PostGIS con ogr2ogr fácilmente utilizando la línea de comandos.
Utilizando ogr2ogr para importar datos a PostGIS y transformar formatos GIS
¿Por qué utilizar GDAL/OGR para importar datos geoespaciales a PostGIS?
Las ventajas de utilizar esta funcionalidad son varias:
- Permite lanzar procesos en cualquier máquina desde la terminal fácilmente, tanto en Linux como en Windows.
- La carga es realmente rápida, ya que no utilizamos ningún software intermedio como puede ser QGIS o algún gestor de bases de datos como pgAdmin.
- Podemos personalizar de forma sencilla los parámetros de ejecución mediante una serie de «flags» en el comando.
- La documentación de GDAL/OGR está realmente bien preparada y es sencilla de interpretar.
- Familiarizarnos con los comandos de GDAL/OGR nos ayudará a aprender a explotar su potencial más allá de la funcionalidad ogr2ogr que tratamos en este post.
- Nos permite establecer rutinas y programar la ejecución de dichos procesos fácilmente para automatizar la importación de datos geoespaciales a PostGIS.
- No necesitamos conocer ningún lenguaje de programación, aunque puede sacarse mayor partido combinándolo con conocimientos de Python para GIS.
Cómo ejecutar comandos de GDAL/OGR y utilizar la funcionalidad ogr2ogr
Los comandos de la funcionalidad ogr2ogr se ejecutan utilizando la consola o línea de comandos de Windows. Para acceder a ella basta con buscar «cmd» en el buscador de Windows (Símbolo del Sistema) o pulsando la tecla Windows + R y escribir a continuación «cmd». Se abrirá una sesión con tu usuario en la que puedes empezar a introducir comandos.
En el caso de Linux, deberás abrir la terminal que venga instalada con tu distribución. En Ubuntu puedes abrir la terminal de Gnome o pulsar Ctrl+Alt+T para acceder rápidamente.
Para poder utilizar la funcionalidad ogr2ogr deberás tener instalada GDAL/OGR o bien, si ya cuentas con una instalación de QGIS o PostgreSQL, añadir la ubicación de la funcionalidad a tu PATH en el caso de utilizar Windows. El lugar de instalación generalmente es C:\Program Files\PostgreSQL\version_de_PostgreSQL\bin para la instalación de PostgreSQL – PostGIS y C:\Program Files\version_de_QGIS\bin para la instalación de QGIS.
Efectivamente, tanto QGIS como PostgreSQL utilizan, entre otras librerías, GDAL/OGR en sus entrañas para conversión de datos y otros procesos geoespaciales.
Puedes asegurarte que ogr2ogr es accesible desde cualquier directorio escribiendo en tu sesión de consola/terminal el siguiente comando:
ogr2ogr --version
Este comando debería retornarte la versión de GDAL instalada. En ese caso, tu sistema debería estar listo para poder ejecutar comandos de GDAL/OGR. Si no es así, deberías revisar la configuración de las variables de entorno y añadir el directorio correspondiente al PATH.
Principios de ogr2ogr y patrones comunes en los comandos
La mayoría de los comandos de ogr2ogr se caracterizan por tener una seria de instrucciones comunes. Así pues, cuando queremos ejecutar comandos que modifiquen el formato de un archivo o interactuar con PostgreSQL – PostGIS veremos que se repiten estructuras en las sentencias.
Podríamos decir que, usualmente, se distinguen tres partes dentro de un comando:
- En la primera parte de un comando primero se invoca la funcionalidad, posteriormente se indica el formato de salida del archivo o, mejor dicho, qué driver se va a utilizar para ejecutar la conversión, seguido de la ruta y el nombre del archivo resultante.
- En la segunda parte del comando se establece el lugar de origen de la información, bien sea un archivo local o una base de datos PostgreSQL – PostGIS.
- Finalmente, se añaden comandos opcionales para definir la estructura del archivo, parámetros que afecten a las geometrías, conversiones entre sistemas de referencia de coordenadas, etc… Es decir, opciones de creación que se establecen mediante el flag «-lco».
Veamos un ejemplo, convirtiendo un archivo shapefile a Geopackage:
:: primera parte
ogr2ogr -f GPKG archivo_destino.gpkg
:: segunda parte
archivo_origen.shp
::tercera parte
-lco FID=gid -lco GEOMETRY_NAME=the_geom
Así, el comando completo para convertir un Shapefile al formato Geopackage con ogr2ogr sería el siguiente, indicando el driver usado (GPKG), la ruta y el archivo de destino, la ruta y el archivo de origen, y finalmente los flags «-lco» con las opciones de creación:
ogr2ogr -f GPKG archivo_destino.gpkg archivo_origen.shp -lco FID=gid -lco GEOMETRY_NAME=the_geom
¿Cómo importar un Shapefile a PostGIS con ogr2ogr?
Veamos un ejemplo de cómo importar un Shapefile con ogr2ogr sobre PostGIS. En el siguiente caso tratamos de cargar una capa del inventario forestal de Euskadi sobre nuestra base de datos PostGIS instalada en nuestra máquina local.
Utilizaremos el mismo esquema o patrón de comando que hemos visto anteriormente, aunque con ligeras variaciones:
ogr2ogr -f "PostgreSQL" PG:"dbname=eus_geodb host=localhost port=5432 user=postgres password=postgres" "inv_forestal_eus.shp" -lco GEOMETRY_NAME=geom -lco FID=gid -progress
En este caso no estamos indicando que el destino sea un archivo, sino que indicamos una conexión a una base de datos PostgreSQL – PostGIS. Para ello, definimos la conexión con PG:»parámetros de conexión». Entre ellos, el nombre de la base de datos, el anfitrión o host, el puerto de conexión, usuario, contraseña, esquema, etc…
Posteriormente indicamos, como viene siendo habitual, el archivo de origen (en este caso el shapefile del inventario forestal) que vamos a importar a la conexión PostGIS indicada.

Finalmente se detallan las opciones de creación de la capa (o Layer Creation Options, por eso «-lco» en referencia a sus iniciales…) donde indicamos que el nombre del campo de la geometría en PostGIS queremos que se denomine «geom» y el campo identificador único se denominará «gid».
Por último, el flag «-progress» permite mostrar una cuenta del avance del comando. Resulta útil para conocer el estado de ejecución del comando, sobre todo ante archivos pesados.
¿Cómo importar un Geopackage a PostGIS con ogr2ogr?
Del mismo modo que se pueden importar archivos Shapefile, también podemos importar archivos en formato Geopackage con ogr2ogr a PostGIS, otro de los principales estándares dentro del sector GIS hoy en día para intercambio de datos.
Dejando de lado las particularidades de éste formato (daría para uno o varios post en detalle), es imprescindible saber que un mismo archivo Geopackage puede contener múltiples capas. Mejor dicho, múltiples tablas, pues se trata sencillamente de una suerte de base de datos portátil y compacta basada en SQLite.
En el siguiente ejemplo, vamos a cargar la capa «t_poligonos» del archivo Geopackage «siose_2014_eus.gpkg» sobre la base de datos indicada.
ogr2ogr -f "PostgreSQL" PG:"dbname=eus_geodb host=localhost port=5432 user=postgres password=postgres" "siose_2014_eus.gpkg" "t_poligonos" -nln siose_euskadi_poligonos_2014 -lco GEOMETRY_NAME=geom -lco FID=gid -progress
El flag «-nln» que puedes observar hace referencia al nombre de la capa que se va a crear en la base de datos. Seguidamente añadimos los flags «-lco» y «-progress». De este modo, evitamos cargar todas las tablas del archivo Geopackage, sino únicamente la capa deseada y nombrándola bajo nuestro criterio.

Si obviásemos el flag «-nln» el nombre de la tabla en PostGIS sería el que recibe dentro del archivo Geopackage.
¿Cómo importar un archivo en formato GeoJSON a PostGIS usando ogr2ogr?
En el caso de querer importar un GeoJSON a PostGIS con ogr2ogr el procedimiento es muy similar al descrito anteriormente. El driver utilizado y la estructura del comando es muy similar.
En este caso, el formato GeoJSON es una adaptación del habitualmente usado formato JSON (JavaScript Object Notation) en el entorno web o en bases de datos NoSQL. En él los campos y valores se definen como pares de clave-valor. La definición de las geometrías se realiza mediante el formato WKT de la OGC.
Un ejemplo de importación de un GeoJSON a PostGIS con ogr2ogr:
ogr2ogr -f "PostgreSQL" PG:"dbname=eus_geodb host=localhost port=5432 user=postgres password=postgres" "municipios_eus.geojson" -lco GEOMETRY_NAME=geom -lco FID=gid -progress
Si quieres conocer más acerca de esta funcionalidad, puedes visitar la web oficial de la librería GDAL/OGR y visitar la sección de drivers vectoriales. Concretamente, en este espacio dedicado al driver PostgreSQL-PostGIS tienes más detalles y ejemplos acerca de cómo escribir comandos de conexión y manipulación de datos para su importación a una base de datos PostGIS.