MapServerTaller de Sistemas de Información Geográfica MapServer Objetivos La idea es repasar herramientas exitosas de productos open source orientados a GIS, empleados en ámbitos comerciales, gubernamentales y académicos. ● http://freegis.org http://opensourcegis.org http://maptools.org ● ● Una de las principales ventajas de emplear estas herramientas open source es que son compatibles con los principales formatos de software GIS propietario. Raster y Vector Ambos términos se refieren a tipos específicos de datos. Los datos Raster son organizados como una matriz o grilla que tiene filas y columnas. Cada intersección entre fila/columna es una celda o pixel. Cada celda tiene un valor, por ejemplo, una elevación. Tienen un número determinado de pixels de ancho y alto y cada pixel representa un determinado tamaño. Por ejemplo, en imágenes Landsat, cada pixel representa 30 x 30 metros. Raster y Vector Los Vectores son representados como coordenadas definen puntos o se combinan para conformar líneas o polígonos. Estos datos a menudo se relacionan con una tabla de información, una para cada característica (línea, punto o polígono) del conjunto OpenEV Es un potente visor de Escritorio. Permite explorar los datos de cualquier tipo de imágenes (raster o vector) soportadas por la librería (GDAL/OGR). OpenEV proviene con el paquete FWTools: http://fwtools.maptools.org http://openev.sourceforge.net/ Es un buen ejemplo de cómo pueden accederse a las funciones de GDAL/OGR empleando otros lenguajes ya que está escrito sobre Phyton OpenEV . MapServer Es la principal herramienta que emplearemos para presentar nuestros mapas en la Web. La página oficial de MapServer es: http://mapserver.gis.edu .umn. GDAL/OGR GDAL/OGR PostGIS Acceso a datos y Performance Portabilidad $ 0.MapServer Ventajas Ofrece la posibilidad de presentar los datos a otros usuarios empleando Internet Es uno de los pocos productos que ofrecen soluciones a los proyectos que disponen de mapas en múltiples formatos.00 . A menudo llamada Goodle Una librería para formatos de datos geoespaciales raster. Presenta un único modelo de datos abstracto para la aplicación que llama para todos los formatos soportados.GDAL Geospatial Data Abstracion Library Es parte del paquete FWTools. . Para otros lenguajes. C++.GDAL Tiene cuatro características principales: Variedad: Soporta mas de 40 formatos raster Abstracción: Cualquier aplicación que emplee GDAL accede automáticamente a esos 40 formatos Herramientas: Las herramientas que emplean GDAL posiblemente ahorren esfuerzos de programación. Ruby. puede emplearse SWIG (Perl. Funciones: Sus funciones pueden ser empleadas por programadores de distintos lenguajes: C. PHP. Phyton. etc. Java.) . GDAL En resumen: No hay que preocuparse del formato de una imagen para poder analizarla y emplearla. . gdal_translate: Permite pasar de un formato a otro. Provee funciones para redimensaionar. etc. extraer subconjuntos de datos. .GDAL Utilidades Las utilidades GDAL sobre Windows que provienen con el paquete FWTools Se accede a las mismas empleando el intérprete de comandos que viene con el paquete. .298... DATUM["North_American_Datum_1983".0]."7019"]].2572221010042.. SPHEROID["GRS 1980".."6269"]]. GEOGCS["NAD83".6378137...tif Driver: GTiff/GeoTIFF Size is 1236..GDAL Utilidades gdalinfo: Nos brinda información acerca del archivo de la imagen raster # gdalinfo vancouver.. AUTHORITY["EPSG". AUTHORITY["EPSG".0.... 1028 Coordinate System is: PROJCS["NAD83 / UTM zone 10N".. AUTHORITY["EPSG".... UNIT["degree (supplier to define representation)".01745329251994328]. ."4269"]].... PROJECTION["Transverse_Mercator"] ... PRIMEM["Greenwich"... OGR Es una librería open source para el procesamiento de datos vectoriales. GDAL se emplea para visualizar datos raster o imágenes y OGR para los vectoriales. . OGR Utilidades ogrinfo ogr2ogr . como cualquier dato tabular. gratuito y open source.PostGIS PostgreSQL: un motor de base de datos empresariales potente. Geometry Engine Open Source (refractions research) . Las funciones mas avanzadas de PostGIS se basan en un conjunto de librerías (GEOS). Extiende PostgreSQL. permitiendo almacenar y manipular tipos de datos geográficos. wkb_geometry .wkb_geometry && b. empleando SQL Consulta: Seleccionar los países limítrofes a Argentina SQL: SELECT nombre_de_pais from pais a. pais b where b.nombre = 'Argentina' and a.PostGIS Permite manipular los datos directamente en la BD. El Servidor Web recibe las solicitudes de mapas y las deriva a Mapserver para su creación. MapServer trabaja detrás de un Web Server. .MapServer Funcionamiento Por lo general. MapServer genera el mapa y se lo retorna al servidor Web quien a su vez lo traslada al usuario. Una capa puede ser una imagen satelital.MapServer La función principal de MapServer involucra leer datos de distintas fuentes y combinar estas capas (LAYERS) en un archivo gráfico. . Cada capa se dibuja y es superpuesta sobre las otras. otras los puntos con las principales ciudades. también conocida como imagen del mapa. otra un vector con los límites de los paises. MapServer . .MapServer En la figura anterior se muestra un ejemplo de superposición de capas. El proceso de rendering se realiza cada vez que se solicita un nuevo mapa a MapServer. Cada capa es tomada desde un origen independiente (también puede ser el mismo). Cada uno de los checkbox seleccionados representa una capa que es solicitada a MapServer para que sea presentada en la imagen de la izquierda. MapServer En nuestro caso. el redibujado se produce cuando el usuario cambia las capas a visualizar o bien realiza un zoom in/out o desplazamiento . dibuja la información desde los data sources y retorna la imagen correspondiente. . el cual. luego de cada solicitud de una mapa.MapServer Uno de los componentes principales es el programa CGI. MapServer El programa CGI de MapServer. actua como intermediario entre quien solicita la imagen y los mapas que la conforman. Las solicitudes se pasan de la forma de parámetros desde el servidor Web a MapServer . Cuando se realiza una solicitud a una aplicación MapServer. barras de escala. el formato de imagen de salida. Incluye que capas deben dibujarse. etc. el sistema de proyección. debe especificarse que archivo de mapping debe emplearse para que así pueda construir el mapa.MapServer Mapfile Básicamente es un archivo de configuración de texto que enumera la forma de dibujar e interactuar con el mapa. . si se emplean leyendas. shp CLASS OUTLINECOLOR 100 100 100 END END END .MapServer Mapfile MAP SIZE 600 300 EXTENT 180 90 180 90 LAYER NAME countries TYPE POLYGON STATUS DEFAULT DATA countries. Pueden provenir de una diversidad de fuentes: soportados en forma nativa por MapServer soportados por medio de librerías GDAL / OGR por medio de un Web Service.MapServer Datasource Representarían el combustible del motor. Básicamente define de donde se toman los datos. . MapServer – Instalación Windows Linux Repositorios Compilado . Linux Compilado Compilamos todas la librerias requeridas./configure make Se generará el archivo ejecutable mapserv . Generalmente (depende de cada libreria) ./configure make make install Una vez compiladas las librerias: Directorio source de MapServer . /configure \ --with-proj=/usr/local/proj-4.Linux Compilado Algunas opciones de compilación: – .6.0 \ --with-geos=/usr/local/bin/geos-config \ --with-ogr=/usr/local/bin/gdal-config \ --with-gdal=/usr/local/bin/gdal-config \ --with-postgis=/usr/local/pgsql/bin/pg_config \ --with-curl-config=/usr/bin/curl-config \ --with-httpd=/usr/sbin/httpd \ --with-php=/usr/include/php \ --with-wfs \ --with-wfsclient \ --with-wmsclient \ --enable-debug \ --with-threads \ --with-wcs \ --with-wcsclient \ --with-sos \ --with-gd \ --with-freetype \ --with-jpeg \ --with-agg=/usr/local/ . Linux – Ubuntu Repositorio Actualizamos las fuentes Es posible que tengamos que editar /etc/apt/sources.list aptget update Buscamos los paquetes de mapserver aptcache search mapserver Nos devuelve una lista con los paquetes que contienen el texto: mapserver Instalamos los paquetes de MapServer aptget install cgimapserver mapserverbin php5 mapscript Por defecto se instala en /usr/lib/cgibin . Puesta en marcha de servidor rápida. Prestaciones no tan elevadas. La compilación es + compleja. y + lenta. Compilación . Disponibles últimas versiones.Linux – Compilación vs Repositorio Repositorios En los repositorios normalmente no se encuentran disponibles las últimas versiones de los componentes. Mayor productividad y prestaciones. PHP.10 PHP version 5.org MapServer For(4) Windows Apache HTTP Server version 2.2.2. Python) GDAL/OGR 1.maptools.MS4W Windows Paquete MS4W.1 (CSharp.0 Contiene .0.1 MapScript 5.6 MapServer CGI 5.6.2.0 RC2 and Utilities MapServer Utilities PROJ Utilities OGR/PHP Extension 1. Java. disponible en: http://www.2. MS4W Una vez descargado el archivo de MS4W Descomprimir el contenido en el directorio raiz. Pasaremos a tener c:\ms4w con el contenido completo Iniciar MS4W Apache Web Server mediante /ms4w/apacheinstall.conf. The Apache MS4W Web Server service is starting. .bat Se instala Apache como un servicio de Windows llamado "Apache Web Server" Si se ejecuta en una consola DOS se obtiene el siguiente mensaje: Installing the Apache MS4W Web Server service The Apache MS4W Web Server service is successfully installed. Errors reported here must be corrected before the service can be started.. Testing httpd... por ejemplo c:\. The Apache MS4W Web Server service was started successfully. MS4W http://localhost/ . MS4W http://localhost/cgibin/mapserv.exe . bat .MS4W Herramientas Ejecutar desde línea de comando c:\ms4w\setenv. SHP de ESRI Herramientas: OGR ogrinfo ogr2ogr .MS4W Aplicaciones Trabajando los Mapas Ejemplo: Carpeta con archivos . shp ogrinfo so mapas pob0003a_Project .MS4W Aplicaciones c:\ms4w\apps\lapampa mapas\*. 0. PROJECTION["Transverse_Mercator"].0) PROVINCIA: String (60. UNIT["Meter".845214) Layer SRS WKT: PROJCS["Argentina_Zone_3".297.0) TIPO: String (50.0.0) .1. UNIT["Degree".MS4W Aplicaciones INFO: Open of `mapas' using driver `ESRI Shapefile' successful.3500000.0) HOJA: String (10. GEOGCS["GCS_Campo_Inchauspe".578346.0) NOMBRE: String (45. 6127358.0].0) OBSERVACIO: String (50. DATUM["Campo_Inchauspe". PRIMEM["Greenwich". SPHEROID["International_1924".020105.0) HABITANTES: Real (11. PARAMETER["False_Easting".0) PAIS: String (15.0]].0]] UNION: Real (11.0) DEPARTAMEN: String (40. 5570103.6378388. Layer name: pob0003a_Project Geometry: Point Feature Count: 7155 Extent: (3232375.035091) (3772862.0].0174532925199433]].0. MS4W Aplicaciones ogr2ogr: Las primeras conversiones ogr2ogr f "ESRI Shapefile" mydata.shp ogr2ogr .shp PG:"host=myhost user=myloginname dbname=mydbname password=mypassword" "mytable" f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432" mydata. no es la excepción Pasos a seguir: Crear el Mapfile Crear el Archivo de Inicialización y el Template HTML Ṕrobar la aplicacion! .MapServer – Primera Aplicación Hola Mundo!!!!! Si. 00 WEB TEMPLATE ”/var/www/htdocs/hello.html” IMAGEPATH ”/var/www/htdocs/tmp/” IMAGEURL ”/tmp/” END .MapServer Mapfile NAME ”Hello World” SIZE 400 300 IMAGECOLOR 249 245 186 IMAGETYPE PNG EXTENT 1.00 1.00 1.00 1. MapServer Mapfile LAYER STATUS default TYPE point FEATURE POINTS 0.0 0.0 END TEXT ”Hello World” END CLASS STYLE COLOR 255 0 0 END LABEL TYPE bitmap END END END END . MapServer hello.map”/> </form> <img src=”[img]” width=”400” height=”300” border=”0”/> </body> </html> .exe”> <input type=”submit” value=”Click”/> <input type=”hidden” name=”map” value=”/var/www/htdocs/hello.html <html> <head><title>Hello World desde MapServer</title></head> <body> <form method=”POST” action=”/cgibin/mapserv. MapServer . png" <img src="/tmp/Hello_World11008505275638.png" width=400 height=300 border=0> .MapServer Archivos Creados (similares): "/var/www/htdocs/tmp/Hello_World1100850527563 8. MapServer – Primer Mapa . MapServer – Primer Mapa Archivos SHP de ESRI c:\ms4w\Apache\htdocs\mapdata\mapas c:\ms4w\Apache\htdocs\lapampa.map c:\ms4w\Apache\htdocs\map.html c:\ms4w\Apache\htdocs\mapdata\lapampa.html HTML Mapfile Template . MapServer – Primer Mapa lapampa.html <form name="formulario_mapa" method="get" action="mapa.html"> <input type="submit" value="Ok para comenzar"> <input type="hidden" name="program" value="/cgibin/mapserv.exe"> <input type="hidden" name="map" value="/ms4w/Apache/htdocs/mapdata/lapampa.map"> <input type="hidden" name="zoomsize" value="2"> <input type="hidden" name="layers" value="caminos"> <input type="hidden" name="layers" value="contorno"> <input type="hidden" name="layers" value="canales"> <input type="hidden" name="layers" value="alternativos"> <input type="hidden" name="root" value="/"> </form> . 995538 3738758.html" IMAGEPATH "/ms4w/apache/htdocs/tmp/" IMAGEURL "/tmp/" END ./mapa.490093 WEB TEMPLATE ".840706 5644021.515716 6127290.MapServer – Mapfile NAME "lapampa" SIZE 550 413 TRANSPARENT on IMAGETYPE GIF SHAPEPATH "/ms4w/Apache/htdocs/mapdata/mapas" EXTENT 3294313.. MapServer – Mapfile SCALEBAR IMAGECOLOR 255 255 255 LABEL COLOR 0 0 0 SIZE small END POSITION lr INTERVALS 4 STATUS embed SIZE 150 4 STYLE 0 UNITS kilometers TRANSPARENT on END LEGEND STATUS on IMAGECOLOR 255 255 255 TRANSPARENT TRUE END . 840706 5644021.515716 6127290./referencia.995538 3738758.490093 STATUS ON COLOR 1 1 1 OUTLINECOLOR 255 0 0 MINBOXSIZE 5 MAXBOXSIZE 100 MARKERSIZE 8 MARKER 'star' END .gif" SIZE 200 150 EXTENT 3294313.MapServer – Mapfile REFERENCE IMAGE ".. 0.0.1 port=5432" # DATA "the_geom from contorno" STATUS on TYPE line CLASS NAME "Contorno" STYLE COLOR 120 50 20 END END END .MapServer – Mapfile LAYER NAME "contorno" DATA "lim0003a_Project" # CONNECTIONTYPE POSTGIS # CONNECTION "dbname=pampa user=postgres host=127. MapServer Interacción Imagen de Referencia con muestra de ubicación Refresco en la imagen no de página Capas Seleccionables con checkbox . MapServer Scripting CGI es una alternativa Permite la elaboración rápida de aplicaciones No requiere conocimientos de programación de un lenguaje determinado MapScript Existen Alternativas . 0.py import mapscript map = mapscript.MS_DD # Set the web object image properties map.setExtent(180.imageurl = "/tmp/" .MapServer MapScript Phyton # custommapfile.180.setRGB(180.imagecolor.0.mapObj( ) map.web.0.0) map.name = "CustomMap" map.90. 180.300) map.imagepath = "/srv/www/htdocs/tmp/" map.90.setSize(600.web. 250) map.units = mapscript. $image>saveImage(""/ms4w/Apache/htdocs/tmp/".$image_name).map").MapServer MapScript Php <?php $image_name = "phpmshello".999999)).".png". $image=$map>draw(). ?> . $map = ms_newMapObj("/ms4w/Apache/htdocs/mapdata/hello.rand(0. FIN Conceptos de MapServer Arquitectura Ventajas Herramientas Formatos Alternativas Ejemplos .