Sie sind auf Seite 1von 22

Implementacin de un Web-SIG utilizando PostGIS, MapServer, PHP y Chameleon

Anbal Pacheco apacheco.uy@gmail.com

Contenido
0.Intro 1.Bases de datos espaciales 2.PostGIS 3.Mapserver 4.Chameleon 5.Posibles ampliaciones del programador

Qu es un Sistema de Informacin Geogrfica?


una integracin organizada de hardware, software, datos geogrficos y personal, diseado para capturar, almacenar, manipular, analizar y desplegar en todas sus formas la informacin geogrficamente referenciada con el fin de resolver problemas complejos de planificacin y gestin [fuente: wikipedia-es]

Capas

En general, la informacin geogrfica en un SIG est distribuida en Capas de Informacin llamadas LAYERS

Tipos de datos espaciales

Vectoriales

punto, lnea, polgono escaneo de un plano Usos del suelo

Imgenes Raster

Imgenes Satelitales

Fotografa Area

Datos Vectoriales

PUNTO

Coordenadas planas (X,Y) Coordenadas geogrficas (Latitud, Longitud) Si 3D -> nueva coordenada: Altura Punto de inicio, Punto de fin Varios puntos (POLILNEA) Varios puntos que encierran un rea

LINEA

POLIGONO

Importancia de contar con datos Vectoriales

gil Procesamiento Minimizar Error Menor Costo de Almacenamiento Operaciones conocidas (geometra)

Qu son las GeoDatabases?

Son DBMS: con capacidades especiales para poder trabajar eficientemente con datos espaciales A nivel lgico: proveen nuevos tipos: punto, lnea, polgono A nivel funcional: deben proveer las funciones de los GIS: interseccin, unin, etc. El JOIN: con datos espaciales debe ser redefinido A nivel fsico: proveen estructuras de datos optimizadas para almacenar e indexar datos espaciales.

Ventajas de las GeoDatabases

Los datos espaciales y los no-espaciales (atributos) pueden coexistir en la misma tabla

Ej: tabla ciudad(id INT, geom POLIGON, nombre VARCHAR, ...)

Ventajas intrnsecas a los DBMS, concurrencia, lenguaje SQL, etc.

SELECT r.id FROM centro_poblado cp, ruta r WHERE cp.nombre='Crdoba' AND touches(r.geom, cp.geom)

PostGIS

Add-on para PostgreSQL para soportar bases de datos espaciales. www.postgis.org Instalacin (en debian): paquete postgresql-8.1-postgis Creacin de una BD PostgreSQL para poder albergar datos espaciales:
createdb basegeo createlang plpgsql #y hacer el include de PostGIS:

psql basegeo < lwpostgis.sql

Creacin de una tabla con campos espaciales


--Creamos la tabla: CREATE TABLE arboles( id INT PRIMARY KEY, nombre_popular VARCHAR(16) NOT NULL, nombre_cientifico VARCHAR(32) ); --Agregamos la columna espacial: SELECT AddGeometryColumn('arboles','geom',-1,POINT,2); --Insertamos una tupla: INSERT INTO puntos VALUES(1,'Ceibo', 'Erythrina crista-galli', GeometryFromText('POINT (54323 3445254)') ); --A ver... SELECT id, nombre_pupular, AsText(geom) FROM arboles;

Importacin & funciones interesantes

Por ejemplo: Importar desde un Shapefile:


$ shp2pgsql rutas.shp | psql basegeo

Funciones de PostGIS:

Soporta todas las funciones del estndar de OGC (Open Geospatial Consortium)

Union, Interseccn, rea, Distancia, Buffer, Touches, Contains, Overlaps, etc. ...

MapServer

Servidor de Mapas http://mapserver.gis.umn.edu Puede tomar datos georeferenciados de diversas fuentes (entre ellas PostGIS) y generar una imagen: png, gif, jpg, tiff, ... Definimos el mapa en un archivo (.map) siguiendo una sintaxis especfica de MapServer. Luego podemos acceder a los resultados directamente (interfaz cgi-bin) o con bindings, por ej. el de PHP.

PHPMapScript

Binding de MapServer para PHP Instalacin:

paquete php5-mapscript Creacin de archivo .map programacin del script visualizacin

Ejemplo sencillo:

Creacin de archivo .map

Podemos generarlo con alguna herramienta como por ejemplo QGIS O a mano:
MAP NAME MONTEVIDEO EXTENT 442306 6133367 479057 6162431 STATUS ON SIZE 415 315 IMAGETYPE PNG IMAGECOLOR 255 255 255 UNITS METERS LAYER CONNECTIONTYPE postgis CONNECTION "host=.... password=.... user=... dbname=..." NAME "Manzanas" TYPE POLYGON STATUS ON DATA "the_geom from manzanas" END END

Programacin del script

Con 4 lneas de cdigo PHP ya podemos tener un mapa:

<?php $map = ms_newMapObj("mimapa.map"); $img = $map->draw(); $url = $img->saveWebImage(); printf("<IMG SRC=%s WIDTH=%d HEIGHT= %d>\n", $url, $map->width, $map>height); ?>

Chameleon

Es un ejemplo del uso de PHPMapscript www.maptools.org/chameleon Nos brinda un set de herramientas / widgets listos para usarlos en nuestro mapa. Instalacin:

Compilar php_dbase (si quieren tener estadsticas de acceso a la aplicacin)


php_source$ ./configure with-dbase=module; make cp dbase.so $PHP_EXTENSION_DIR

Bajar chameleon y seguir los pasos de la gua de instalacin ;)

Componentes del SIG


Chameleon PHP

PHP Mapscript (MapServer)

PostgreSQL + PostGIS

Usar Chameleon en nuestra aplicacin

Hagamos lo ms fcil:

Tomar el sample ms adecuado y cambiarle:


El archivo .map El keymap de referencia La proyeccin El idioma ... luego ... todo lo que quieran

Ampliaciones del programador

En general queremos ms funcionalidad. No slo mirar un mapa!

(Por algo necesitamos el SIG) acordarse de la definicin de SIG.


Leer la documentacin de chameleon antes de codificar! Generar nuevos (custom) widgets O modificar el comportamiento de los existentes O Agregar lgica: Ej.: forms o interoperabilidad con otras libs de PHP como por ej. JPGraph

Qu hacer?

Ej.: Redefinir el query widget

En el template, registro en Chameleon una nueva funcin JavaScript para el evento ON_QUERY:

<script language="JavaScript" type="text/javascript"> function myOnLoad(){ CWC2OnLoadFunction(); goEventManager.registerForEvent('ON_QUERY','myOnQuery'); } function myOnQuery(nX,nY){ var url 'my_query.php?x='+nX+'&y='+nY+'&sid='+document.forms[0].sid.value; var eval_win = window.open(url,'eval_win','width=600,height=800'); eval_win.focus(); } </script>

Muchas gracias

Das könnte Ihnen auch gefallen