MapServer - Mapfile carga de shapefile con clasificación

Note

Fecha Autores
14 Febrero 2017
  • Wladimir Szczerban

©2017 Wladimir Szczerban

Excepto donde quede reflejado de otra manera, la presente documentación se halla bajo licencia: Creative Commons (Creative Commons - Attribution - Share Alike: http://creativecommons.org/licenses/by-sa/3.0/deed.es)

MapServer - Mapfile carga de shapefile con clasificación

Configuración de un archivo Mapfile (.map) para cargar una capa en formato ESRI shapefile (.shp).

Warning

Los todos los datos utilizados en este ejemplo son datos de ejemplo y no tienen ningún carácter oficial. Igualmente los datos pueden proceder de fuentes diferentes a las indicadas en la configuración del servicio y ser datos no reales.

  1. Crear la carpeta del proyecto (mtig2017) donde crearemos y copiaremos todos los archivos. Es recomendable que la carpeta no esté en una ruta accesible desde Internet para evitar que los usuarios accedan directamente a nuestros datos.

    Por ejemplo: crear la carpeta en C:\Users\XXXX\mtig2017
    
  2. Crear el archivo equipamientos.map dentro de la carpeta del proyecto. Abrir el archivo con un editor de texto (Notepad++, Atom, Sublime, etc).

  3. Crear el objeto MAP.

    # Inicio archivo MAP
    MAP
    
    #Nombre de la aplicación no debe contener espacios ni caracteres especiales
    NAME equipamientos
    
    #Estado
    STATUS ON
    
    #Extensión mapa [minx] [miny] [maxx] [maxy]
    EXTENT 263747.60 4484436.53  527495.20 4748184.13
    
    #Unidades del mapa
    UNITS METERS
    
    #Tamaño máximo de la imagen
    MAXSIZE 4096
    
    #Ruta de la cartografía
    SHAPEPATH "datos"
    
    #Color de fondo
    IMAGECOLOR 255 255 255
    
    #Formato de salida de la imagen
    OUTPUTFORMAT
      NAME "png8"
      DRIVER AGG/PNG8
      MIMETYPE "image/png"
      IMAGEMODE RGBA
      EXTENSION "png"
      FORMATOPTION "QUANTIZE_FORCE=on"
      FORMATOPTION "QUANTIZE_COLORS=256"
      FORMATOPTION "GAMMA=0.75"
    END
    
    #Ruta librería proyecciones
    CONFIG "PROJ_LIB" 'C:/ms4w/proj/nad/'
    
    #Proyección por defecto del mapa
    PROJECTION
    "init=epsg:25831"
    END
    
    #Definición de las capacidades
    WEB
     IMAGEPATH "tmp/"
     IMAGEURL "tmp/"
     METADATA
        OWS_TITLE "Aplicación OGC"
        OWS_ABSTRACT "Ejemplo de interoperabilidad utilizando Minnesota MapServer"
        OWS_ENABLE_REQUEST "*"
        OWS_ONLINERESOURCE "http://localhost:81/cgi-bin/mapserv.exe?map=C:/Users/XXXX/mtig2017/equipamientos.map"
        OWS_SRS "EPSG:23031 EPSG:4326 EPSG:25831 EPSG:4258 EPSG:4230 EPSG:3857 EPSG:32631"
        OWS_EXTENT "263747.60 4484436.53 527495.20 4748184.13"
        WMS_FEATURE_INFO_MIME_TYPE "text/html"
        OWS_ACCESSCONSTRAINTS "NINGUNO"
        OWS_LIMITSCONSTRAINTS "NINGUNO"
        OWS_FEES "NINGUNO"
        OWS_ADDRESSTYPE "MAILING ADDRESS"
        OWS_CITY "Barcelona"
        OWS_STATEORPROVINCE "Barcelona"
        OWS_CONTACTELECTRONICMAILADDRESS "test@icgc.cat"
        OWS_CONTACTPERSON ""
        OWS_CONTACTORGANIZATION "Institut Cartogràfic i Geològic de Catalunya"
        OWS_ADDRESS "Parc de Montjuic sn"
        OWS_POSTCODE "08038"
        OWS_COUNTRY "Spain"
        OWS_CONTACTPOSITION "Geostarters"
        OWS_CONTACTVOICETELEPHONE ""
        OWS_SERVICE_ONLINERESOURCE "http://catalegidec.icc.cat"
        OWS_ROLE "Provaider"
        OWS_KEYWORDLIST "Cataluña,servicio,mapa,equipamientos"
        OWS_CONTACTFACSIMILETELEPHONE ""
        OWS_HOURSOFSERVICE ""
        OWS_CONTACTINSTRUCTIONS ""
        OWS_ATTRIBUTION_ONLINERESOURCE "http://www.icgc.cat"
        OWS_ATTRIBUTION_TITLE "ICGC"
        OWS_BBOX_EXTENDED "True"
        OWS_HTTP_MAX_AGE "3600"
        LABELCACHE_MAP_EDGE_BUFFER "10"
        OWS_SLD_ENABLED "true"
      END
    END
    
    #definición de la leyenda del mapa
    
    #definición de las capas del mapa
    
    #Final archivo MAP
    END
    
  4. Comprobar que no tenemos ningún error en el Mapfile. Abrir el navegador y escribir:

    http://localhost:81/cgi-bin/mapserv.exe?map=C:/Users/XXXX/mtig2017/equipamientos.map
    
  5. Comprobar que retorna el siguiente mensaje:

    mapserv(): Web application error. Traditional BROWSE mode requires a TEMPLATE in the WEB section, but none was provided.
    
  6. Definir la capa del mapa.

    1. Crear la carpeta datos dentro del directorio del proyecto

    2. Descargar el archivo equipamientos.zip

    3. Descomprimir el archivo equipamientos.zip dentro de la carpeta datos

    4. Crear la carpeta images dentro del directorio del proyecto

    5. Descargar el archivo images.zip

    6. Descomprimir el archivo images.zip dentro de la carpeta images

    7. Escribir la definición de la capa en el Mapfile. Justo debajo de donde dice #definición de las capas del mapa agregamos lo siguiente.

      LAYER
            NAME "administracio_publica"
                STATUS ON
            TYPE POINT
            GROUP "equipaments"
            DATA "eq_gencat_v1shp"
                TRANSPARENCY 100
            CLASSITEM "TIPUS"
                LABELMINSCALE 150
            LABELMAXSCALE 90000
            TOLERANCE 3
            DUMP TRUE
            PROJECTION
               "init=epsg:25831"
            END
                CLASS
                      NAME "Administración Pública"
                      TEMPLATE 'info_new.htm'
                      TEXT "[NOM]"
                      STYLE
                    COLOR 200 140 10
                        SYMBOL "images/administracio_publica.gif"
                    SIZE 16
                      END
                      LABEL
                        ANTIALIAS TRUE
                        FONT arial-bold
                        TYPE TRUETYPE
                        MINFEATURESIZE 16
                        MINDISTANCE 15
                        POSITION CC
                        OFFSET 0 15
                        BUFFER 2
                        SIZE 8
                        COLOR 173 33 16
                        SHADOWCOLOR 218 218 218
                        SHADOWSIZE 2 2
                        OUTLINECOLOR 254 254 254
                      END
                END
                METADATA
                  "OWS_title" "Administración Pública"
                  "ows_group_title" "Equipamientos"
                      "ows_featureid" "ID"
                  "OWS_abstract" "Equipamientso Gencat"
                  "OWS_extent" "256900.000 4484809.998  533550.000 4751559.998"
                  "gml_include_items" "all"
                  "OWS_SRS" "EPSG:25831 EPSG:4326 EPSG:23031 EPSG:32631 EPSG:4258 EPSG:4230 EPSG:3857"
                END
          END # Layer
      
  7. Verificar que funcione el getCapabilities. Abrir el navegador y escribir:

    http://localhost:81/cgi-bin/mapserv.exe?map=C:/Users/XXXX/mtig2017/equipamientos.map&request=getCapabilities&service=wms
    

    Note

    Debemos ver el archivo xml con la descripción de las capacidades del servidor.

  8. Hacer la petición getMap para visualizar el mapa. Abrir el navegador y escribir:

    http://localhost:81/cgi-bin/mapserv.exe?map=C:/Users/XXXX/mtig2017/equipamientos.map&REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=administracio_publica&FORMAT=image/png&STYLES=&SRS=EPSG:25831&BBOX=263747.60,4484436.53,527495.20,4748184.13&WIDTH=768&HEIGHT=768
    
  9. Debemos ver como respuesta nuestro mapa con todos los equipamientos sin clasificación

    mapa todos equipamientos
  10. Para clasificar los puntos del mapa debemos crear un EXPRESSION dentro de nuestro CLASS. Justo debajo del nombre del CLASS agregamos lo siguiente:

    EXPRESSION ("[TIPUS]" == "Agricultura_Ramaderia_Pesca")
    
  11. Cambiaremos el icono por la imagen correspondiente con agricultura. En lugar de SYMBOL “images/administracio_publica.gif” pondremos SYMBOL “images/agricultura.gif”

  12. Si recargamos el mapa en el navegador ahora veremos muchos menos puntos y ha cambiado la simbolización.

    mapa equipamientos agricultura

Ejercicio

  1. Cambiar el nombre de la capa de administracio_publica a agricultura
  2. Modificar la petición getMap con el nuevo nombre de capa
  3. Agregar una nueva capa con otra categoría
  4. Modificar la petición getMap para mostrar las dos capas
  5. Crear un nuevo template para la respuesta de las peticiones getFeatureInfo