El crecimiento y perfeccionismo de proyectos dónde la componente espacial cobra especial relevancia, hace plantearnos la opción de funcionar con herramientas más seguras y fiables de las que veníamos usando en nuestros comienzos.
En este sentido, cuando almacenamos grandes cantidades de información de gran importancia que deben ser tratadas y gestionadas de una forma cuidadosa y segura hace cuestionarnos si el procedimiento habitual de guardar proyectos y aglutinar carpetas de trabajo en discos duros es la manera idónea.
El protagonista de la publicación de hoy es PostgreSQL + Postgis cómo un potente sistema de gestión de base de datos. Mi andadura con esta herramienta ha sido más que satisfactoria al ser idónea en el tratamiento de grandes cantidades de datos y ser nexo de unión fiable y seguro con otras aplicaciones web o, en otro caso, servir de “trampolín” para generar nuestras propias conexiones Web Map Service o alimentar nuestros proyectos WebMapping.
Tabla de contenidos
Introducción
PostGIS es una extensión capaz de convertir el sistema de gestión de Base de Datos PostgreSQL en una base de datos espacial. Debido a su potencialidad y adaptación a diferentes escenarios GIS (escritorio o web) es la opción idónea para el almacenamiento, gestión y tratamiento de datos espaciales.
El uso de PostGIS nos permite realizar múltiples operaciones de análisis de la información si la necesidad de usar un software SIG, a esto hay que sumar que se trata de un software libre compatible con los estándares OGC y su perfecta implementación en el entorno de QGIS.
Es bastante común que, aunque PostGIS nos brinde la opción de realizar muchas de las tareas principales que realizamos con QGIS, en ocasiones es preferible trabajar o editar nuestra información cartográfica desde un software GIS.
En la siguiente publicación veremos diferentes maneras de añadir datos espaciales a nuestra base de datos PostGIS partiendo de un archivo Shapefile y valiéndonos de uno de los software SIG de código libre más potentes que existen, como es QGIS.
En el repositorio de descargas de zoneGIS podéis encontrar los manuales de instalación de los diferentes programas que se van a utilizar para llevar a cabo nuestra práctica.
Desde la consola del sistema mediante la utilidad shp2pgsql
PostGIS añade la utilidad shp2pgsql para convertir capas en formato Shapefile a tablas PostGIS. Esta utilidad se invoca desde la consola del sistema.
El primer paso será ejecutar la consola y escribir el directorio en el que se encuentran los datos con los que vamos a trabajar.
La importación de un Shapefile se realiza a través de la siguiente sentencia, dónde:
shp2pgsql -s 4326 -g geom -w Lim_Admin_Mundial.shp Lim_Admin_Muncial>Lim_Admin_Mundial.sql
- w: es el formato de salida WKT (por defecto el formato de salida es binario. Nosotros lo cambiamos a este formato para poder ver las geometrías en un formato comprensible).
- g: se trata de la columna geometría.
- s: es el sistema de referencia de nuestros datos (por defecto toma el valor 0).
Una vez ejecutada la sentencia podremos ver que en el directorio de trabajo se ha creado un fichero con extensión .sql
Una vez creado este fichero con nombre Lim_Admin_Mundial.sql, ya es posible cargar la información en nuestra base de datos mediante la siguiente sentencia, dónde:
psql -U postgres -d zonegis -f Lim_Admin_Mundial.sql
- d: es el nombre de nuestra base de datos.
- f: nombre del fichero a cargar.
Si entramos en la base de datos y listamos las tablas, podremos comprobar que nuestro archivo Lim_Admin_Mundial.sql forma ahora parte de nuestra base de datos.
A través de PgAdmin III (PostgreSQL)
El procedimiento para importar un Shapefile a nuestra base de datos PostGIS mediante pgAdmin es bastante sencillo.
Iniciamos sesión con pgAdmin y conectamos con nuestro servidor. Una vez realizada la conexión clicaremos sobre la herramienta “Executed the last used plugin” y entraremos en “PostGIS Shapefile and DBF loader 2.2”.
Aparecerá una nueva ventana dónde podremos añadir nuestro archivo. Para ello clicaremos sobre la opción “Add Field” y navegaremos hasta nuestro archivo shp.
El nuevo archivo se añadirá a la lista de importación. Hecho esto pasaremos a pinchar sobre la opción “Importar” para hacerlo efectivo.
En la ventana de comandos podremos ver el éxito o fracaso de nuestra tarea. Si actualizamos pgAdmin podremos ver que se ha incorporado la nueva tabla a nuestro Base de Datos.
Mediante el administrador de BBDD en QGIS
El administrador de BBDD lo podemos encontrar en QGIS en el menú Base de Datos/ Administrador de BDD. Desde la nueva ventana de trabajo podremos establecer conexión con nuestra base de datos.
Para importar nueva información vectorial a nuestra base de datos clisaremos sobre la opción “Importar capa o archivo” . En la ventana emergente configuraremos los parámetros necesarios para importar nuestra capa.
- Entrada: en este apartado tendremos que añadir desde el explorador nuestros datos. En este caso agregaremos nuestro Shapefile correspondiente a los límites administrativos mundiales.
- Tabla de salida: a) Esquema: public y b) Tabla: nombre que se va a establecer para nuestra tabla en Postgis.
- Opciones: activaremos el campo que contendrá la clave primaria de cada atributo, la columna que contendrá la geometría, el sistema de referencia a adoptar para las entidades y crearemos un índice espacial para los mismos.
Aceptamos los cambios y actualizamos nuestra base de datos para ver que los cambios han surgido efecto.
Partiendo de la caja de herramientas GDAL/OGR en QGIS
La librería de complementos de GDAL /OGR instalada en la caja de herramientas de QGIS contiene un plugin llamado “Importar vectorial a base de datos PostGIS” desde el cual podremos hacer nuestra importación de archivos Shapefile a nuestra base de datos tanto para aquellas conectadas previamente a QGIS como aquellas que no lo están.
En el siguiente ejemplo veremos como importar un Shapefile a una base de datos PostGIS ya cargada en nuestro software previamente. Para ello clicaremos sobre el plugin e introduciremos los parámetros necesarios para cargar nuestra capa:
- Base de datos (nombre de conexión): podremos escoger entre aquellas bases de datos que tengamos cargadas en un proyecto de QGIS.
- Capa de entrada: la capa a importar a nuestra Base de Datos.
- Tipo de geometría de salida: escogeremos polígonos que es la geometría de nuestra capa.
- Asignar un SRC de salida [opcional]: asignaremos el sistema de referencia de la capa.
- Dejamos todos los demás datos por defecto.
Haremos clic en “Run” y nos aseguramos de que nuestro archivo se ha incorporado correctamente a nuestra Base de Datos.
Con el comando OGR desde OsGeo Shell
La última opción es a través del comando OGR OsGeo Shell, quizás una forma poco usual de realizar nuestras importaciones, pero verdaderamente efectiva, rápida y segura.
Este comando viene por defecto en la instalación de QGIS, pudiendo acceder a él desde las herramientas del sistema.
Con el siguiente comando es posible importar de manera automática nuestros Shapefile a PostGIS sin necesidad de abrir QGIS o PostgreSQL. Os desgranamos el comando a continuación:
ogr2ogr.exe -progress --config PG_USE_COPY YES -f PostgreSQL PG:" dbname='zonegis' host=localhost port=5432 user='postgres' password='####' sslmode=disable active_schema=public " -lco DIM=2 C:\Users\Jose\Desktop\BLOG\PUBLICACIONES\4_maneras_import_SHP_to_PostGIS\Lim_Admin_Mundial.shp Lim_Admin_Mundial -overwrite -nlt POLYGON -lco GEOMETRY_NAME=geom -lco FID=id
Una vez hemos editado nuestro código y adaptado a nuestras necesidades lo copiaremos en la consola y lo haremos funcionar mediante ‘Intro’.
Seguidamente nos avisará del porcentaje de carga y un ‘Done’, asegurándonos de que el proceso se ha realizado con total éxito.
Añadir una tabla Postgis a QGIS
Por último, veremos la manera de importar nuestra tabla a QGIS y visualizar su geometría. Recordaros que en este archivo se pueden llevar labores de edición de la información, exportación a otros formatos o análisis espaciales, entre otros.
Lo primero que haremos será pinchar sobre la herramienta “añadir capa Postgis” . Crearemos una nueva conexión clicando en la pestaña “nueva” y configurando los parámetros necesarios para establecer la conexión.
Aceptamos los cambios y pinchamos sobre la pestaña “conexión” para entrar dentro de nuestra base de datos.
Por último, añadiremos nuestra tabla al proyecto para poder trabajarla desde QGIS.
hola cuando trato de importar un shapefile de 24.7 MB no importa por intermedio de la herramienta postgis shapefile import/export manager no me deja importar pero con shapefile pequeños la importación si es posible como podría solucionar ese problema, gracias de antemano por la respuesta.
Hola Miguel Angel,
Debería poder hacerse sin problema, ¿Que versión estás utilizando?
¿Has probado otra opción para importar dicha capa?
Un saludo.
Hola estuve usando la versión 9.5 y no logre realizar esa importación; una consulta más me pase a la versión de postgresql 9.2 y cuanto la instale no encontré la opción para instalar el postgis, usando el stack builder no encuentro la opción debería estar ahí verdad pues ya existía esa extensión…ojala puede ayudarme gracias de antemano por la respuesta.
Buenos días Miguel,
En la versión 9.2 creo que debes añadir tu la extensión postgis. ¿Por que escoges una versión tan anterior? Te dejo el enlace dónde indica como añadir la extensión postgis.
https://stackoverflow.com/questions/24981784/how-do-i-add-postgis-to-postgresql-pgadmin
Gracias José, escojo esa versión por compatibilidad con otro software para poder realizar algunas pruebas ya luego migro a las versiones actuales..veré el enlace gracias por las respuestas.