../../_images/logo_mapserver.png ../../_images/OSGeo_project.png

Guida rapida MapServer

MapServer è un’applicazione basata su server Open Source <https://opensource.org/>`_ che permette di pubblicare immagini di mappe geografiche e dati vettoriali attraverso internet usando OGC Standards come Web Map Service (WMS), Web Feature Service (WFS) e Web Coverage Service (WCS).

Configura MapServer usando il file di configurazione di Mapfile

Nota

Cosa imparerai ? In questa sezione, imparerai cos’è un Mapfile e come configurarlo per permettere a MapServer di servire uno shapefile come immagini usando richieste WMS.

Che cos’è un Mapfile ?

Il Mapfile è il file di configurazione che MapServer usa per rendere i dati geospaziali come immagini o dati vettoriali. Il suo scopo principale è quello di definire i layer che può disegnare, come leggere i dati necessari e come visualizzarli (ad esempio colore, simbolo, etichetta, ecc…).

Creare il mio primo Mapfile

  1. Aprire un editor di testi (per esempio Applications ‣ Accessories ‣ FeatherPad).

  2. Crea il file «mapserver_quickstart.map» nella tua home directory: /home/user/mapserver_quickstart.map.

    Mettici il seguente contenuto:

    MAP
      NAME "MAPSERVER_QUICKSTART"
      EXTENT -137 29 -53 88
      UNITS DD
      SHAPEPATH "/home/user/data/natural_earth2/"
      SIZE 800 600
    
      IMAGETYPE PNG24
    
      PROJECTION
        "init=epsg:4326"
      END
    
      WEB
        METADATA
          ows_title "MapServer Quickstart"
          ows_enable_request "*"
          ows_srs "EPSG:4326 EPSG:25832 EPSG:25833"
        END
      END
    
      LAYER
        NAME "Countries"
        STATUS ON
        TYPE POLYGON
        DATA "ne_10m_admin_0_countries"
        CLASS
          STYLE
            COLOR 246 241 223
            OUTLINECOLOR 0 0 0
          END
        END
      END
    
    END
    

    Nota

    L’esempio usa il dataset della terra naturale, che è già su OSGeoLive a ~/data/natural_earth2 (una scorciatoia per /usr/local/share/data/natural_earth2).

Ogni oggetto in un Mapfile inizia con il suo nome (per esempio MAP) e finisce con un END. Un Mapfile inizia sempre con l’oggetto MAP e dovrebbe contenere una lista di oggetti LAYER che il Mapfile può leggere e disegnare. Nel nostro Mapfile, hai attualmente un solo layer definito.

Diamo un’occhiata a qualcuno degli oggetti (e delle proprietà) definiti nel nostro Mapfile:

  • EXTENT: imposta il bounding box geospaziale predefinito per questa configurazione.

  • LAYER: definisce le proprietà di accesso e di visualizzazione di un set di dati spaziali. Aggiungerai un altro layer più tardi.

  • SHAPEPATH: imposta un percorso di base per i dati basati su file (ad esempio shapefile o immagini tiff).

Se guardi più da vicino il LAYER nel tuo Mapfile, vedrai che contiene anche un mucchio di proprietà e oggetti. Tra questi ci sono:

  • STATUS: definisce se il layer può essere disegnato (ON), non può essere disegnato (OFF) o è sempre disegnato (DEFAULT).

  • TYPE: il tipo di geometria che MapServer deve utilizzare quando rende i dati come immagine. Nel nostro Mapfile, i dati saranno disegnati come poligoni.

  • DATA: il nome del file di dati spaziali che questo layer utilizza, in questo caso uno shapefile.

  • CLASS: determina come disegnare un layer (stile). Tratterai questo oggetto in modo più dettagliato in seguito.

Nota

Una lista completa degli oggetti disponibili e delle proprietà che un Mapfile può avere può essere trovata nella pagina di documentazione di MapServer.

Rendering di un’immagine della mappa con MapServer usando una richiesta WMS GetMap

Nota

Cosa imparerai ? Imparerai come utilizzare per visualizzare un’immagine con i layer da un mapfile con MapServer usando una richiesta OGC WMS.

Apri un browser web e inserisci il seguente URL:

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Countries&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

Cosa significa quanto sopra? In parole semplici, si tratta di una richiesta GetMap di WMS| che dice a MapServer di «usare il seguente Mapfile per renderizzare i layer specificati come immagine png sulla base di alcuni parametri forniti dall’utente come dimensione dell’immagine, estensione geografica, proiezione, ecc.». Tutti i layer specificati nella proprietà «&LAYERS=…» che hanno STATUS ON nel Mapfile saranno visualizzati in aggiunta a tutti i layer con STATUS DEFAULT. Il risultato appare come il seguente:

../../_images/mapserver_map.png

Nota

Tutti i parametri della richiesta sono specifici del WMS, tranne «?map=/home/user/mapserver_quickstart.map», che è specifico per MapServer.

Rendering di un’immagine della mappa con MapServer usando la linea di comando

Anche se MapServer è orientato alle applicazioni web, può anche produrre immagini sulla linea di comando. Questo può essere utile se si sta cercando una mappatura ripetitiva, o durante il debug.

Apri un terminale (Applications ‣ System Tools ‣ Terminal Emulator) e digita:

shp2img -m mapserver_quickstart.map -o mymap.png

Se questo comando viene eseguito con successo, sei in grado di vedere la tua mappa renderizzata in file:///home/user/mymap.png.

Aggiungi un nuovo layer al Mapfile per servire uno Shapefile locale

Nota

Cosa imparerai ? Imparerai come aggiungere una nuova definizione di oggetto layer al tuo Mapfile.

Ora aggiungerai un nuovo layer al tuo Mapfile. Prima dell’ultima istruzione END nel Mapfile, aggiungi la seguente configurazione del layer:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_10m_lakes"
  CLASS
    STYLE
      COLOR 153 179 204
    END
  END
END

Ora hai 2 definizioni di layer nel tuo Mapfile. Nota che quello nuovo che hai appena aggiunto ha la proprietà «STATUS» impostata su «ON». Questo significa che, a meno che non lo richiedi specificamente, non sarà renderizzato.

Prendi la tua precedente richiesta WMS GetMap e aggiungi il tuo nuovo layer «Lakes» all’immagine resa. Devi semplicemente aggiungere il nome del nuovo layer alla lista delle proprietà «LAYERS»:

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Countries,Lakes&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

L’immagine resa da MapServer appare come la tua mappa precedente, ma con l’aggiunta dei laghi dal tuo nuovo layer:

../../_images/mapserver_lakes.png

Dai uno stile ad un layer usando le configurazioni di Mapfile

Nota

Cosa imparerai ? Vedrai un esempio di stilizzazione degli elementi all’interno di un layer a seconda di alcune delle sue proprietà di dati.

In un mapfile, un oggetto LAYER può contenere un numero infinito di oggetti CLASS. Questi sono usati per stilizzare gli elementi contenuti nel file di dati spaziali (DATA). Per esempio, se guardi più da vicino il tuo file di dati «ne_10m_lakes» usando uno strumento come ogrinfo, vedrai la geometria e le definizioni degli attributi che contiene. Questi valori di attributo possono essere usati come un modo per disegnare gli elementi all’interno di un set di dati in modo diverso usando più oggetti CLASS.

Nel tuo set di dati «ne_10m_lakes», hai un attributo ScaleRank, che sembra essere legato alla dimensione dei laghi. Puoi usarlo come un modo per visualizzare i laghi in modo diverso. Nell’oggetto LAYER, aggiungerai un altro oggetto CLASS appena prima del tuo attuale:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_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

Cosa fa il tuo nuovo oggetto CLASS? In pratica dice a MapServer di disegnare gli elementi che hanno la proprietà «ScaleRank» uguale a «0» o «1» con un contorno nero. Gli oggetti CLASS vengono sempre letti dall’alto verso il basso per ogni elemento da disegnare. Quando un elemento corrisponde all“«ESPRESSIONE» specificata in una classe, quella classe renderà l’elemento. Se l’elemento non corrisponde a una classe, viene controllata la classe successiva. Se un elemento non corrisponde a nessuna classe, allora non viene renderizzata affatto, ma se l’ultima classe in un layer non contiene alcuna ESPRESSIONE, allora quella classe funge da default. La proprietà «CLASSITEM» del LAYER dice a MapServer quale attributo utilizzare nella valutazione delle ESPRESSIONI definite negli oggetti CLASS.

Il risultato di questa nuova aggiunta dovrebbe visualizzare i grandi laghi nella tua immagine della mappa resi con un contorno nero:

../../_images/mapserver_lakes_scalerank.png

Nota

Per saperne di più su EXPRESSIONS in MapServer.

Pubblica i tuoi dati come WMS (Web Map Service) OGC

MapServer supporta diversi standard OGC come OGC WMS, WFS o WCS. Con OGC WMS puoi pubblicare i tuoi dati come Map Service e integrare il servizio in un Desktop GIS come QGIS o in un Web Client come OpenLayers o Mapbender.

Usare QGIS Desktop per caricare i tuoi WMS OGC

  1. Start QGIS via Geospatial ‣ Desktop GIS ‣ QGIS Desktop

  2. Go to Layer ‣ Add Layer ‣ Add WMS/WMTS Layer.

  3. Fare clic sul pulsante Nuovo e aggiungi un nome e l’URL del servizio

  4. Salva le tue impostazioni:

    http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.3.0

Poi puoi connetterti al tuo servizio e aggiungere uno o più layer del servizio al tuo progetto QGIS. Se scegli il layer con l’ID 0 puoi caricare l’intero servizio con tutti i layer in una volta sola.

../../_images/mapserver_load_wms_to_qgis.png

E ora?

Questo è un semplice esempio, ma si può fare molto, molto di più. Il sito web del progetto MapServer contiene molte risorse per aiutarti ad iniziare. Qui ci sono alcune risorse da controllare:

  • Leggi la Introduzione a MapServer.

  • Dai un’occhiata al MapServer Tutorial che contiene altri esempi di Mapfile.

  • Controlla il OGC Support and Configuration per saperne di più sugli standard OGC in MapServer (WMS, WFS, SLD, WFS Filter Encoding, WCS, SOS, ecc.)

  • Sei pronto ad usare MapServer? Allora unisciti alla comunità sulla Mailing Lists per scambiare idee, discutere potenziali miglioramenti del software e fare domande.