El curso está dirigido a profesionales, investigadores y alumnos de cualquier ámbito interesados en las bases de datos espaciales y los Sistemas de Información Geográfica, en particular en el software PostGIS y la normativa del OGC respecto a la definición de las geometrías geográficas, sus relaciones espaciales y también su implementación con SQL. No solo con el objetivo de almacenar datos cartográficos sino también con la gestión y análisis espacial de los mismos.
El gran protagonista del curso es la base de datos espacial PostGIS (desarrollada por Refractions Research, Inc.) como proyecto de software libre. Las bases de datos espaciales almacenan y gestionan cartografía de una forma más óptima que los modelos de ficheros (e.g. shape) otorgando una mayor organización y capacidad para definir comportamientos en nuestro modelo de datos. Como cualquier base de datos espacial relacional el lenguaje de comunicación es el SQL (en este caso extendido con los predicados y operadores espaciales definidos por el Open Geospatial Consortium (OGC) y que se estudiarán en este curso) y por tanto es necesario hacer una introducción amplia a este lenguaje antes de profundizar en PostGIS. El curso se divide en dos grandes bloques; uno primero más breve que aborda SQL para a continuación entrar con detalle en PostGIS y sus funcionalidades principales. El curso se complementa con una documentación interesante (libro + DVD) ya que en estos momentos no existe ninguna otra publicación especifica de PostGIS. Aunque el curso es una iniciación a PostGIS se abordan también temas más avanzados como el análisis espacial y su problemática al trabajar con colecciones de entidades o de tipo 'multi' así como algunas rutinas en PL/pSQL (lenguaje procedural SQL de PostgreSQL) que pueden hacer interesante el curso también a personal con un perfil un poco más avanzado desarrollando algunas rutinas como disparadores, reglas de topología, etc. También se estudia cómo definir las geometrías y sus relaciones espaciales desde un punto riguroso según el OGC, tema importante no solo para manejar PostGIS sino para conocer el funcionamiento correcto de cualquier SIG (especialmente basados en normativas OGC). Para más información ver el índice del temario detallado.
1. INTRODUCCIÓN. (1 hora)
Por qué es muy aconsejable conocer cómo trabajar con un SGBD y el lenguaje de consulta (SQL) antes de trabajar con un SIG. Bases de datos espaciales. Descripción del software utilizado en el curso (PostgreSQL, pgAdmin III, PostGIS, JTSTestBuilder, QGIS, uDIG, gvSIG,...)
2. INICIACIÓN AL LENGUAJE DE CONSULTA ESTRUCTURADO (SQL). (4-5 horas)
2.1 Introducción
Introducción a SQL. Instalación del servidor de base de datos PostgreSQL 8.x. Tipos básicos de datos. Cliente psql. Creación de una nueva base de datos. Introducción y utilización de pgAdmin III (frontend gráfico de PostgreSQL).
2.2 Lenguaje de definición de datos.
Tablas y dominios: Definición, creación, modificación y borrado de tablas y dominios. Restricciones: Definición de una restricción. Restricción de valor no nulo. Restricción de unicidad. Restricción de clave primaria. Restricción general. Restricción de clave ajena o Integridad referencial.
2.3 Ejercicios: A partir de un diagrama ER se crearán todos los objetos necesarios en la base de datos.
2.4 Lenguaje de manipulación de datos.
Inserción, actualización y borrado de registros en una tabla. Importación/exportación a ficheros de texto.
Consultas elementales sobre una tabla. Predicados de comparación. Funciones SQL. Funciones agregadas. Consultadas sobre varias tablas. Consultas avanzadas. Subconsultas.
2.5 Otras funcionalidades SQL importantes para trabajar con PostGIS.
Inserción de registros en una tabla existente. Vistas. Índices. Índices espaciales. Creación de disparadores.
2.6 Creación de un nuevo cluster de la base de datos. Importación/exportación de la base de datos con pg_dump.
2.7 Ejercicios: Múltiples ejemplos prácticos y propuestos de cada punto de la teoría explicada.
3. EXTENSIÓN ESPACIAL DE POSTGRESQL: POSTGIS (18/19 horas)
3.1 Introducción. Normativa relacionada según el Open Geospatial Consortium, Inc. (OGC): Simple Feature access - Part 2: SQL option. Qué es PostGIS. Instalación de PostGIS. SQL/MM (ISO 13249-3). Diferencias entre las normas y su posible convergencia.
3.2 Creación de una base de datos espacial. Tabla de sistemas de referencia (SRID). Códigos EPSG de los sistemas de referencia. Creación de una tabla espacial. Tabla de columnas de geometría.
3.3 Tipos de geometría. Representación WKT (Well-Known Text) de las entidades espaciales. Creación de objetos espaciales. Representación y WKB (Well-Known Binary). EWKT, EWKB (representación espacial extendida).
3.4. Validación de las geometrías. Importación cartografía en formato shape. Importación de la cartografía de los ejemplos a PostGIS.
3.5. Visualización de la cartografía cargada en PostGIS con diferente software: QGIS, uDIG, gvSIG. Importancia de la creación de índices espaciales.
3.6 Geometrías SFS (conceptos de geometría sencilla, cerrada, múltiple, etc). Relaciones espaciales entre geometrías. Definición y dimensión del interior, contorno y exterior. Reglas para considerar una geometría válida. Utilización del software JTS Test Builder para testear la definición válida de las geometrías según normativa OGC. Ejemplos
3.7 Matriz DE-9IM y predicados espaciales. Definición de los 9 términos de la matriz de intersección entre dos geometrías. Definición de los predicados espaciales según normativa OGC. Ejemplos con PostGIS utilizando los predicados espaciales.
3.8 Creación de tablas y vistas para almacenar resultados espaciales. Problemática de las vistas espaciales. Solución y forma correcta de almacenar los resultados de una consulta espacial.
3.9 Operadores espaciales. Definición según el OGC. Tipos devueltos en función de las geometrías de entrada (SQL/MM). Comprobación con JTS Test Buidler. Utilización de los operadores espaciales junto con los predicados espaciales adecuados según los tipos de geometrías de entrada. Patrón de intersección según matriz DE-9IM. Múltiples ejemplos prácticos con los operadores intersection, buffer, union, difference.
3.10 Indexación espacial. Creación de índices espaciales. Aplicación a los análisis espaciales. Ejemplo práctico y comparación de utilización de índices espaciales. Reordenación de las geometrías para optimizar la visualización. Mejorando la indexación espacial añadiendo cajas a las geometrías.
3.11 Como arreglar geometrías no válidas (principalmente polígonos) según el OGC mediante el operador buffer y también descomponiendo y recreando la geometría de nuevo.
3.12 Descomposición de capas con entidades múltiples a capas de entidades simples. Paso de elementos 2D a 3D y viceversa. Eliminación de entidades repetidas en una capa.
3.13 Otros ejemplos de consultas espaciales: otros ejemplos SQL sobre cálculo de áreas y longitudes, número de vértices, sistemas de referencia espacial, etc.
3.14 Utilización de rutinas PL/pgSQL para filtrar la dimensión de las entidades resultantes de una operación de análisis espacial y almacenamiento en una capa de tipo de geometría correcta.
3.15 Creación de rutinas utilizando disparadores SQL (triggers). Ejemplo para mantener áreas y perímetros de las geometrías. Creación de una tabla de eventos utilizando disparadores.
3.16 Diseño e implementación de algunas reglas de topología en SQL como entidades que no se superpongan (de la misma capa o diferente), ausencia de huecos o gaps entre polígonos, nodos con intersección de menos de tres arcos, etc.
3.17 Conexión a UMN Mapserver. Se da un ejemplo de UMN Mapserver con PostGIS. Cómo realizar consultas o análisis espacial a través de UMN Mapserver.
3.18 Ejercicio de análisis espacial con PostGIS. Combinando todo lo aprendido se propone un ejercicio completo de análisis espacial utilizando PostGIS y sentencias SQL. En la documentación aportada se ofrecen todos los códigos de todos los ejemplos realizados en el curso incluido éste análisis completo.
3.19 Problemática y solución de los índices espaciales con las tablas TOAST en PostGIS.
3.20 Se proponen algunas rutinas en el lenguaje PL/pgSQL con una introducción rápida al lenguaje para que el usuario pueda aumentar la funcionalidad de PostGIS de una forma sencilla.