ClasePractica1

59
 MapServer Taller de Sistemas de Información Geográfica MapServer

Transcript of ClasePractica1

Page 1: ClasePractica1

   

MapServer

Taller de Sistemas de Información GeográficaMapServer

Page 2: ClasePractica1

   

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.

Page 3: ClasePractica1

   

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.

Page 4: ClasePractica1

   

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

Page 5: ClasePractica1

   

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

Page 6: ClasePractica1

   

OpenEV

Page 7: ClasePractica1

   

MapServer

Es la principal herramienta que emplearemos para presentar nuestros mapas en la Web.  

La página oficial de MapServer es: http://mapserver.gis.umn.edu

Page 8: ClasePractica1

   

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. 

GDAL/OGR  Acceso a datos y Performance

GDAL/OGR PostGIS

Portabilidad

$ 0.00

Page 9: ClasePractica1

   

GDAL

Geospatial Data Abstracion Library Es parte del paquete FWTools.   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.

Page 10: ClasePractica1

   

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.

Funciones: Sus funciones pueden ser empleadas por programadores de distintos lenguajes:  C, C++, Phyton.  Para otros lenguajes, puede emplearse SWIG (Perl, Java, PHP, Ruby, etc.)

Page 11: ClasePractica1

   

GDAL

En resumen: No hay que preocuparse del formato de una imagen para poder analizarla y emplearla.

Page 12: ClasePractica1

   

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.

gdal_translate: Permite pasar de un formato a otro.  Provee funciones para redimensaionar, extraer subconjuntos de datos, etc.

Page 13: ClasePractica1

   

GDAL  Utilidades

gdalinfo: Nos brinda información acerca del archivo de la imagen raster

# gdalinfo vancouver.tif     Driver: GTiff/GeoTIFF     Size is 1236, 1028     Coordinate System is:     PROJCS["NAD83 / UTM zone 10N",         GEOGCS["NAD83",             DATUM["North_American_Datum_1983",                 SPHEROID["GRS 1980",6378137,298.2572221010042,                     AUTHORITY["EPSG","7019"]],                 AUTHORITY["EPSG","6269"]],             PRIMEM["Greenwich",0],             UNIT["degree (supplier to define representation)",0.01745329251994328],             AUTHORITY["EPSG","4269"]],         PROJECTION["Transverse_Mercator"] ........................

Page 14: ClasePractica1

   

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.

Page 15: ClasePractica1

   

OGR  Utilidades

ogrinfo ogr2ogr

Page 16: ClasePractica1

   

PostGIS

PostgreSQL: un motor de base de datos empresariales potente, gratuito y open source.

Extiende PostgreSQL, permitiendo almacenar y manipular tipos de datos geográficos, como cualquier dato tabular.

Las funciones mas avanzadas de PostGIS se basan en un conjunto de librerías (GEOS), Geometry Engine Open Source (refractions research)

Page 17: ClasePractica1

   

PostGIS

Permite manipular los datos directamente en la BD, 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.wkb_geometry && b.wkb_geometry

Page 18: ClasePractica1

   

MapServer  Funcionamiento

Por lo general, MapServer trabaja detrás de un Web Server. El Servidor Web recibe las solicitudes de mapas y 

las deriva a Mapserver para su creación. MapServer genera el mapa y se lo retorna al 

servidor Web quien a su vez lo traslada al usuario.

Page 19: ClasePractica1

   

MapServer

La función principal de MapServer involucra leer datos de distintas fuentes y combinar estas capas (LAYERS) en un archivo gráfico, también conocida como imagen del mapa.

Una capa puede ser una imagen satelital, otra un vector con los límites de los paises, otras los puntos con las principales ciudades.  

Cada capa se dibuja y es superpuesta sobre las otras.

Page 20: ClasePractica1

   

MapServer

Page 21: ClasePractica1

   

MapServer

En la figura anterior se muestra un ejemplo de superposición de capas.

Cada uno de los checkbox seleccionados representa una capa que es solicitada a MapServer para que sea presentada en la imagen de la izquierda.

Cada capa es tomada desde un origen independiente (también puede ser el mismo).

El proceso de rendering se realiza cada vez que se solicita un nuevo mapa a MapServer.

Page 22: ClasePractica1

   

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

Page 23: ClasePractica1

   

MapServer

Uno de los componentes principales es el programa CGI, el cual, luego de cada solicitud de una mapa, dibuja la información desde los data sources y retorna la imagen correspondiente.

Page 24: ClasePractica1

   

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

Page 25: ClasePractica1

   

MapServer  Mapfile

Básicamente es un archivo de configuración de texto que enumera la forma de dibujar e interactuar con el mapa.

Incluye que capas deben dibujarse, el sistema de proyección, el formato de imagen de salida, si se emplean leyendas, barras de escala, etc.

Cuando se realiza una solicitud a una aplicación MapServer, debe especificarse que archivo de mapping debe emplearse para que así pueda construir el mapa.

Page 26: ClasePractica1

   

MapServer  Mapfile

MAP   SIZE 600 300 EXTENT 180 90 180 90 LAYER 

NAME countries TYPE POLYGON STATUS DEFAULT DATA countries.shp CLASS 

OUTLINECOLOR 100 100 100 END 

END END

Page 27: ClasePractica1

   

MapServer  Datasource

Representarían el combustible del motor.  Básicamente define de donde se toman los datos.

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.

Page 28: ClasePractica1

   

MapServer – Instalación

Windows Linux

Repositorios Compilado

Page 29: ClasePractica1

   

Linux  Compilado

Compilamos todas la librerias requeridas. Generalmente (depende de cada libreria) 

./configure make make install

Una vez compiladas las librerias: Directorio source de MapServer ./configure make

Se generará el archivo ejecutable mapserv

Page 30: ClasePractica1

   

Linux  Compilado

Algunas opciones de compilación:– ./configure \

--with-proj=/usr/local/proj-4.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/

Page 31: ClasePractica1

   

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

Page 32: ClasePractica1

   

Linux – Compilación vs Repositorio Repositorios

En los repositorios normalmente no se encuentran disponibles las últimas versiones de los componentes.

Puesta en marcha de servidor rápida. Prestaciones no tan elevadas.

Compilación Disponibles últimas versiones. La compilación es + compleja, y + lenta. Mayor productividad y prestaciones.

Page 33: ClasePractica1

   

MS4W  Windows

Paquete MS4W, disponible en: http://www.maptools.org MapServer For(4) Windows

Contiene Apache HTTP Server version 2.2.10 PHP version 5.2.6 MapServer CGI 5.2.1 MapScript 5.2.1 (CSharp, Java, PHP, Python) GDAL/OGR 1.6.0 RC2 and Utilities MapServer Utilities PROJ Utilities OGR/PHP Extension 1.0.0

Page 34: ClasePractica1

   

MS4W Una vez descargado el archivo de MS4W

Descomprimir el contenido en el directorio raiz, por ejemplo c:\.  Pasaremos a tener c:\ms4w con el contenido completo

Iniciar MS4W Apache Web Server mediante  /ms4w/apacheinstall.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 serviceThe Apache MS4W Web Server service is successfully installed.Testing httpd.conf....Errors reported here must be corrected before the servicecan be started.The Apache MS4W Web Server service is starting.The Apache MS4W Web Server service was started successfully.

Page 35: ClasePractica1

   

MS4W

http://localhost/

Page 36: ClasePractica1

   

MS4W

http://localhost/cgibin/mapserv.exe

Page 37: ClasePractica1

   

MS4W  Herramientas

Ejecutar desde línea de comando  c:\ms4w\setenv.bat

Page 38: ClasePractica1

   

MS4W  Aplicaciones

Trabajando los Mapas Ejemplo: Carpeta con archivos .SHP de ESRI Herramientas:

OGR  ogrinfo ogr2ogr

Page 39: ClasePractica1

   

MS4W  Aplicaciones

c:\ms4w\apps\lapampa mapas\*.shp ogrinfo so mapas pob0003a_Project

Page 40: ClasePractica1

   

MS4W  AplicacionesINFO: Open of `mapas' using driver `ESRI Shapefile' successful.

Layer name: pob0003a_ProjectGeometry: PointFeature Count: 7155Extent: (3232375.578346, 5570103.035091)  (3772862.020105, 

6127358.845214)Layer SRS WKT:PROJCS["Argentina_Zone_3",    GEOGCS["GCS_Campo_Inchauspe",        DATUM["Campo_Inchauspe",            SPHEROID["International_1924",6378388.0,297.0]],        PRIMEM["Greenwich",0.0],        UNIT["Degree",0.0174532925199433]],    PROJECTION["Transverse_Mercator"],    PARAMETER["False_Easting",3500000.0],    UNIT["Meter",1.0]]UNION: Real (11.0)NOMBRE: String (45.0)TIPO: String (50.0)PROVINCIA: String (60.0)DEPARTAMEN: String (40.0)HABITANTES: Real (11.0)PAIS: String (15.0)OBSERVACIO: String (50.0)HOJA: String (10.0)

Page 41: ClasePractica1

   

MS4W  Aplicaciones

ogr2ogr: Las primeras conversiones ogr2ogr 

f "ESRI Shapefile" mydata.shp  PG:"host=myhost user=myloginname 

dbname=mydbname password=mypassword"  "mytable" 

ogr2ogr  f "PostgreSQL" PG:"host=localhost user=someuser 

dbname=somedb password=somepassword port=5432"  mydata.shp

Page 42: ClasePractica1

   

MapServer – Primera Aplicación

Hola Mundo!!!!! Si, no es la excepción Pasos a seguir:

Crear el Mapfile Crear el Archivo de Inicialización y el Template HTML robar la aplicacion!Ṕ

Page 43: ClasePractica1

   

MapServer  Mapfile

NAME ”Hello World”

SIZE 400 300

IMAGECOLOR 249 245 186

IMAGETYPE PNG

EXTENT 1.00 1.00 1.00 1.00

WEBTEMPLATE ”/var/www/htdocs/hello.html”

IMAGEPATH ”/var/www/htdocs/tmp/”

IMAGEURL ”/tmp/”

END

Page 44: ClasePractica1

   

MapServer  MapfileLAYER

STATUS defaultTYPE pointFEATURE

POINTS 0,0 0,0 ENDTEXT ”Hello World”

ENDCLASS

STYLECOLOR 255 0 0

ENDLABEL

TYPE  bitmapEND

ENDENDEND

Page 45: ClasePractica1

   

MapServer  hello.html<html><head><title>Hello World desde MapServer</title></head><body>

<form method=”POST” action=”/cgibin/mapserv.exe”><input type=”submit” value=”Click”/>

<input type=”hidden” name=”map”      value=”/var/www/htdocs/hello.map”/>

</form><img src=”[img]” width=”400” height=”300” border=”0”/></body></html>

Page 46: ClasePractica1

   

MapServer

Page 47: ClasePractica1

   

MapServer

Archivos Creados (similares): "/var/www/htdocs/tmp/Hello_World1100850527563

8.png" <img src="/tmp/Hello_World11008505275638.png"

width=400 height=300 border=0>

Page 48: ClasePractica1

   

MapServer – Primer Mapa

Page 49: ClasePractica1

   

MapServer – Primer Mapa

Archivos SHP de ESRI c:\ms4w\Apache\htdocs\mapdata\mapas

HTML c:\ms4w\Apache\htdocs\lapampa.html

Mapfile c:\ms4w\Apache\htdocs\mapdata\lapampa.map

Template c:\ms4w\Apache\htdocs\map.html

Page 50: ClasePractica1

   

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>

Page 51: ClasePractica1

   

MapServer – Mapfile

NAME "lapampa"SIZE 550 413TRANSPARENT onIMAGETYPE GIF SHAPEPATH "/ms4w/Apache/htdocs/mapdata/mapas"EXTENT 3294313.840706 5644021.995538 3738758.515716 6127290.490093

WEBTEMPLATE "../mapa.html"IMAGEPATH "/ms4w/apache/htdocs/tmp/"   IMAGEURL "/tmp/"END

Page 52: ClasePractica1

   

MapServer – MapfileSCALEBAR    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 onEND

LEGENDSTATUS onIMAGECOLOR 255 255 255TRANSPARENT TRUE

END

Page 53: ClasePractica1

   

MapServer – MapfileREFERENCE

IMAGE "../referencia.gif"SIZE 200 150EXTENT 3294313.840706 5644021.995538 3738758.515716 6127290.490093STATUS ONCOLOR 1 1 1OUTLINECOLOR 255 0 0MINBOXSIZE 5MAXBOXSIZE 100MARKERSIZE 8MARKER 'star'

END

Page 54: ClasePractica1

   

MapServer – MapfileLAYER        NAME "contorno"        DATA "lim0003a_Project"# CONNECTIONTYPE POSTGIS# CONNECTION "dbname=pampa user=postgres host=127.0.0.1 port=5432"# DATA "the_geom from contorno"        STATUS on        TYPE line        CLASS                NAME "Contorno"                STYLE                        COLOR 120 50 20                END        ENDEND

Page 55: ClasePractica1

   

MapServer  Interacción

Refresco en la imagen no de página

Capas Seleccionables con checkbox

Imagen de Referencia con muestra de ubicación

Page 56: ClasePractica1

   

MapServer  Scripting

CGI es una alternativa Permite la elaboración rápida de aplicaciones No requiere conocimientos de programación de un 

lenguaje determinado

Existen Alternativas MapScript

Page 57: ClasePractica1

   

MapServer  MapScript

Phyton# custommapfile.py import mapscript 

map = mapscript.mapObj(  ) map.name = "CustomMap" map.setSize(600,300) map.setExtent(180.0,90.0,180.0,90.0) map.imagecolor.setRGB(180, 180, 250) map.units = mapscript.MS_DD 

# Set the web object image properties 

map.web.imagepath = "/srv/www/htdocs/tmp/" map.web.imageurl = "/tmp/" 

Page 58: ClasePractica1

   

MapServer  MapScript

Php

<?php$image_name = "phpmshello",rand(0,999999)).".png";

$map = ms_newMapObj("/ms4w/Apache/htdocs/mapdata/hello.map");

$image=$map>draw();

$image>saveImage(""/ms4w/Apache/htdocs/tmp/".$image_name);

 ?>

Page 59: ClasePractica1

   

FIN

Conceptos de MapServer Arquitectura Ventajas Herramientas Formatos Alternativas Ejemplos