Análisis del módulo PostGIS (OpenGIS)

Para almacenamiento y tratamiento de datos geográficos con alta performance y bajo costo

El PostgreSQL es el Sistema Administrador de Bases de Datos (SGBD) de código abierto que posibilitó el desarrollo de soluciones corporativas con una mejor relación costo x beneficios. Un punto fuerte de este SGBD es su capacidad de tratar grandes volúmenes de datos con escalabilidad, o sea, su arquitectura puede ser continuamente ampliada de acuerdo con la demanda de los usuarios. Exactamente en este contexto, entran las aplicaciones en el área de Geotecnologías que necesitan de una infraestructura robusta y en continua expansión.

La evolución del PostgreSQL está basada en una larga historia cuyo inicio es medios académicos, como muestran los hechos a continuación:
• El Ingres (1977-1985) desarrollado por la Universidad de Berkeley en California fue el puntos de partida para el PostgreSQL (PG);
• De 1986 a 1994, Michael Stonebraker chefiou un grupo de desarrolladores con el objetivo de proyectar un SGBD objeto-relacional. Este proyecto fue denominado Postgres ( “Post” indica “posterior”, haciendo referencia al Ingres); • El código de este proyecto fue utilizado por la empresa Illustra para el desarrollo de un proyecto comercial;
• La Illustra Information Technologies se unió con la Informix, esta siendo adquirida por la IBM el 2001. Oficialmente el desarrollo del Postgres paró en la versión 4.2 en 1994;
• Dos estudiantes de graduación de Berkeley, Jolly Chen y Andrew Yu, añadieron el soporte SQL al PG en1994/1995. Este proyecto fue denominado Postgres95. Ambos dejaron Berkeley, sin embargo el Jolly Chen continuó manteniendo y desarrollando el Postgres95 (este proyecto fue desarrollado en ANSI C);
• Chen formó un equipo pequeño con bastante tiempo disponible para continuar la implementación de las 250.000 líneas de código C. El equipo principal de desarrollo era formado por Marc Fournier (Canadá), Thomas Lockhart (California), Vadim Mikheev (Rusio) y Bruce Momjian (Pensilvania);
• En 1996, el nombre fue alterado de Postgres95 a PostgreSQL (versión 6.0).

En la época en que este artículo fue escrito, el PostgreSQL se encontraba en la versión 8.0.3, contando con una rápida evolución, teniendo nuevas versiones lanzadas cada pocos meses. Entre las principales características del PostgreSQL, se puede citar:
• Licenciamiento BSD. Esta licencia permite la libertad de uso, alteración, modificación y distribución del sistema. Ella también permite que versiones propietarias y comerciales sean creadas a partir del sistema licenciado en estos términos;
• Un 100% compatible con ANSI SQL (SQL92 y algunas funcionalidades del SQL99). Este recurso permite una gran facilidad en la migración de datos de otra bases que también sigan el ANSI SQL;
• SGBD Objeto-Relacional (clases y jerarquía). El PostgreSQL está en la misma categoría de otros SGBD’s, tales como Oracle®, Microsoft SQL Server® e e IBM DB2®, que evolucionaron de la arquitectura relacional a objeto-relacional, o sea implementarán algunas definiciones de orientación a objeto;
• Extremadamente modular, facilitando el trabajo de los desarrolladores que desean implementar nuevas funcionalidades. Esta característica posibilitó la creación del modulo PostGIS, contiendo incontables funcionalidades para el desarrollo de aplicaciones que tratan la Geoinformación;
• Posee las siguientes interfaz nativas: ODBC, JDBC, C, C++, PHP, Perl, TCL, ECPG, Python y Ruby. En este requisito, el PostgreSQL supera todos los demás SGBD’s, pues ningún otro posee tantas posibilidades de implementaciones inherentes al SGBD. Con eso, las diversas “tribus” de desarrolladores podrán implementar funciones dentro de las bases sin sin la necesidad de aprender un nuevo lenguaje;
• Existen interfaz gráficas libres que permiten la administración del PG de manera simple: phpPgAdmin y pgAdmin III. Estas interfaz facilitan la administración de las bases de datos, haciendo los procesos más intuitivos.

El PostGIS es un módulo que añade entidades geográficas al PostgreSQL. Nativamente, el PostgreSQL ya soporta geometrías espaciales, sin embargo el PostGIS añade la capacidad de almacenamiento/recuperación según la especificación SFS (Simple Features Specification) del consorcio internacional Open GeoSpatial (OGC). Además del almacenamiento de datos geográficos, este módulo también implementa diversas funcionalidades topológicas, posibilitando el desarrollo de Sistemas de Información geográfica (SIG) Corporativos. La topología también forma parte de la especificación SFS (OpenGIS®), garantizando al PostGIS interoperabilidad con incontables sistemas que también adoptan el SFS.
El licenciamiento del PostGIS es definido por la GNU GPL (General Public License), garantizando todas las libertades de un software libre. Un hecho importante a ser destacado por la licencia GNU GPL es que, al contrario de la BSD, cualquier mejoría del código-fuente del PostGIS debe ser devuelta al mantenedor (líder del desarrollo) del proyecto. El PostGIS fue desarrollado por la empresa canadiense Refractions Research y, en el periodo en que este artículo fue escrito, se encontraba en la versión 1.0.2.

Para tratar grandes volúmenes de datos espaciales con mayor eficiencia, PostGIS implementa la indexación RTree sobre la indexación GiST (Generalized Search Trees) nativa del PostgreSQL. A pesar que PostgreSQL posee nativamente tres tipos de indexación (B-Tree, R-Tree y GiST ), a R-Tree nativa no presenta la robustez exigida para las aplicaciones relacionadas al PostGIS.
El código-fuente disponible para download está vuelto hacia compilación en plataforma Linux /Unix, pudiendo ser compilado, con algunas adaptaciones, en cualquier plataforma. Permite direccionar el trabajo a plataformas libres, todos los estudios serán conducidos sobre una configuración totalmente redime de sistemas propietarios.

2.- Principales Funciones del POSTGIS

El PostGIS cuenta con un gran número de funciones para análisis espaciales/topológicas que extienden el propio SQL del PostgreSQL. Para este trabajo, fueron seleccionadas algunas funciones, con miras a las demandas cotidianas de las instituciones que tratan la Geoinformación, así como, la complejidad computacional de las mismas:
• Disjoint: se analiza si dos geometrías poseen algún punto en común y retorna el valor verdadero (t, true) si ningún punto fuera identificado;
• Intersects: se analiza si dos geometrías poseen alguna intersección y retorna verdadero (t, true) si esto ocurre;
• Touches: se analiza si dos geometrías poseen alguna intersección y retorna verdadero (t, true) si esto ocurre;
• Crosses: se analiza si dos geometrías se cruzan y retorna verdadero (t, true) si esto ocurre;
• Within: analiza si una geometría está contenida en la otra y retorna verdadero (y, trae) si esto ocurre;
• Contains: analiza si una geometría contiene a la otra y retorna verdadero (t, true) si esto ocurre.

En la próxima sección, las funciones descritas arriba serán analizadas a través de algunas queries.

3.- Performance de Operaciones Topológicas

Para el análisis de los resultados de las principales operaciones topológicas/espaciales del PostGIS, fue establecido un ambiente de prueba (servidor Linux) con la siguiente configuración:

• Procesador Atlhon XP 3.200+;
• 1 GB de memoria RAM;
• HD serial Ata de 120 GB.

La distribución Linux utilizada fue el Fedora Core 3 con las siguientes aplicaciones configuradas /compiladas:
• PostgreSQL 8.0.3;
• PostGIS 1.0.2;
• Proj 4.4.9;
• GEOS 2.1.2.

Durante la conducción de las pruebas, incontables otras aplicaciones estaban siendo ejecutadas sobre el mismo ordenador, simulando un ambiente normalmente encontrado en los órganos públicos con poca disponibilidad de recursos financieros. Entre estas aplicaciones, están: Apache, servidor X, MySQL, etc.

La base de municipios del IBGE y la base de carreteras federales fueron utilizadas para estas pruebas, recogiendo situaciones cotidianas. Esta base posee cerca de 4.8 millones de vértices.
Para que fuera posible visualizar los resultados de los análisis en un mapa, fue utilizado el MapServer. Este sistema también posee 4 libertades inherentes a los softwares libres.

• Análisis: identificar todos los municipios que están alrededor del municipio de Rubin;
• Query:
– select t2.nombremunic from municipios t1, municipios t2 where touches (t1.thegeom, t2.thegeom)=’t’ AND t1.nombremunic=’Rubim’;

– Tiempo de ejecución: 1149.628 ms
– Resultado:
– ALMENARA
– JACINTO
– JEQUITINHONHA
– SANTO
– ANTONIO Del JACINTO
– FELISBURGO
– RÍO
– Del PRADO
– PALMOPOLIS

a0069
Fig. 1 – Municipios que tocan el municipio de Rubim

• Análisis: identificar todos los municipios que no están alrededor del municipio de Rubin;
• Query:
– select t2.nombremunic, t2.gid from municipios t1, municipios t2 where disjoint(t1.thegeom, t2.thegeom)=’t’ AND t1.nombremunic=’Rubim’;
– Tiempo de ejecución: 980.335 ms
– Resultado: el resultado de esta query corresponde a todos los municipios, con excepción de los listados en la query anterior.

a0070
Fig. 2 – Municipios que no tocan el municipio de Rubim

– Análisis: identificar todos los municipios que están alrededor del municipio de Uchoa;
– Query:
– select t2.nombremunic, t2.gid from municipios t1, municipios t2 where
touches(t1.thegeom, t2.thegeom)=’t’ AND t1.nombremunic=’Uchoa’;
– Tiempo de ejecución: 675.292 ms
– Resultado:
– OLIMPIA
– GUAPIACU
– TABAPUA
– CEDRAL
– IBIRA
– CATIGUA

a0071
Fig. 3 – Municipios que tocan el municipio de Uchoa

– Análisis: identificar todos los municipios que no están alrededor del municipio de Uchoa;
– Query:
– select t2.nombremunic from municipios t1 , municipios t2 where disjoint(t1.thegeom,
t2.thegeom)=’t’ AND t1.nombremunic=’Uchoa’;
– Tiempo de ejecución: 629.816 ms
– Resultado: el resultado de esta query corresponde a todos los municipios, con excepción de los listados en la query anterior.


Fig. 4 – Municipios que no tocan el municipio de Ochoa

– Análisis: identificar todos las carreteras federales que intersectan el municipio de Uchoa;
– Query:
– select t2.carretera from municipios t1, carreteras t2 where intersects(t1.thegeom,
t2.thegeom)=’t’ AND t1.nombremunic=’Uchoa’;
– Tiempo de ejecución: 217.608 ms
– Resultado:
BR- 456/SP
BR- 456/SP
SP- 379.

a0073
Fig. 5 – Carreteras que intersectan el municipio de Uchoa

– Análisis: identificar todos las carreteras federales que cruzan el municipio de Altamira;
– Query:
– select t2.carretera from municipios t1, carreteras t2 where crosses(t1.thegeom,
t2.thegeom)=’t’ AND t1.nombremunic=’Altamira’;
– Tiempo de ejecución: 2682.713 ms
– Resultado:
BR- 163/PA
BR- 163/PA
BR- 163/PA
BR- 230/PA
BR- 230/PA

a0074
Fig. 5 – Carreteras que cruzan el municipio de Altamira

– Análisis: identificar todos las carreteras federales que intersectan el municipio de Altamira;
– Query:
– select t2.carretera, t2.tipo from municipios t1, carreteras t2 where intersects(t1.thegeom,
t2.thegeom)=’t’ AND t1.nombremunic=’Altamira’;
– Tiempo de ejecución: 2747.839 ms
– Resultado:
BR- 163/PA
BR- 163/PA
BR- 163/PA
BR- 163/PA
BR- 230/PA
BR- 230/PA
BR- 158/PA
BR- 230/PA

a0075
Fig. 6 – Carreteras que intersectan el municipio de Altamira

– Análisis: identificar todas las carreteras federales que están contenidas en el municipio de Altamira, utilizando la función within;
– Query:
– select t2.carretera, t2.tipo from municipios t1 , carreteras t2 where within(t2.thegeom,
t1.thegeom)=’t’ AND t1.nombremunic=’Altamira’;
– Tiempo de ejecución: 2463.775 ms
– Resultado:
BR- 163/PA
BR- 230/PA
BR- 158/PA

a0076
Fig. 7 – Carreteras que están contenidas en el municipio de Altamira

– Análisis: identificar todas las carreteras federales que están contenidas en el municipio de Altamira, utilizando la función contains;
– Query:
– select t2.carretera, t2.tipo from municipios t1, carreteras t2 where contains(t1.thegeom,
t2.thegeom)=’t’ AND t1.nombremunic=’Altamira’;
– Tiempo de ejecución: 2801.005 ms
– Resultado:
BR- 163/PA
BR- 230/PA
BR- 158/PA

Como era de esperarse, los dos últimos análisis presentan resultados exactamente iguales, con performance también similares.

4.- Conclusión

Las pruebas conducidas en este trabajo presentan el PostgreSQL/PostGIS como una robusta opción para implementaciones de SIG corporativo. Otro factor importante a destacar, es la flexibilidad del PostgreSQL en el desarrollo de nuevos módulos.
El mayor tiempo de consulta no llegó a 3 segundos en un computador con valor inferior a US$1.400. Ningún software propietario fue utilizado para la implementación de esta solución, o sea, el hardware sería el único costo, además de la capacitación, que una institución tendría para poseer su propia Base de Datos Geográfica.
A pesar de eso, los órganos de mapeamiento oficial del país y la gran mayoría de las instituciones públicas continúan con las inversiones vueltas a una arquitectura propietaria con soluciones, normalmente, americanas, comprando una estructura cada vez más dependiente de empresas extranjeras y con alto costo de mantenimiento.

El PostgreSQL ya está consagrado en el mundo del software libre siendo utilizado por grandes instituciones como la Cámara Municipal de Río de Janeiro, el Ayuntamiento de Tiara – SP, el Ayuntamiento de Piedras Grandes – SP, el Hospital Son Lucas (SE), la Secretaría de Agricultura y Ganadería – CE, la Unisuam -RJ, a Telemar, etc. Sin embargo, en el área de Geotecnologías, su potencial aún es poco aprovechado, debido a falta de conocimiento de los profesionales del área con relación a las nuevas tecnologías libres. Otro factor que ha dificultado el avance de este SGBD es la formación académica basada en soluciones propietarias, con miras a que la gran mayoría de los profesores aún prefieren seguir la línea tradicional de enseñanza direccionando el aprendizaje a paquetes consolidados en el mercado.

Se espera que este trabajo pueda llamar la atención de profesores, estudiantes y profesionales del area de Geotecnologías para los cambios tecnológicos que están ocurriendo con la disponibilidad de opciones libres para toda la comunidad mundial.

Fuente:

Helton Nogueira Uchoa – Opengeo Consultoria de Informática LTDA, Jorge Luís Nunes e Silva Brito – Universidade do Estado do Rio de Janeiro

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Solve : *
19 + 7 =