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
1 La Base de Datos Se Puede Considerar Como Una Unificacion de Varios Archivos de Datos Independientes Cuyo Propósito Básico Es Evitar La Duplicación de Los Datos