Servidor de PostGIS

download Servidor de PostGIS

If you can't read please download the document

Transcript of Servidor de PostGIS

Servicio de PostGISEs un sistema de cdigo abierta (open source) de Sistema de Informacin Geogrfico (geographic information system), que proporciona soporte para el manejo de datos geogrficos en la base de datos relacional de PostgreSQL. PostGIS implementa las caractersticas esenciales (simple features) para la especificacin SQL del Open Geospatial Consortium. PostGIS habilita a PostgreSQL para el manejo de datos espaciales, permitindole se usado como un respaldo de base de datos espacial para los Sistemas de Informacin Geogrfica (GIS por sus siglas en ingls), casi como la extensin Espacial de Oracle. PostGIS implementa las siguientes caractersticas: Tipos de datos geomtricos para points, linestrings, polygons, multipoints, multilinestrings, multipolygons y geometrycollections. Predicados espaciales para determinar las interacciones de geometras utilizando matriz 3x3 Egenhofer. Operadores espaciales para determinar las medidas geoespaciales como el rea, distancia, longitud y permetro. Operadores espaciales para determinar el conjunto de operaciones geoespaciales, como la unin, diferencia, diferencia simtrica y buffer. ndices espaciales de rboles R para rpidas consultas espaciales. Soporte para ndices selectivos, para proporcionar alto desempeo en la planeacin de consultas para consultas mezcladas espaciales/no espaciales.

La implementacin esta basada en geometras e ndices ligeros optimizados para reducir el uso de disco y memoria. Utilizando geometras ligeras ayuda al servidor a incrementar la cantidad de datos migrados desde el almacenamiento fsico en el disco hacia la RAM, mejorando el desempeo de las consultas sustancialmente. La primera versin fue lanzada en 2001 por Refractions Research bajo la Licencia Publica General GNU y el desarrollo ha continuado desde entonces activamente. En 2006 PostGIS fue certificado como compatible con Simple Features para bases de datos SQL por el Open Geospatial Consortium.

2. Instalacin2.1 RequerimientosInstalacin completa de PostgreSQL (incluyendo cabeceras del servidor). PostgreSQL esta disponible en http://www.postgreslq.org, Se requiere la versin 7.2 o superior. Compilador GNU de C (gcc). Se pueden utilizar otros compiladores ANSI C pero se han encontrado menos problemas compilando con gcc. La herramienta GNU Make (gmake o make). Para muchos sistemas, GNU make ya viene incluida por defecto. Para verificar la versin de make, ejecute make v. Se recomienda la librera Proj4 reprojection, es utilizada para proporcionar soporte para el repronstico de coordenadas en PostGIS. Esta disponible para su descarga en http://www.remotesensing.org/proj. Se recomienda la librera geomtrica GEOS, utilizada para proporcionar pruebas geomtricas (Touches(), Contains(), Intersects()) y operaciones (Buffer(), GeomUnion(), Difference()) con PostGIS. Esta disponible para su descarga en http://geos.refractions.net.

2.2 PostGISPostGIS puede ser construido en PostgreSQL 7.2 o superior. Versiones anteriores de PostgreSQL no estn soportadas. 1. Antes de poder compilar los mdulos de servidor PostGIS, se debe de compilar e instalar el paquete de PostgreSQL. 2. Obtener el archivo con el cdigo fuente de PostGIS de http://postgis.refractions.net/download/postgis-1.1.6.tar.gz. Desempaquetar el archivo.$ tar zxvf postgis-1.1.6.tar.gz

3. Entrar en el directorio de postgis-1.1.6 y ejecutar lo siguiente:$ ./configure

Si se desea el soporte para repronostico de coordenadas, se debe tener la librera Proj4 instalada. Si el programa no encuentra nada, intentar usar el parmetro --with-proj=PATH cambiando al directorio especifico de instalacin.

Si se desea el soporte para utilizar la funcionalidad de GEOS, se debe de tener la librera GEOS instalada. Si el programa no

encuentra nada, intentar usar el parmetro with-geos=PATH para especificar la ruta completa al programa de configuracin geos. 4. Ejecutar la compilacin e instalacin, con usuario privilegiado:# make # make install

Todos los archivos son instalados utilizando la informacin proporcionada por el pg_config. Las libreras son instaladas en [pkglibdir]/lib/contrib Archivos importantes de soporte como el lwpostgis.sql son instalados en [prefix]/share/contrib. Los binarios de loader y dumper estn instalados en [bindir]/.

5. PostGIS requiere como extensin el lenguaje de procedimientos PL/pgSQL. Antes de cargar el archivo lwpostgis.sql, se debe primero habilitar el PL/pgSQL. Se debe de utilizar el comando createlang.$ createdb [basededatos] $ createlang plpgsql [basededatos]

6. Ahora se deben de cargar los objetos y la definicin de funciones dentro de la base de datos mediante la carga del archivo lwpostgis.sql.$ psql -d [basededatos] -f lwpostgis.sql

En este punto las extensiones para el servidor de PostgreSQL estn cargadas y listas para utilizarse. 7. Para un conjunto completo de identificadores definidos del sistema de coordenadas EPSG, se puede adicionalmente cargar el archivo

spatial_ref_sys.sql para rellenar la tabla SPATIAL_REF_SYS.# psql -d [basededatos] -f spatial_ref_sys.sql Nota: Los archivos lwpostgis.sql y spatial_ref_sys.sql se encuentran ubicandos en la ruta /usr/share/pgsql/postgresql/contrib a menos que se haya cambiado el prefix en la instalacin.

2.3 JDBCLas extensiones JDBC proporcionan objetos Java correspondientes a los tipos internos de PostGIS. Estos objetos pueden ser usado para escribir clientes Java los cuales requieren consultar las base de datos PostGIS y dibujar o hacer clculos en el GIS. 1. Entrar en el subdirectorio jdbc de la distribucin PostGIS. 2. Editar el Makefile para proporcionar las rutas correctas al compilador de java (JAVAC) y el intrprete (JAVA). 3. Ejecutar el comando make. Copiar el archivo postgis.jar a cualquier lugar donde se coloquen las libreras de java.

3. Generacin de ndicesLos ndices son utilizados en una base de datos espacial, para hacer posible el manejo de grandes conjuntos de datos. Sin el manejo de ndices, cualquier bsqueda requerir de un escaneo secuencial de cada registro en la base de datos. Utilizando ndices se aumenta la velocidad de bsqueda organizando los datos en una bsqueda en rbol el cual puede ser rpidamente atravesado para encontrar un registro en particular. PostgreSQL soporta tres tipos de ndices por defecto: ndice en rboles B, ndices en rboles R e ndices GiST.

Los rboles B son utilizados cuando pueden almacenar los datos en un solo eje; por ejemplo, nmeros, letras, fechas. Los datos GIS no pueden ser racionales, ordenados a lo largo de un eje (cul es mayor, (0,0) o (0,1) o (1,0)?) por lo tanto el ndice en rboles B no es til para el manejo adecuado. Los rboles R rompen los datos en rectngulos y sub-rectngulos y en subsub rectngulos, etc. Los ndices en rboles R son utilizados por algunas bases de datos espaciales para indexar los datos GIS, pero la implementacin de PostgreSQL no es tan robusta como la implementacin GiST. Los ndices GiST (Generalized Search Trees) rompen los datos en cosas de un lado, cosas que se sobreponen, cosas que estn adentro y pueden ser utilizados en un gran rango de tipos de datos, incluyendo datos GIS. PostGIS utiliza un ndice de rboles R implementado sobre un ndice GiST para indexar los datos GIS.

3.1 ndices GiSTGiST son las siglas en ingles de Generalized Search Tree y es una forma genrica de indexar. Es utilizado para aumentar la velocidad de bsqueda en todos los tipos de estructura de datos irregulares (arreglos enteros, datos espaciales, etc) que no son posibles de ordenar con un ndice de rbol B. Una vez que una tabla de datos GIS excede algunos cientos de registros, sera posible pensar en mejorar las bsquedas de datos espaciales creando un ndice.

La sintaxis para construir un ndice GiST en una columna de geometra es:CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] GIST_GEOMETRY_OPS );

Construir un ndice espacial es un ejercicio computacional intenso: en tablas con cerca de un millon de registros, en un equipo Solaris a 300MHz, se ha obtenido que al contruir un ndice GiST toma aproximadamente una hora. Despes de construir un ndice, es importante forzar a PostgreSQL a que recalcule la tabla de estadisticas interna, que es utilizada para optimizar el planeador de consultas:VACUUM ANALYZE [table_name] [column_name]; -This is only needed for PostgreSQL 7.4 installations and below SELECT UPDATE_GEOMETRY_STATS([table_name], [column_name]);

Los ndices GiST tienen dos ventajas sobre los ndices de rboles R en PostgreSQL. Primero los ndices GiST pueden ser utilizados como null safe, significa que pueden indexar columnas que incluyen valores nulos. Segundo, los ndices GiST soportan el concepto de lossiness el cual es muy importante cuando se manejan grandes objetos GIS que el tamao de pgina de PostgreSQL. Lossiness permite a PostgreSQL almacenar solo la parte importante de un objeto en el ndice en el caso de los objetos GIS, solo la caja envolvente.

3.2 Utilizacin de ndicesOrdinariamente, los ndices aumentan la velocidad de acceso de forma transparente: una vez que el ndice es construido, el planeador de consultas transparentemente decide cuando utilizar la informacin del ndice para agilizar el plan de consulta. Desafortunadamente, el planeador de consultas de PostgreSQL no optimiza el uso de ndices GiST tan bien, entonces algunas ocasiones las bsquedas que deben de utilizar el ndice espacial realizan una bsqueda secuencial en toda la tabla. Si parece que los ndices espaciales no estn siendo utilizados, hay algunas cosas que se pueden realizar:

Asegurarse que las estadsticas estn siendo acumuladas con el nmero y distribucin de valores en una tabla, para poder proporcionar al planeador de consultas mejor informacin para hacer decisiones sobre el uso de ndices. Para PostgreSQL 8.0 ejecutando VACUUM ANALYZE realizar el calculo de la distribucin y numero de valores. Se debe regularmente ejecutar e vacuum en todas las bases de datos de cualquier forma -Algunos administradores de bases de datos tienen ejecutando el VACUUM como un trabajo de cron fuera del horario de trabajo.

Si realizar el vacuum no funciona, se puede forzar al planeador a utilizar la informacin del ndice utilizando SET ENABLE_SEQSCAN=OFF. Solo se debe utilizar este comando a discrecin y solo en consultas espaciales indexadas: hablando generalmente, el planeador sabe mejor cuando utilizar un ndice normal de rbol B. Una vez que se ha ejecutado la consulta, debe considerarse regresar el valor de ENABLE_SEQSCAN, de esta forma las consultas utilizarn el planeador de forma normal.

Si se encuentra que el planeador se equivoca acerca del costo de bsquedas secuenciales contra indexadas, se debe intentar reducir el valor para random_page_cost en el archivo postgresql.conf o usando SET random_page_cost=#. Por defecto el valor del parmetro es 4, tratar de ponerlo en 1 o 2. Decrementando el valor hace que el planeador se incline ms a utilizar las bsquedas indexadas.

3.3 Buscando ventajas de los ndicesUtilizar PostGIS efectivamente requiere conocer que funciones espaciales estn disponibles y asegurar que los ndices apropiados estn colocados para proporcionar un buen desempeo. Cuando construimos una consulta es importante recordar que solo las operaciones basadas en la caja envolvente como son && pueden tomar ventaja de los ndices espaciales GiST. Funciones como distance() no pueden usar el ndice para optimizar sus operaciones. Por ejemplo la siguiente consulta puede ser algo lenta en una tabla muy grande:SELECT the_geom FROM geom_table WHERE distance( the_geom, GeomFromText( 'POINT(100000 200000)', -1 ) ) < 100

Esta consulta esta seleccionado todas las geometras en la tabla geom la cual esta a 100 unidades del punto (100000, 200,000). Esta sera lenta debido a que se esta calculando la distancia de cada punto en la tabla con el especificado, es decir un calculo de distancia por cada registro en la tabla. Se puede evitar esto utilizando el operador && para reducir el numero de calculo de distancias requeridos:SELECT the_geom FROM geom_table WHERE the_geom && 'BOX3D(90900 190900, 100100 200100)'::box3d AND distance(the_geom, GeomFromText('POINT(100000 200000)', -1) ) < 100

La consulta selecciona las misma geometras, pero esto lo hace en una forma ms eficiente. Asumiendo que existe un ndice GiST en la tabla geom, el planeador de consultas reconocer que usando el ndice reducir el numero de registros antes de calcular el resultado de la funcin de distancia. Observar que la geometra BOX3D que es utilizada en la operacin && es un rectngulo unitario de 200 unidades centrado en el punto original - este es una "caja de consulta". El operador && utiliza el ndice para rpidamente reducir el conjunto de resultados a solo aquellas geometras que tienen cajas envolventes que traslapen la "caja de consulta". Asumiendo que la caja de consulta es mucho menor en gran medida que las geometras de la tabla, se reducir el nmero de distancias calculadas necesarias para realizarlo drsticamente.

4. Configuracin del servidor para SIBA4.1 Instalacin en Centos 5.1 (Fedora Core)Intslacin de: PostgreSQL (postgresql-8.1.11-1.el5_1.1) PostGIS ( LIB Proj4 (proj.x86_64, 4.5.0-1.el5.rf) LIB Geos (geos.x86_64, 3.0.0-1.el5.rf)

4.2 Instalacin en Red Hat Linux (Fedora Core)Instalacin de: PostgreSQL (postgresql.i386, 8.1.6-1.fc6), PostGIS (postgis.i386, 1.2.0-4.fc6), LIB Proj4 (proj.i386, 4.5.0-1.fc6), LIB Geos (geos.i386, 2.2.3-1.fc6)

4.3 Instalacin mediante YUMEl gestor de paquetes buscara las dependencias necesarias para la instalacin completa.$ yum install geos $ yum install proj $ yum install postgresql postgresql-server \ postgresql-contrib postgresql-docs postgresql-libs $ yum install postgis Nota: En Centos es necesario agregar en el repositorio RPMForge.net, ya que la distribucin no proporciona estos paquete (rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm).

4.4 Configuracin del sistemaCambiando el directorio donde se almacenan las bases de datos, con el propsito de utilizar un espacio mayor en el almacenamiento secundario y tener seguridad de los datos mediante el uso de RAID 5 en los discos. 1. Modificar el archivo /etc/passwd y cambiar el home del usuario postgres al directorio en la particin de la unidad de almacenamiento secundaria.postgres:x:UID:GID::/media/sdata/pgsql:/bin/bash

2. Copiar los archivo originales instalados por el paquete postgresql.cp -prf /var/lib/pgsql /media/sdata/

3. Modificar el script de inicializacin de postgres en /etc/init.d/postgresql, localizar la variable PGDATA y PG_LOG, hacer los ajustes necesarios.PGDATA=/var/lib/pgsql ->PGDATA=/media/sdata/pgsql PGLOG=/var/lib/pgsql/pgstartup.log ->PGLOG=$PGDATA/pgstartup.log #Modificado para usar el arreglo RAID 5 # en almacenamiento secundario. PGDATA=/media/sdata/pgsql PGLOG=$PGDATA/pgstartup.log if [ -f "$PGDATA/PG_VERSION" ]&&[ -d "$PGDATA/base/template1" ] then echo "Using old-style directory structure" else PGDATA=$PGDATA/data fi

4. Modificar el archivo pg_hba.conf en el directorio data para garantizar el acceso de los usuario y aplicaciones. Permite el acceso desde diferentes redes mediante contrasea en MD5, para conexiones locales se requiere que exista el usuario en el sistema.vi data/pg_hba.conf host host host all all all all all all 127.0.0.1/32 192.168.0.0/16 132.248.0.0/16 ident sameuser md5 md5

5. Para garantizar el acceso desde otros equipos, se debe de iniciar el servicio de postgres en modo de escucha de peticiones en la interfaz correspondiente, en este caso interesan las peticiones que se hagan en

localhost y en la direccin ip, para seleccionar cualquier interfaz basta con usar un *.vi data/postgresql.conf listen_addresses = '*' port = 5432

6. Garantizar las polticas de acceso de seguridad de firewall interno, mediante el uso de iptables:iptables -A RH-Firewall-1-INPUT -p tcp -m state \ --state NEW -m tcp --dport 5432 -j ACCEPT

7. Acceder a la base de datos con un usuario y el cliente psql a una base de datos configurada:psql -U postgres -h [direccionip] [database] Contrasea para usuario postgres:

5. ReferenciasPostGIS Manual versin 1.2.0. http://postgis.refractions.net/docs/. PostGIS on Wikipedia. http://en.wikipedia.org/wiki/PostGIS.