Está en la página 1de 15

Gua de inicio rpido de PostGIS

PostGIS aade soporte espacial a la base de datos relacional PostgreSQL. Le da a


PostgreSQL la capacidad de almacenar, consultar y manipular datos espaciales. En este
documento se usa PostgreSQL para referirse a las funciones generales de la base de
datos, y PostGIS para hablar sobre las funcionalidades espaciales adicionales que le
proporciona.
Arquitectura Cliente-servidor
PostgreSQL, al igual que muchas otras bases de datos, trabaja como servidor en un
sistema cliente-servidor. El cliente hace una peticin al servidor y obtiene una
respuesta. Trabaja de la misma forma que internet - el navegador Web del usuario es el
cliente y el servidor Web le enva la pgina Web que ha solicitado. En el caso de
PostgreSQL las peticiones se realizan en lenguaje SQL y la respuesta es generalmente
una tabla de datos procedente de la base de datos.
No hay nada que impida que el servidor est en el mismo ordenador que el cliente, con
lo cual, el usuario puede usar PostgreSQL en la misma mquina. El cliente del usuario
conecta con el servidor a travs de la conexin de red loopback interna, y no es visible
a otros ordenadores a menos que el usuario lo configure para que lo sea.
Crear una base de datos espacial
Un nico servidor PostgreSQL le permite organizar el trabajo en bases de datos
separadas. Cada base de datos acta como una entidad independiente, con sus propias
tablas, vistas, usuarios, etc. Cuando conecte a un servidor PostgreSQL debe indicar a
qu base de datos quiere acceder.
Puede obtener un listado de las bases de datos que hay disponibles en el servidor con
el comando psql -l . Por defecto debera poder ver varias bases de datos creadas en la
instalacin. Crear una nueva base de datos al seguir esta gua.
Tip
La lista usa un pager de unix estndar - pulse espacio para ir a la pgina siguiente, b para
volver a la anterior, q para salir, h para acceder a la ayuda.
PostgreSQL le da un comando unix para crear bases de datos, createdb. Necesita crear
una base de datos con las extensiones PostGIS, por eso debe indicarle cul es la
plantilla para crear la base de datos. Llamaremos a la nueva base de datos demo. El
comando es el siguiente:
createdb -T template_postgis demo
Tip
Generalmente puede acceder a la ayuda de las herramientas de lnea de comandos
tecleando help
Si ejecuta en este momento psql -l , su base de datos demo debera aparecer en el
listado.
Tambin puede crear bases de datos PostGIS usando el lenguaje SQL. En primer lugar
daber borrar la base de datos que acaba de crear usando el comando dropdb . A
continuacin use el comando psql para obtener un intrprete de comandos SQL:
dropdb demo
psql -d postgres
De esta forma conectar con la base de datos postgres , que es una base de datos del
sistema que todos los servidores deberan tener. A continuacin introduzca la
instruccin SQL para crear una nueva base de datos:
postgres=# CREATE DATABASE demo TEMPLATE=template_postgis;
Ahora cambie la conexin de la base de datos postgres a la nueva base de datos demo .
En el futuro puede conectarse directamente con el comando psql -d demo, pero hay
una forma ingeniosa de conectarse dentro de la lnea de comandos psql :
postgres=# \c demo
Tip
Pulse Ctrl-C si el prompt de psql contina apareciendo despus de pulsar la tecla return. De
esa forma limpiar su entrada y empezar otra vez. Es probable que el sistema est
esperando que introduzca un signo de cerrar comillas, punto y coma o algn otro signo.
Debera poder ver un mensaje informativo, y el prompt cambiar para mostrarle que ya
est conectado a la base de datos demo. Para comprobar que el proceso se ha realizado
correctamente, teclee \dt para poder ver un listado de las tablas que tiene la base de
datos. Debera ver algo cmo esto:
demo=# \dt
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+-------
public | geometry_columns | table | user
public | spatial_ref_sys | table | user
(2 rows)
PostGIS usa esas dos tablas. La tabla spatial_ref_sys almacena informacin de
sistemas de referencia espaciales vlidos, y puede usar algunas rdenes de SQL para
poder ver su contenido:
demo=# SELECT srid,auth_name,proj4text FROM spatial_ref_sys LIMIT 10;

srid | auth_name | proj4text
------+-----------+--------------------------------------
3819 | EPSG | +proj=longlat +ellps=bessel +towgs...
3821 | EPSG | +proj=longlat +ellps=aust_SA +no_d...
3824 | EPSG | +proj=longlat +ellps=GRS80 +towgs8...
3889 | EPSG | +proj=longlat +ellps=GRS80 +towgs8...
3906 | EPSG | +proj=longlat +ellps=bessel +no_de...
4001 | EPSG | +proj=longlat +ellps=airy +no_defs...
4002 | EPSG | +proj=longlat +a=6377340.189 +b=63...
4003 | EPSG | +proj=longlat +ellps=aust_SA +no_d...
4004 | EPSG | +proj=longlat +ellps=bessel +no_de...
4005 | EPSG | +proj=longlat +a=6377492.018 +b=63...
(10 rows)
Esta tabla confirma que tiene una base de datos con capacidad espacial. La funcin de
la tabla geometry_columns es decirle a PostGIS qu tablas tienen carcter espacial. Este
es el siguiente paso.
Crear una tabla espacial (para usuarios avanzados)
Ahora que tiene una base de datos espacial puede crear tablas espaciales.
Primero cree una tabla de base de datos ordinaria para almacenar algunos datos de
ciudades. Esta tabla debe tener 2 campos - uno para el ID numrico y otro para el
nombre de la ciudad:
demo=# CREATE TABLE cities ( id int4, name varchar(50) );
A continuacin debe aadir una columna de geometra para almacenar las
localizaciones de las ciudades. Por convencin se le suele llamar the_geom . Esto le dice
a PostGIS que tipo de geometra tiene cada registro (puntos, lneas, polgonos,etc.),
cuntas dimensiones (en este caso dos), y el sistema de referencia espacial. En este
caso la localizacin de las ciudades se marcar usando coordenadas del sistema de
referencia EPSG:4326.
demo=# SELECT AddGeometryColumn ( 'cities', 'the_geom', 4326, 'POINT', 2);
Si comprueba en este momento la tabla cities debera ver la nueva columna y que la
tabla no tiene actualmente ninguna fila.
demo=# SELECT * from cities;
id | name | the_geom
----+------+----------
(0 rows)
Para aadir filas a la tabla se usan algunas sentencias SQL. Para introducir la geometra
dentro de la columna de geometras use la funcin de PostGIS ST_GeomFromText , que
convierte las coordenadas y el id del sistema de referencia espacial, introducidas en
formato texto:
demo=# INSERT INTO cities (id, the_geom, name) VALUES (1,ST_GeomFromText('POINT(-0.1257
51.508)',4326),'London, England');
demo=# INSERT INTO cities (id, the_geom, name) VALUES (2,ST_GeomFromText('POINT(-81.233
42.983)',4326),'London, Ontario');
demo=# INSERT INTO cities (id, the_geom, name) VALUES
(3,ST_GeomFromText('POINT(27.91162491 -33.01529)',4326),'East London,SA');
Tip
Use las teclas de las flechas del teclado para reutilizar y editar sentencias en la lnea de
comandos.
Como puede ver, este paso llega a ser tedioso rpidamente. Afortunadamente hay
formas mucho ms fciles de introducir datos dentro de las tablas PostGIS. Pero ahora
hay tres ciudades en su base de datos y ya puede trabajar con esos datos.
Consultas simples
Para seleccionar datos de una tabla PostGIS se pueden aplicar todas las operaciones
SQL comunes.
demo=# SELECT * FROM CITIES;
id | name | the_geom
----+-----------------+----------------------------------------------------
1 | London, England | 0101000020E6100000BBB88D06F016C0BF1B2FDD2406C14940
2 | London, Ontario | 0101000020E6100000F4FDD478E94E54C0E7FBA9F1D27D4540
3 | East London,SA | 0101000020E610000040AB064060E93B4059FAD005F58140C0
(3 rows)
De esta forma obtiene una versin hexadecimal del campo geometra difcil de
interpretar.
Si desea volver a echar un vistazo a su geometra en formato WKT, puede usar las
funciones ST_AsText(the_geom) o ST_AsEwkt(the_geom). Tambin puede usar
ST_X(the_geom), ST_Y(the_geom) para obtener el valor numrico de las coordenadas:
demo=# SELECT id, ST_AsText(the_geom), ST_AsEwkt(the_geom), ST_X(the_geom), ST_Y(the_geom)
FROM CITIES;
id | st_astext | st_asewkt | st_x
| st_y
----+------------------------------+----------------------------------------+-------------
+-----------
1 | POINT(-0.1257 51.508) | SRID=4326;POINT(-0.1257 51.508) | -0.1257
| 51.508
2 | POINT(-81.233 42.983) | SRID=4326;POINT(-81.233 42.983) | -81.233
| 42.983
3 | POINT(27.91162491 -33.01529) | SRID=4326;POINT(27.91162491 -33.01529) | 27.91162491
| -33.01529
(3 rows)
Consultas espaciales
PostGIS aade a PostgreSQL muchas funciones con funcionalidad espacial. Una de ellas,
y que ya ha visto, es ST_GeomFromText que convierte WKT a geometra. La mayor parte
de las funciones empiezan con ST (para tipo espacial). Hay un listado de ellas en una
seccin de la documentacin de PostGIS. A continuacin, usar una para responder una
cuestin prctica - Qu distancia en metros hay entre estas tres ciudades llamadas
Londres, unas de otras, si asumimos que la tierra es esfrica?
demo=# SELECT p1.name,p2.name,ST_Distance_Sphere(p1.the_geom,p2.the_geom) from cities as
p1, cities as p2 where p1.id > p2.id;
name | name | st_distance_sphere
-----------------+-----------------+--------------------
London, Ontario | London, England | 5875766.85191657
East London,SA | London, England | 9789646.96784908
East London,SA | London, Ontario | 13892160.9525778
(3 rows)
Con lo cual obtiene la distancia, en metros, entre cada par de ciudades. Tenga en
cuenta que la parte where de la consulta es lo que evita que obtenga la distancia entre
una ciudad y s misma (que en todos los casos ser cero) o las distancias inversas entre
las ciudades que aparecen en la tabla de arriba (la distancia entre Londres de Inglaterra
y Londres de Ontario es la misma que de Londres de Ontario a Londres de Inglaterra).
Intente hacer la misma consulta sin incluir la parte del where y mire el resultado que
obtiene.
Tambin puede medir la distancia empleando un elipsoide mediante una funcin
diferente, especificando el nombre del elipsoide, el semieje mayor y el parmetro del
inverso del aplanamiento:
demo=# SELECT p1.name,p2.name,ST_Distance_Spheroid(
p1.the_geom,p2.the_geom, 'SPHEROID["GRS_1980",6378137,298.257222]'
)
from cities as p1, cities as p2 where p1.id > p2.id;
name | name | st_distance_spheroid
-----------------+-----------------+----------------------
London, Ontario | London, England | 5892413.63776489
East London,SA | London, England | 9756842.65711931
East London,SA | London, Ontario | 13884149.4140698
(3 rows)
Generar un mapa
Para producir un mapa a partir de datos PostGIS, necesita un cliente que pueda obtener
los datos. La mayora de los programas SIG de escritorio de cdigo abierto pueden
hacerlo - por ejemplo, Quantum GIS, gvSIG o uDig. A continuacin ver cmo generar
un mapa con Quantum GIS.
Inicie Quantum GIS y elija Aadir capa PostGIS del men Capa. Como no ha usado
PostGIS desde QGIS antes, obtendr un lista vaca de conexiones PostGIS.

Pinche en nuevo y introduzca los parmetros de conexin. Usaremos la base de datos
Natural Earth que se encuentra en el DVD. No hay nombre de usuario ni contrasea
porque la seguridad est configurada para permitir que acceda. Desactive la opcin
sobre tablas sin geometras si est activada. De esa forma las cosas sern un poco ms
fciles.

Pinche el botn Probar conexin, y si todo est correcto obtendr un mensaje
afirmativo. Pinche OK y su informacin de conexin se guardar con el nombre en la
lista de conexiones. Ahora ya puede pinchar Conectar y obtener un listado de las tablas
espaciales de la base de datos:

Elija la tabla lagos y pinche Aadir (no Cargar - que guarda las consultas). Esta capa se
debera cargar en QGIS:

Debera poder ver un mapa de los lagos. Como QGIS no sabe que son lagos, es posible
que no los pinte con color azul. Use la documentacin de QGIS para averiguar cmo
cambiarlo. A continuacin, haga zoom a un famoso grupo de lagos de Canad.
Crear una tabla espacial de forma fcil
La mayor parte de las herramientas de escritorio de OSgeo tienen funciones para
importar datos espaciales desde archivos, como por ejemplo shapefiles, dentro de
bases de datos PostGIS. Tambin usaremos QGIS para mostrar cmo se hace.
Se pueden importar shapefiles a QGIS a travs de un prctico plugin PostGIS Manager.
Para instalarlo, vaya al men Complementos, seleccione Administrar complementos y
seleccione el PostGIS Manager. Marque esa opcin y pulse OK. En el men
Complementos debera tener un acceso al PostGIS Manager que le da la opccin de
iniciar el gestor.
Entonces el gestor usar las preferencias que usted ha definido previamente para
conectar a la base de datos Natural Earth. Si le pide la contrasea djela en blanco. Ver
la ventana principal del gestor.

Puede usar las otras pestaas del panel de la derecha para comprovar los atributos de
la capa e incluso puede obtener un mapa bsico con capacidad de zoom y panormica.
En este caso hemos seleccionado la capa de lugares poblados y hemos hecho zoom a
una pequea isla que concemos:

Ahora use el PostGIS manager para importar un shapefile dentro de la base de datos.
Usar los datos del sndrome de muerte sbita infantil (SIDS, por sus siglas en ingls)
de Carolina del Norte que estn incluidos en uno de los complementos del paquete de
estadsticas de R.
Dentro del men Datos elija la opcin Cargar datos desde shapefile. Pinche el
botn ... y busque el shapefile sids.shp en el paquete maptools de R:

No cambie nada ms y pulse Cargar.

El shapefile se debera importar a PostGIS sin errores. Cierre el PostGIS Manager y
vuelva a la ventana principal de QGIS.
A continuacin cargue los datos de SIDS en el mapa usando la opcin Aadir capa
PostGIS. Cambiando de orden algunas capas y coloreando un poco debera ser capaz
de obtener un mapa de coropletas del recuento de sndromes de muerte sbita infantil
en Carolina del Norte:

Conozca pgAdmin III
Puede usar el cliente grfico de bases de datos pgAdmin III para consultar y modificar
sus bases de datos no espaciales. Este es el cliente oficial de PostgreSQL, y permite que
use el lenguaje SQL para manipular sus tablas de datos.

Intntelo
A continuacin se presentan algunos desafos adicionales para que los intente llevar a
cabo:
#. Pruebe ms funciones espaciales
como st_buffer(the_geom), st_transform(the_geom,25831), x(the_geom) . Puede
consultar documentacin completa en http://postgis.org/documentation/
1. Exporte sus tablas a shapefiles con pgsql2shp desde la lnea de comandos.
2. Intente usar ogr2ogr desde lnea de comandos para importar/exportar datos a su base
de datos.
Lo prximo
ste es solamente el primer paso en el proceso de usar PostGIS. Hay muchas ms
funcionalidades que puede probar.
Pgina Web del Proyecto PostGIS

También podría gustarte