Como funciona Mapserver

La vez anterior hablamos de algunos criterios porqué MapServer y lo básico de la instalación.  Ahora veamos algo de su funcionamiento en un ejercicio con los mapas de los cuates chiapanecos.

 mapserver geoserver Donde se monta

Una vez instalado Apache, el directorio de publicación para MapServer predeterminado es la carpeta OSGeo4W directamente sobre C:/

Dentro, hay diferentes carpetas con aplicaciones según lo que se instale, pero la carpeta para publicación debe ir dentro de apache.  En este caso la carpeta llamada gis.

  • Luego dentro, la carpeta data contiene las capas, ortofoto, etc.
  • En la carpeta etc, van las fuentes true type usadas para los labels, con extensión .ttf.  También aquí está un archivo txt que las levanta y otro que define símbolos.
  • Y finalmente en la carpeta httdocs van las páginas web que levantan el servicio.
  • mapserver geoserver

La página web

En el ejemplo, usaré el caso mostrado la vez anterior.  Básicamente contiene un archivo index que redirecciona a uno de extensión phtml, y este a su vez levanta las funciones construidas sobre un php y los mapas.  Una carpeta contiene las imágenes vinculadas desde la página.

mapserver geoserver

Si nos fijamos, el phtml es solamente el cascarón construido a partir de tablas, y llamados a las funciones mapscript/php.  Debería levantarse utilizando:

http://localhost/gis/gispalenque.phtml

Abajo se muestra el resultado funcionando:

  • al centro la función GMapDrawMap(),
  • a la derecha el llamado al keymap GMapDrawKeyMap(),
  • la barra de escala abajo GMapDrawScaleBar(),
  • y en caso de las funciones de despliegue, una condición respecto al listbox if (!IsHtmlMode()) echo "<!—"  con las decisiones:  ZOOM_IN, ZOOM_OUT, RECENTER, QUERY_POINT.

Ya corriendo, el despliegue se ve así:

mapserver geoserver

Los archivos .map

La combinación de la publicación de Mapserver está en lo que levanta apache, que le envía php mediante mapscript y que luego sale por ese cascarón.  Pero la mayor parte de la ciencia está en los archivos .map, que no deben confundirse con los generados por Mapinfo, Manifold o Mobile Mapper Office con la misma extensión.

Estos .map son archivos de texto, que contienen el mapa en forma de script.  Estos se pueden crear con programas de escritorio como Quantum GIS, si se fijan hay uno para el mapa principal, uno para el Keymap y dos para los servicios OGC wms y wfs.  Veamos como funciona mapscript:

MAP

NAME PALENQUE_DEMO
STATUS ON
SIZE 600 450
SYMBOLSET ../etc/symbols.txt
EXTENT 604299 1933386 610503 1939300 #VISTA DE TODO EL MAPA DE PALENQUE
#EXTENT 605786 1935102 608000 1938800 #SOLO EL SECTOR 01
UNITS METERS
SHAPEPATH "../data"
TRANSPARENT ON
IMAGECOLOR 255 255 255
FONTSET ../etc/fonts.txt

  • MAP indica que inicia el script
  • STATUS, indica si el mapa por default viene encendido o no
  • SIZE es el tamaño del despliegue
  • SYMBOLSET muestra la ruta de los símbolos
  • EXTENT son las coordenadas del despliegue.  El símbolo # se utiliza para hacer anotaciones
  • UNITS para las unidades
  • SHAPEPATH, la ruta donde están las capas
  • Todo al final terminará con el comando END

Dentro, el código inicia con una línea de comando, y termina con END, por ejemplo para escala mínima y máxima; directorio de las imágenes temporales:

WEB
  MINSCALE 2000000
  MAXSCALE 50000000

IMAGEPATH "C:\OSGeo4W/tmp/ms_tmp/"
  IMAGEURL "/ms_tmp/"
END

mapserver geoserverLa barra de escala:

SCALEBAR
  IMAGECOLOR 255 255 255
  LABEL
    COLOR 0 0 0
    SIZE SMALL
  END
  SIZE 300 5
  COLOR 255 255 255
  BACKGROUNDCOLOR 0 0 0
  OUTLINECOLOR 0 0 0
  UNITS kilometers
  INTERVALS 3
  STATUS ON
END

mapserver geoserverUna capa de raster:  que va de fondo, con descripción en el listado como “Ortofoto”, a partir de una tiff ubicada en la carpeta data:

 

 

LAYER
  NAME ortofoto
  METADATA
    "DESCRIPTION" "OrtoFoto"
  END
  TYPE RASTER
  STATUS OFF
  DATA "C:\OSGeo4W/apps/gis/data/ortofotoGral.tif"
  #OFFSITE 0 0 0
END

Una capa shp de polígonos, tematizada en base a criterios, levantando unos datos sobre una plantilla html, con un rótulo de fuente sans, tamaño 6, color negro y bordes blancos de buffer 5…

mapserver geoserver

LAYER
  NAME sector02Zona
  TYPE POLYGON
  STATUS OFF
  TRANSPARENCY 50
  EXTENT 607852 1935706 610804 1938807   METADATA
    "DESCRIPTION"   "Tematico por Valor Sector 02"
    "RESULT_FIELDS" "MsLink Cve_Mz Cve_Pred prop Area Perimetro VALOR"
  END
  DATA PALENQUE_SECTOR01
  TEMPLATE "ttt_query.html"
  TOLERANCE 5
  #TOLERANCEUNITS PIXELS
  LABELITEM "VALOR"
  CLASSITEM "VALOR"
  LABELCACHE ON
  CLASS
    SYMBOL 1
    COLOR 128 128 128
    OUTLINECOLOR 0 0 0
    NAME "ZonaNULL"
    EXPRESSION ([VALOR]=0)
    LABEL
         ANGLE AUTO
         COLOR 0 0 0
         FONT sans
         TYPE TRUETYPE
         POSITION cc
        
PARTIALS FALSE
         BUFFER 5
         SIZE 6
         OUTLINECOLOR 200 200 200
    END
  END #class valor 0
  CLASS
    SYMBOL 3
    COLOR 255 128 128
    #COLOR -1 -1 -1 #SIN RELLENO

…. y así hasta cerrar con

END
  END #Class Valor
END # Layer

Para concluir

De aquí, que trabajar con mapserver, si bien es bastante simple, se vuelve medio complejo y muy limitado para trabajos grandes porque todo está en el .map.  La mayor desventaja está en que todo se hace de a pie, como definir cada color en una tematización, y por esto surgen herramientas como CartoWeb, que trabaja sobre Mapserver pero trae plugins construidos y ejemplos con características que hacen que esta versión primitiva se quede como el readme first:

  • Trabajar marcos separados, con AJAX con el fin de refrescarlos por separado
  • Parsear el código, con tal que un script reescriba el .map en base a criterios parametrizables
  • Volver dinámico el desplazamiento sin que requiera refrescar, como si se tratara de una capa flash
  • Edición vectorial en línea, escritura inmediata sobre el caché
  • Descarga de capa en forma vectorial
  • Exportar a Google Earth
  • Generar PDF del despliegue

En una próxima le echaremos una mirada CartoWeb, aquí les dejo el enlace a los ejemplos principales.

3 Replies to “Como funciona Mapserver”

  1. Hola,

    Estoy intentando llamar a una capa desde el .map, como sigue:

    LAYER
    NAME casas_prueba
    TYPE POINT
    CONNECTIONTYPE OGR
    CONNECTION #»virtual.ovf»
    »

    xxxxx
    EXEC …….
    eess_id
    wkbPoint
    WGS84

    »

    Mi problema es que el servicio DSN está dando problemas: al pedir un GetCapabilities me está devolviendo la contraseña de la base de datos…puedo poner una llamada a un fichero para evitar «regalar» la contraseña o es un error del DSN???? Gracias!

  2. MapServer is a popular Open Source project whose purpose is to display dynamic spatial maps over the Internet. A mounted drive is a drive that is mapped to an empty folder on a volume that uses the NTFS file system. Mounted drives function as any other drives, but they are assigned drive paths instead of drive letters.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.