Primeros pasos con PostGIS (Parte I)


1.Creamos una base de datos.

Desde la consola utilizamos el comando createdb para crear una base de datos de nombre santafe con el usuario postgres :

					
createdb -U postgres santafe
					
				

2- Añadimos las funcionalidades geoespaciales a nuestra Base de Datos.

Desde consola entramos en la base de datos santafe usando el comando psql :

						
psql -U postgres santafe
						
					

Y ya dentro de la base de datos, le añadimos la extensión postgis para añadir las funcionalidades de postgis a nuestra base de datos y postgis_topology si queremos trabajar con topología persistente.

						
santafe=# CREATE EXTENSION postgis;
santafe=# CREATE EXTENSION postgis_topology;
						
					

Tambíen podemos crear la base de datos y sus extensiones con la herramienta de administración de bases de datos que quieras como PgAdmin que se instala automáticamente cuando instalas PostgreSQL, en nuestro caso trabajamos con DBeaver, ya que nos permite trabajar tanto con bases de datos PostgreSQL como con bases de datos MySql, SqLite, Oracle


Para comprobar que las extensiones se cargaron correctamente en tu base de datos puedes ver que en tu base de datos se ha generado la tabla spatial_ref_sys.sql. Esta tabla guarda datos de una gran cantidad de sistemas de referencia.


3. Creamos una tabla geoespacial.

A continuación ya puedes crear tablas con propiedades geoespaciales, lo puedes hacer directamente desde tu herramienta de administrador de bases de datos haciendo clic al botón derecho a tu base de datos en el explorador, nueva tabla o directamente mediante una instrucción SQL ya sea en la consola de tu ordenador o en el editor SQL de PgAdmin o DBeaver.

Para comenzar a utilizar PostGIS no es necesario que seas un experto en lenguaje SQL, pero si deberías comenzar a conocer los comandos básicos y poco a poco ir profundizando. Es muy recomendable comenzar a familiarizarse con el uso de la consola, ya que te va a permitir ser más rápido y eficiente.

La instrucción SQL sería algo así, donde creamos la tabla prueba1 con los campos. gid que será tipo de dato serial el cual utilizaremos como llave primaria, nombre que será de tipo texto y valor que será de tipo entero:

						
create table prueba1(gid serial primary key, nombre varchar, valor int);
						
					

Para que esta tabla tenga propiedades espaciales le agregamos una columna de nombre geom que será del tipo geometry (en este caso será una geometría puntual con el código EPSG: 5343 que corresponde al marco de referencia Gauss-Krüger Faja 1, POSGAR 07).

						
alter table prueba1 add column geom geometry(Point,5343);
						
					

Esta es la forma común de añadir una columna nueva en PostgreSQL. Tambíen podemos utilizar la función específica de PostGIS addgeometrycolumn.

						
addgeometrycolumn (‘prueba1’, ‘geom’, 5343, ‘point’, 2);
						
					

En este caso añade la tabla prueba1 una columna geom con código 5343 puntual de dos dimensiones. O directamente puedes crear una tabla con propiedades geoespaciales.

						
create table prueba2(gid serial primary key, nombre varchar, numero int, geom
geometry(Linestring,5343));
						
					

Si queremos borrar una columna de la tabla o una tabla completa utilizamos los siguientes comandos:

						
alter table prueba1 drop column geom;
						
					

Borramos la columna geom de la tabla prueba1 o borramos la tabla prueba1 directamente:

						
drop table prueba1
						
					

4. Insertar Datos a una tabla geoespacial.

Cuando ya tenemos una tabla geoespacial creada ya podemos insertar datos en ellas. Debes saber el tipo de datos GEOMETRY admite además de POINT tanto de 2, 3 o 4 dimensiones y LINESTRING los tipos POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON o GEOMETRYCOLLECTION entre otros. Además también existe el tipo de datos GEOGRAPHY con sus diferentes tipos que se usa en tenemos coordenadas esféricas. Si quieres saber más sobre los tipos de datos mira la documentación de PostGIS

A continuación insertamos en nuestra tabla prueba2 un registro de nombre línea 1, con valor 3000, al que le añadimos una línea de tres vértices de dos dimensiones en nuestro sistema de referencia EPSG:5343 con la función st_geomfromtext(). Esta función nos permite presentar las coordenadas en formato WKT (Well Know Text) y lo traduce al formato binario BLOB (que entiende PostGIS)

						
insert into prueba2 (nombre, valor, geom) values ('Linea 1', 3000, st_geomfromtext('Linestring(0 0,1
1,1 2)', 5343));
						
					

Podemos comprobar que se cargaron bien nuestros registros con sus geometrías en cualquier software GIS de escritorio como QGIS.


5. Cargar una tabla a nuestra base de datos.

Además crear nuevas tablas y nuevos registros de estas podemos cargar a nuestra base de datos capas con las que hemos trabajado en nuestro GIS de escritorio, por ejemplo en formato .shp

A continuación vamos a cargar tres capas que creamos en QGIS a nuestra base de datos santafe. Primeros pasamos nuestra capa .shp a formato .sql. Para ello utilizamos la utilidad shp2pgsq, utilizamos -s para pasar el marco de referencia de nuestra capa, -g para cambiar el nombre de la columna geometría a geom, -w para que la importación se realice en formato WKT, -W para indicar el tipo de codificación, indicamos la ruta del archivo .shp, le indicamos un alias y el nombre del archivo .sql

						
shp2pgsql -s 4326 -g geom -w -W LATIN1 lugares.shp lugares > lugares.sql
shp2pgsql -s 4326 -g geom -w -W LATIN1 distritos.shp distritos > distritos.sql
shp2pgsql -s 4326 -g geom -w -W LATIN1 avenidas.shp avenidas > avenidas.sql
						
					

Cuando ya tenemos los archivos .sql solamente nos queda importarlos a nuestra base de datos mediante el comando psql :

						
psql - U postgres -f lugares.sql santafe
psql -U postgres -f avenidas.sql santafe
psql -U postgres -f distritos.sql santafe
						
					



Sobre el Autor


Pedro Calás Blasco

Cartógrafo. Valenciano por el Mundo. He vivido en Mexico, Brasil y Argentina. Entusiasta de los mapas y las tecnologías Web Mapping. Fundador y coordinador de Mapearte. impulsamos y desarrollamos proyectos que contribuyan al desarrollo social a través de las tecnologías.


¿Eres desarrollador? Únete a la red