MapServer es una aplicación servidor de Código Abierto que te permite publicar imágenes de mapas geográficos y datos vectoriales a través de internet usando Estándares OGC como WMS y WFS.
Esta guía describe cómo:
Note
¿Qué aprenderé? En esta sección, aprenderás qué es un mapfile y cómo configurarlo para permitirle a MapServer servir un archivo shape como imágenes usando WMS.
El Mapfile es el archivo de configuración que MapServer usa para convertir datas geoespaciales en imágenes o datas vectoriales. Su propósito principal es definir las capas que puede generar, cómo obtener los datos necesarios y cómo dibujarlas (ej.: color, símbolo, etiqueta, etc...).
Agrega el siguiente contenido en el archivo:
MAP
NAME "MAPSERVER QUICKSTART"
EXTENT -137 29 -53 88
UNITS DD
SHAPEPATH "/home/user/data/natural_earth/"
SIZE 800 600
IMAGETYPE PNG24
PROJECTION
"init=epsg:4326"
END
WEB
METADATA
ows_enable_request "*"
END
END
LAYER
NAME "Admin Countries"
STATUS ON
TYPE POLYGON
DATA "10m_admin_0_countries"
CLASS
STYLE
COLOR 246 241 223
OUTLINECOLOR 0 0 0
END
END
END
END
Note
El ejemplo usa el conjunto d edatos de Natural Earth, que se encuentra instalado en el Live DVD: ~/data/natural_earth (un atajo para /usr/local/share/data/natural_earth)
Cada objeto en el mapfile empieza con su nombre (por ejemplo MAP) y termina con un END. Un mapfile siempre empieza con un objeto MAP y debería contener una lista de objetos LAYER que son la capas que el mapfile puede leer y dibujar. En nuestro mapfile, tenemos sólo una capa definida.
Note
En la documentación de MapServer puedes encontrar una lista completa de los objetos y propiedades disponibles.
A pesar de que MapServer está orientado a aplicaciones web, también puede producir imágenes en la línea de comandos. Esto puede ser útil si estás buscando mapeo repetitivo o mientras estás haciendo pruebas.
Abre un terminal (Applications/Accessories/Terminal Emulator) y escribe
shp2img -m mapserver_quickstart.map -o mymap.png
Si este comando corre satisfactoriamente, serás capaz de ver el mapa generado en file:///home/user/mymap.png .
Note
¿Qué aprenderé? Aprenderás cómo generar una imagen con capas desde un mapfile con MapServer usando una consulta de OGC WMS.
Abre el navegador web y coloca la siguiente dirección:
http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Admin%20Countries&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600
¿Qué significa lo anterior? Si lo ponemos en palabras simples, es una consulta GetMap de WMS Web Map Service que le dice a MapServer que “use el siguiente mapfile para generar una capa específica como una imagen png basada en ciertos parámetros provisto por el usuario como el tamaño de la imagen, los límites geográficos, la proyección, etc.”. Todas las capas especificadas en la propiedad “&LAYERS=...” que tengan STATUS ON en el mapfile, además de todas las capas con STATUS DEFAULT, serán dibujadas. El resultado debería parecerse a lo siguiente:
Note
Todos los parámetros de la consulta pertenecen al estándar WMS, excepto “?map=/home/user/mapserver_quickstart.map”, que es específico de MapServer.
Note
¿Qué aprenderé? Aprenderás cómo agregar una nuevo objeto capa a la definición de tu mapfile.
Agregaremos ahroa una nueva capa a nuestro mapfile. Antes del último END, agrega la siguente configuración:
LAYER
NAME "Lakes"
STATUS ON
TYPE POLYGON
DATA "10m_lakes"
CLASS
STYLE
COLOR 153 179 204
END
END
END
Ahora tenemos 2 definiciones de capas en nuestro mapfile. Fíjate que la nueva capa que acabamos de agregar tiene la propiedad “STATUS ON”, esto significa que a menos que sea específicamente requerida, no será generada.
Usemos nuestra consulta GetMap anterior y agreguemos nuestra nueva capa “Lakes” a la imagen generada. Simplemente necesitamos agregar el nombre de la nueva capa en la lista de la propiedad “LAYERS”:
La imagen generada por MapServer se parece a nuestro mapa anterior pero con el agreado de los lagos, provistos por nuestra nueva capa:
Note
¿Qué aprenderé? Verás un ejemplo de cómo darle estilos a los elementos de una capa dependiendo de algunas de sus propiedades.
En un mapfile, un objeto LAYER puede contenter infitos objetos CLASS. Estos son usados para darle estilo a los elementos contenidos in los datos espaciales (DATA). Por ejemplo, si miramos más de cerca a nuestro archivo “10m_lakes” usando una herramienta como ogrinfo, veremos la geometría y la definición de atributos que contiene. Estos valores de atributos pueden ser usados para dibujar los elementos dentro del conjunto de datos en forma diferente usando múltiples objetos CLASS.
En nuestro conjunto de datos “10m_lakes”, tenemos el atributo ScaleRank, que parece estar relacionado con el tamaño del lago. Podemos usar esto para generar cada lago en forma diferente. En el objeto LAYER, agregaremos otro objeto CLASS justo antes del que tenemos:
LAYER
NAME "Lakes"
STATUS DEFAULT
TYPE POLYGON
DATA "10m_lakes"
CLASSITEM "ScaleRank"
CLASS
EXPRESSION /0|1/
STYLE
COLOR 153 179 204
OUTLINECOLOR 0 0 0
END
END
CLASS
STYLE
COLOR 153 179 204
END
END
END
¿Qué hace nuestro nuevo objeto CLASS? Básicamente, le dice a MapServer que dibuje los elementos que tengan “ScaleRank” igual a “0” o “1”, con una línea exterior negra. Los objetos CLASS son siempre leídos desde arriba hacia abajo por cada elemento a ser dibujado. Cuando un elemento concuerda con la expresión (“EXPRESSION”) especificada en una clase (CLASS), esa clase es usada para generar el elemento. Si el elemento no concuerda con una clase, se revisa la clase siguiente. Si un elemento con concuerda con ninguna clase, entonces no se dibuja y si la última clase en la capa no contiene un objeto EXPRESSION, entonces actúa como clase por defecto. La propiedad “CLASSITEM” le dice a MapServer qué atributo usar para evaluar la expresión definida en el objeto EXPRESSION.
El resultado de esta modificación debería hacer que los lagos grandes en nuestro mapa sean generados con un borde negro:
Note
Aprende más acerca de los objetos EXPRESSIONS.
Este es un ejemplo simple pero puedes hacer más, mucho más. El sitio web del proyecto MapServer contiene muchos recursos que pueden ayudarte a empezar. Aquí tienes algunos recursos para revisar: