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.
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.
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.
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í:
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 50000000IMAGEPATH "C:\OSGeo4W/tmp/ms_tmp/"
IMAGEURL "/ms_tmp/"
END
La 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
Una 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…
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.
Hay forma de tener la plantilla phtml estandar de salida, gracias
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!
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.