Vous êtes sur la page 1sur 48

PostGIS

Taller de Sistemas de Informacin Geogrfica en Sistemas Abiertos

Conectarse a PostGIS
Conectarse a la instancia
Crear una nueva conexin al equipo XXX Usario postgres, Contrasea xxxxxxxxx

Crear una nueva base de datos


Seleccionar template_postgis como plantilla

Conectarse a la base de datos Comprobar la existencia de la tablas espaciales del sistema


spatial_ref_sys geometry_columns

2.3 Spatially Enable PostgreSQL

2.3.1 Sin template_postgis


Ejecutar PG Admin III

Una vez instalado PostgreSQL aparecer una entrada en el men Inicio. Ir al men PostgreSQL y ejecutar PgAdmin III. Hacer doble clic en la opcin PostgreSQL Database Server . Se solicitar la contrasea del administrador. Navegar hasta la seccin Databases del rbol de bases de datos y elegir Edit New Object New Database. Aadir una nueva base de datos postgis, con postgres como propietario, template1 como plantilla y pg_default como tablespace Abre la nueva base de datos postgis y acceder a Languages. Comprobar que PL/PgSQL ya estinstalado. Este lenguaje es necesario para PostGIS. Abrir la ventana SQL pulsando el botn SQL Elegir File Open y navegar a C:\Program Files\PostgreSQL\8.2\contrib\share\lwpostgis.sql Presionar el botn Run (tringulo verde.) El fichero se ejecutar, cargando las funciones y objetos dentro de la base de datos postgis Elegir File Open y navegar a C:\Program Files\PostgreSQL\8.2\contrib\share\spatial_ref_sys.sql Ejecutar de nuevo el botn Run. El fichero spatial_ref_sys.sql se ejecutar, cargando elsistema de referencia de coordenadas EPSG en la tabla de referencias espaciales de PostGIS.

SQL espacial sencillo


Crear las siguientes geometras manualmente
create table puntos (pt geometry, name varchar); insert into puntos values ('POINT(0 0)', 'Origin'); insert into puntos values ('POINT(5 0)', 'X Axis'); insert into puntos values ('POINT(0 5)', 'Y Axis'); select name, ST_AsText(pt), ST_Distance(pt, 'POINT(5 5)') from puntos;

En este ejemplo se utilizan dos funciones espaciales: Distance() y AsText(). Ambas funciones utilizan geometra como argumento. La funcin Distance() la distancia cartesiana entre dos objetos. La funcin AsText() convierte a texto el resultado, en formato WKT (Well-Known Text).

SQL espacial sencillo

OGC Tablas de Metadatos


GEOMETRY_COLUMNS
F_TABLE_CATALOG = F_TABLE_SCHEMA = public F_TABLE_NAME = prueba F_GEOMETRY_COLUMN = the_geom COORD_DIMENSION = 2 SRID = 23030 TYPE = MULTILINESTRING

Cuando a una base de datos se le han asignado capacidades espaciales en PostGIS, 2 tablas de metadatos se crean, tal y como indica la especificacin Simple Features for SQL del Open Geospatial Consortium: -SPATIAL_REF_SYS -GEOMETRY_COLUMNS La tabla GEOMETRY_COLUMNS indica las tablas espaciales que existen en la base de datos. No se actualiza de forma automtica. Por ejemplo, al ejecutar el comando CREATE TABLE incluyendo un campo de tipo GEOMETRY, no aade una entrada a esta tabla. La funcin AddGeometryColumn(), por ejemplo, s lo hace: aade en un comando un campo de tipo GEOMETRY a la tabla, e incluye un registro en la tabla GEOMETRY_COLUMNS. La tabla SPATIAL_REF_SYS almacena todos los sistemas de referencia espacial, planos y proyectados. Cada geometra en la base de datos, tiene un SRID asociado. Esta tabla utiliza los identificadores SRID del EPSG

OGC Tablas de Metadatos


Tabla "GEOMETRY_COLUMNS
Guarda un ndice de tablas que contienen algn campo con geometra

Nombre completo de la tabla que contiene la geometra. Nombre del campo que contiene la geometra en la tabla en cuestin

Dimensin espacial (2, 3, 4) de la columna de la geometra.

Tipo del objeto espacial (Punto,


Poligonal)

ID del Sist. Ref. Espacial usada por la geometra en dicha tabla.

Catalog es un trmino proveniente de Oracle. (Catalog se deja en blanco porque no existe equivalente en postgreSQL) SRID: El ID del Sist. Ref. Espacial usada por la geometra en dicha tabla. Es una clave ajena a SPATIAL_REF_SYS.

OGC Tablas de Metadatos


SPATIAL_REF_SYS
SRID = 23030 AUTH_NAME = EPSG AUTH_SRID = 23030 SRTEXT = PROJCS["ED50 / UTM zone 30N PROJ4TEXT = +proj=aea

OGC Tablas de Metadatos


Tabla SPATIAL_REF_SYS
Contiene los identificadores numricos y descripciones textuales de los Sist. de Referencia.

N entero que identifica unvocamente a ese Sist. Ref. espacial en la Base de Datos Nombre del estndar para este Sist. Ref.

ID del Sist. Ref. tal y como lo define el estndar que aparece en auth_name

La representacin WellKnown Text del Sist. Ref. Espacial

auth_srid: Para EPSG, es el cdigo de proyeccin. Proj4text: la representacin en formato WKT (Well-Known Text) del Sistema de Referencia Espacial.

Cargar ficheros SHAPE


Fichero SHAPE (Compuesto por 3 ficheros)
.SHP = geometra .DBF = atributos .SHX = ndice

Tabla PostGIS/PostgreSQL
Las columnas pueden ser geometra Las columnas pueden ser atributos

Un fichero SHAPE = Una tabla PostGIS

Cargar ficheros SHAPE


shp2pgsql [opts] shapefile tablename
shp2pgsql i s 23030 ccaa.shp ccaa > ccaa.sql

Lee el fichero .shp Crea fichero .sql Cargar fichero .sql en PostgreSQL
Utilizando psql Utilizando PgAdmin

Cargar ficheros SHAPE shp2pgsql

Cargar ficheros SHAPE

Ejecutar cmd.exe

Cargaremos los datos cartogrficos (D:\Vivienda\Curso_PostGIS) en la BD. Se trata de ficheros SHAPE, y tenemos que convertirlos a un formato que entienda PostgreSQL. Para ello utilizamos el comando shp2pgsql, para posteriormente cargarlo en la base de datos con el comando psql Ejecutamos el fichero pg_shpsql.bat en primer lugar, que aade los comandos de PostgreSQL a la variable PATH, y as poder ejecutar shp2pgsql desde cualquier directorio. Despus conierte los ficheros SHAPE a formato SQL. Nuestros datos se enecuentran en coordenadas proyectadas (UTM 30N, ED50), la proyeccin se almacena en la tabla SPATIAL_REF_SYS con un SRID 23030. Cuando creamos el formato cargable, especificamos el SRID en la lnea de comandos, de modo los datos se referencian a este sistema de coordenadas. Esto lo necesitaremos ms tarde, al hacer una prctica de proyeccin. Crearemos el formato cargable en un fichero, y a continuacin lo cargaremos en PostgreSQL mediante psql, utilizando el comando sql2pg.bat. Ejecutar pg_shpsql.bat Ejecutar sql2pg.bat

Cargar ficheros SHAPE

Crear la base de datos geogrfica: bdgis

Creacin de la base de datos usando bdgis.sql

Analizando la tabla creada

Creando otra instancia de la tabla

Analizando los datos de tabla2

Instalando Quantum GIS

Instalando Quantum-GIS

Agregando una nueva capa vectorial a QGIS

Visualizando datos

Sistema de coordenadas en SVG

Anlisis Espacial

ST_Intersects(A, B)

Anlisis Espacial ST_Contains(A, B) ST_Within(B, A)

Anlisis Espacial

ST_Touches(A, B)

Anlisis Espacial

ST_Crosses(A, B)

Anlisis Espacial

ST_DWithin(A, B, D)
D

Anlisis Espacial
Cul es la longitud total en kilmetros de carreteras? SELECT Sum( ST_Length( the_geom ) ) / 1000 AS vias_km FROM vias;

Anlisis Espacial
Qu superficie, en hectreas, tiene la poblacin de Bosques? SELECT ST_Area(the_geom)/10000 AS hectares FROM prov WHERE nombre = Bosques;

Anlisis Espacial
Cul es el municipio de mayor superficie? SELECT nombre, ST_Area(the_geom)/10000 AS hectareas FROM muni ORDER BY hectareas DESC LIMIT 1;

Anlisis Espacial
Cul es el permetro del municipio de Neza? SELECT ST_Perimeter(the_geom) FROM muni WHERE nombre = Neza;

Anlisis Espacial
Cul es el rea total de todos los municipios de madrid, en hectreas SELECT Sum(ST_Area(the_geom))/10000 AS hectares FROM muni;

Anlisis Espacial
Cul es el rea total (en hectreas) de todos los municipios con ms de 1.000.000 habitantes? SELECT sum(ST_Area(the_geom))/10000 as hectares FROM prov WHERE pob2005 > 1000000;

Anlisis Espacial
Cul es la longitud total de la carretera A3? SELECT Sum(ST_Length(the_geom))/1000 AS kilometers FROM vias WHERE texto = A-3 OR texto = N-III;

Anlisis Espacial
Qu poblacin tienen los municipios que se encuentran a 5 km de una coordenada? SELECT nombre, sum(censo_2001) as muni_cerca FROM muni where ST_DWithin(the_geom, ST_GeomFromText('POINT(500000 4300000)', 23030), 5000) GROUP BY nombre;

Anlisis Espacial
Qu municipios estn situados a menos de 2 km de una mina? SELECT nombre FROM muni m, urbano u WHERE ((u.texto ilike 'Mina%') AND (ST_DWithin(m.the_geom,u.the_geom,2000))) GROUP BY nombre;

Anlisis Espacial
Ncleos urbanos que est a menos de 250 metros de las autovas SELECT h.texto FROM urbano h, autop p WHERE ST_DWithin(h.the_geom, p.the_geom, 250);

Anlisis Espacial
MUNICIPIOS CRUZADOS POR LA A-3 SELECT nombre FROM muni m, autop u WHERE ((u.nom_via ilike 'A-3%' OR u.nom_via ilike 'N-III%') AND (ST_DWithin(m.the_geom,u.the_geom,2000))) GROUP BY nombre;

Anlisis Espacial
NCLEOS URBANOS A MENOS DE 2000 METROS DE LA A-3
Sin orden optimizado

SELECT texto FROM urbano m, autop u WHERE u.nom_via ilike 'A-3%' OR u.nom_via ilike 'N-III%' and ST_DWithin(m.the_geom,u.the_geom,2000) group by texto;

Anlisis Espacial
NCLEOS URBANOS A MENOS DE 2000 METROS DE LA A-3
Con orden optimizado

SELECT texto FROM urbano m, autop u WHERE((u.nom_via ilike 'A-3%' OR u.nom_via ilike 'N-III %') AND (ST_DWithin(m.the_geom,u.the_geom,2000))) GROUP BY texto;

Solapes
Las interseciones de capa a capa son posibles con la funcin ST_Intersection()
ST_Intersects(a,b) devuelve BOOLEAN ST_Intersection(a,b) devuelve GEOMETRY

ST_Intersects() = TRUE ST_Intersection() =

CREATE TABLE muni_hgo AS 4.4 - Overlays SELECT ST_Intersection(v.the_geom, m.the_geom) AS intersection_geom, ST_Area(v.the_geom) AS va_area, v.*, m.nombre FROM muni v, prov m WHERE ST_Intersects(v.the_geom, m.the_geom) AND m.nombre = Hidalgo;

CREATE TABLE muni_hgo2 AS 4.4 - Overlays SELECT ST_Intersection(v.the_geom, m.the_geom) AS intersection_geom, ST_Area(v.the_geom) AS va_area, v.*, m.nombre FROM muni v, prov m WHERE ST_Within(v.the_geom, m.the_geom) AND m.nombre = Progreso;

CREATE TABLE muni_hgo3 AS 4.4 - Overlays SELECT ST_Intersection(v.the_geom, m.the_geom) AS intersection_geom, ST_Area(v.the_geom) AS va_area, v.*, m.nombre FROM muni v, prov m WHERE ST_Intersects (ST_Centroid(v.the_geom), m.the_geom) AND m.nombre = DF;

Vous aimerez peut-être aussi