Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
|
sistemas:gis:mapserver [2010/07/11 13:31] alfred creado |
sistemas:gis:mapserver [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== MapServer ====== | ====== MapServer ====== | ||
| + | |||
| + | Es un proyecto Open Source multiplataforma que al ser instalado permite mostrar mapas dinámicos a partir de una interfaz de red, tiene soporte en gran variedad de entornos de desarrollo (PHP, Python, Java, .NET...). \\ | ||
| + | Nos permite realizar peticiones a capas raster, vectoriales o de bases de datos mediante una URL, también puede retornar imágenes de leyendas, de barras de escala, de mapas de referecia... \\ | ||
| + | Puede ser extendido y configurado mediante ''MapScript'' o plantillas, y a la vez nos da la posibilidad de construir aplicaciones web enfocada a mapas. | ||
| + | * La documentación la encontraremos en: [[http://mapserver.org/documentation.html]] | ||
| + | |||
| + | ===== Puesta a punto ===== | ||
| + | |||
| + | ==== Instalación ==== | ||
| + | MapServer se ejecuta como un CGI en el servidor HTTP Apache. Por lo tanto si lo instalasemos de cero en un sistema basado en Debian podríamos utilizar los siguientes comandos: | ||
| + | <code> | ||
| + | sudo apt-get install apache2 | ||
| + | sudo apt-get install cgi-mapserver mapserver-bin mapserver-doc | ||
| + | </code> | ||
| + | Para ver qué paquetes están instalados haremos: | ||
| + | <code> | ||
| + | /usr/lib/cgi-bin/mapserv -v | ||
| + | </code> | ||
| + | Para comprobar si se ha instalado correctamente accederemos a la ruta (por ejemplo, en Ubuntu) ''cgi-bin/mapserv'' (por ejemplo ''<nowiki>http://192.168.1.105/cgi-bin/mapserv</nowiki>'') y tendrá que devolver algo así como "//No query information to decode. QUERY_STRING is set, but empty.//". | ||
| + | |||
| + | ==== Arquitectura interna ==== | ||
| + | MapServer se compone de... | ||
| + | * **MapFiles**: Archivos de texto para configurar la aplicación, definen el area del mapa e indican donde están los datos y como devolver las imágenes, también define las capas de un mapa (data source, proyecciones, simbología...). Han de tener la extensión ''.map'' porque sino no serán reconocidos. | ||
| + | * **Datos geográficos**: MapServer puede leer distintos tipos de datos (aunque por defeccto lee ESRI shapefile). | ||
| + | * **Páginas HTML**. | ||
| + | MapServer es un programa CGI y como tal no tiene estado, cada petición que se le hace es independiente y no es influida por las pasadas. \\ | ||
| + | {{ sistemas:gis:ms-arquitectura.png?500 |}} | ||
| + | |||
| + | |||
| + | |||
| + | ===== MapFiles ===== | ||
| + | Los MapFiles son los archivos para configurar los mapas que sirve MapServer, la documentación de referencia la encontraremos en [[http://mapserver.org/mapfile/index.html#mapfile]]. \\ | ||
| + | Los MapFiles son archivos de texto que especifican un mapa. Están divididos en diferentes secciones y su contenido ha de seguir las siguientes normas: | ||
| + | * Los comentarios serán indicados mediante el carácter '#'. | ||
| + | * Serán parseados de arriba abajo, por lo tanto las layers indicadas al final serán dibujadas las últimas. | ||
| + | * Siempre es recomendable utilizar rutas relativas y no absolutas, aunque son admitidas las dos. | ||
| + | * Las rutas tendrán que ser indicadas entre comillas (simples o dobles, da igual). | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Objetos ==== | ||
| + | Estos son los objetos más utilizados internamente en un MapFile y sus propiedades: | ||
| + | === MAP === | ||
| + | * **EXTENT**, es la extensión del mapa resultado. | ||
| + | * **SIZE**, es el tamaño del mapa. | ||
| + | * **IMAGECOLOR**, el color de fondo del mapa. | ||
| + | <code> | ||
| + | MAP | ||
| + | NAME "sample" | ||
| + | EXTENT -180 -90 180 90 # Geographic | ||
| + | SIZE 800 400 | ||
| + | IMAGECOLOR 128 128 255 | ||
| + | END | ||
| + | </code> | ||
| + | === LAYER === | ||
| + | El parámetro **DATA** indica a qué tipo se refiere el parémetro **SHAPEPATH** del objeto MAP, si no se definiese se tomaría como un shapefile (.shp). | ||
| + | === RASTER === | ||
| + | <code> | ||
| + | LAYER | ||
| + | NAME "bathymetry" | ||
| + | TYPE RASTER | ||
| + | STATUS DEFAULT | ||
| + | DATA "bath_mapserver.tif" | ||
| + | END | ||
| + | </code> | ||
| + | === Layers vectoriales === | ||
| + | Estas pueden ser del tipo point, line o polygon (parámetro **TYPE**), según lo que se quiera mostrar. | ||
| + | <code> | ||
| + | LAYER | ||
| + | NAME "world_poly" | ||
| + | DATA 'shapefile/countries_area.shp' | ||
| + | STATUS ON | ||
| + | TYPE POLYGON | ||
| + | CLASS | ||
| + | NAME 'The World' | ||
| + | STYLE | ||
| + | OUTLINECOLOR 0 0 0 | ||
| + | END | ||
| + | END | ||
| + | END # layer | ||
| + | </code> | ||
| + | |||
| + | === Objetos CLASS y STYLE === | ||
| + | Son los utilizados para dar formato a los objetos LAYER. | ||
| + | <code> | ||
| + | CLASS | ||
| + | NAME "Primary Roads" | ||
| + | STYLE | ||
| + | SYMBOL "circle" | ||
| + | COLOR 178 114 1 | ||
| + | SIZE 15 | ||
| + | END #style1 | ||
| + | STYLE | ||
| + | SYMBOL "circle" | ||
| + | COLOR 254 161 0 | ||
| + | SIZE 7 | ||
| + | END #style2 | ||
| + | END | ||
| + | </code> | ||
| + | |||
| + | === SYMBOLS === | ||
| + | Se pueden definir directamente en el mapfile o en un fichero separado (entonces deberíamos utilizar el parámetro **SYMBOLSET** en el MAP). Por ejemplo: | ||
| + | <code> | ||
| + | MAP | ||
| + | NAME "sample" | ||
| + | EXTENT -180 -90 180 90 # Geographic | ||
| + | SIZE 800 400 | ||
| + | IMAGECOLOR 128 128 255 | ||
| + | SYMBOLSET "../etc/symbols.txt" | ||
| + | END # map | ||
| + | LAYER | ||
| + | ... | ||
| + | CLASS | ||
| + | NAME "Ski Area" | ||
| + | STYLE | ||
| + | SYMBOL "ski" | ||
| + | END | ||
| + | END | ||
| + | END # layer | ||
| + | </code> | ||
| + | Y ''symbols.txt'' contendría: | ||
| + | <code> | ||
| + | SYMBOL | ||
| + | NAME "ski" | ||
| + | TYPE PIXMAP | ||
| + | IMAGE "ski.gif" | ||
| + | END | ||
| + | </code> | ||
| + | === LABEL === | ||
| + | El objeto LAYER tiene el parámetro **LABELITEM** que puede ser utilizado en una columna específica en unos datos para referirse a un fichero **FONTSET** (el cual contiene una referencia a los nombres de fuentes posibles). | ||
| + | <code> | ||
| + | LABEL | ||
| + | FONT "sans-bold" | ||
| + | TYPE truetype | ||
| + | SIZE 10 | ||
| + | POSITION LC | ||
| + | PARTIALS FALSE | ||
| + | COLOR 100 100 100 | ||
| + | OUTLINECOLOR 242 236 230 | ||
| + | END # label | ||
| + | </code> | ||
| + | |||
| + | === INCLUDE === | ||
| + | Cualquier parte del mapfile puede ser almacenado en un fichero por separado y añadido mediante el parámetro **INCLUDE**, el nombre del fichero puede tener cualquier extensión y su ruta será siempre relativa al .map. De esa forma tanto las layers como los estilos pueden ser incluidos en multiples aplicaciones. \\ | ||
| + | Por ejemplo, podríamos tener un fichero ''shadedrelief.lay'': | ||
| + | <code> | ||
| + | LAYER | ||
| + | NAME 'shadedrelief' | ||
| + | STATUS ON | ||
| + | TYPE RASTER | ||
| + | DATA 'GLOBALeb3colshade.jpg' | ||
| + | END | ||
| + | </code> | ||
| + | Y el mapfile: | ||
| + | <code> | ||
| + | MAP | ||
| + | ... | ||
| + | INCLUDE "shadedrelief.lay" | ||
| + | ... | ||
| + | END | ||
| + | </code> | ||
| + | O incluir los objetos layers a parte: | ||
| + | <code> | ||
| + | NAME "base" | ||
| + | # | ||
| + | # include reference objects | ||
| + | # | ||
| + | INCLUDE "../templates/template.ref" | ||
| + | # | ||
| + | # Start of layer definitions | ||
| + | # | ||
| + | INCLUDE "../layers/usa/usa_outline.lay" | ||
| + | INCLUDE "../layers/canada/base/1m/provinces.lay" | ||
| + | INCLUDE "../layers/canada/base/1m/roads_atlas_of_canada_1m.lay" | ||
| + | INCLUDE "../layers/canada/base/1m/roads_atlas_of_canada_1m_shields.lay" | ||
| + | INCLUDE "../layers/canada/base/1m/populated_places.lay" | ||
| + | END # Map File | ||
| + | </code> | ||
| + | |||
| + | ===== Como... ===== | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Crear un servicio WMS ==== | ||
| + | * [[sistemas:gis#servicios_wms|Servicios WMS]] | ||
| + | * [[http://mapserver.org/ogc/wms_server.html|Manual de MapServer sobre cómo hacerlo]] | ||
| + | Para que MapServer permita ser configurado como WMS ha de haber sido compilado con las librerías ''libcurl'' y ''Proj.4'', para comprobar si realmente admite esta propiedad ejecutaremos ''mapsrv -v'' y tendrá que salir ''SUPPORTS=WMS_SERVER''. \\ | ||
| + | |||
| + | :?: También será necesario definir un objeto ''METADATA'' en el MAP y en las LAYER. | ||
| + | |||
| + | ===== MapScript ===== | ||
| + | |||
| + | |||
| + | |||