Project logo OSGeo Project

Guida rapida su MapServer

MapServer è un’applicazione server Open Source <http://www.opensource.org> che ti permette di pubblicare immagini di mappe geografiche e dati vettoriali attraverso internet utilizzando standards OGC come WMS e WFS.

Questa guida rapida descrive come:

Configura MapServer utilizzando il file di configurazione “mapfile”

Note

Cosa imparerò? In questa sezione imparerai cos’è un mapfile e come configurarlo per permettere a MapServer di restituire uno shapefile come immagine usando una richiesta WMS.

Cos’è un MapFile?

Il Mapfile è il file di configurazione che MapServer usa per rappresentare dati geospaziali come immagini o dati vettoriali. Il suo scopo principale è di definire quali layer possono essere rappresentati, come leggere i dati necessari e come restituirli (es. color, symbol, label, etc…).


  1. Apri qualsiasi editor di testo (Mousepad è l’editor di testo di default sul dvd: Applications ‣ Accessories ‣ Mousepad).
  2. Crea il file “mapserver_quickstart.map” nella tua directory home: /home/user/mapserver_quickstart.map

Inseriscici 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_enable_request "*"
    END
  END

  LAYER
    NAME "Admin 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

Note

L’esempio utilizza il dataset natural earth, che è già installato nel dvd: ~/data/natural_earth2 (percorso breve a /usr/local/share/data/natural_earth2)

Ogni oggetto in un mapfile inizia con il suo nome (per esempio MAP) e termina 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 rappresentare. Nel nostro mapfile abbiamo per il momento definito un solo layer.

Dai uno sguardo ad alcuni degli oggetti (e proprietà) definiti nel nostro mapfile:
  • EXTENT : definisce la bounding box di default per questa configurazione
  • LAYER : definisce l’accesso e mostra le proprietà per un dataset spaziale. Aggiungeremo un altro layer in seguito.
  • SHAPEPATH : definisce un percorso di base per i dati basati sul file (es. shapefiles o immagini tiff).

Se osserviamo più da vicino il LAYER nel nostro mapfile, noteremo che contiene una serie di proprietà e oggetti. Tra questi:

  • STATUS : se il layer può essere rappresentato (ON), non può essere rappresentato (OFF) o se deve essere sempre rappresentato (DEFAULT).
  • TYPE : il tipo di geometria che MapServer deve utilizzare quando riproduce i dati come un immagine; nel nostro mapfile i dati saranno rappresentati come polygons.
  • DATA : il nome del file di dati spaziali che questo layer, in questo caso uno shapefile.
  • CLASS : determina come rappresentare un layer (styling). Affronteremo questo oggetto con maggior dettaglio più avanti.

Note

Una lista completa degli oggetti e delle proprietà disponibili che può contenere il Mapfile si trova nella documentazione di MapServer.

Riprodurre una immagine di una mappa con MapServer usando la linea di comando

Nonostante MapServer sia orientato verso le applicazioni web, può anche produrre immagini statiche tramite la linea di comando. Questo può essere utile se siete alla ricerca di una mappatura ripetitiva o durante il debugging.

Apri un terminale (Applications/Accessories/Terminal Emulator) e digita

shp2img -m mapserver_quickstart.map -o mymap.png

Se il comando viene eseguito con successo potrai vedere la tua mappa nel /home/user/mymap.png .

Riprodurre una mappa immagine con MapServer usando una richiesta WMS GetMap

Note

Cosa imparerò? Imparerai come riprodurre un immagine con layer dal mapfile con MapServer utilizzando una richiesta OGC WMS.

Apri un web browser e inserisci l’URL seguente:

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

Cosa significa quanto sopra? In parole semplici è un Web Map Service (WMS) La richiesta GetMap che dice a MapServer di “usare il mapfile seguente per riprodurre i layer specificat come un’immagine png sulla base di alcuni parametri forniti dall’utente come la dimensione dell’immagine, * *l’estensione geografica, proiezione, ecc.” Tutti i layer specificati nella proprietà “&LAYERS=…” che hanno STATUS ON nel mapfile insieme a tutti i layer con STATUS DEFAULT saranno riprodotti. Il risultato dovrebbe assomigliare al seguente:

../../_images/mapserver_map.png

Note

tutti i parametri della richiesta sono specifici del WMS eccetto “?map=/home/user/mapserver_quickstart.map”, che è specifico di MapServer.

Aggiungere un nuovo layer al mapfile per fornire uno shapefile locale

Note

Cosa imparerò? Imparerai ad aggiungere un nuovo oggetto layer al tuo mapfile.

Aggiungeremo un nuovo layer al mapfile. Dopo l’ultima dichiarazione END nel mapfile, aggiungi la configurazione del layer seguente:

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

Ora abbiamo definito due layer nel nostro mapfile. Si noti che questo nuovo layer che abbiamo appena aggiunto ha la proprietà “STATUS ON”. Ciò significa che se non viene specificatamente richiesto, non sarà restituito.

Prendiamo la nostra precedente richiesta WMS GetMap e aggiungiamo il nostro nuovo layer “Lakes” all’immagine riprodotta. Abbiamo semplicemente bisogno di aggiungere il nome del nuovo layer alla lista della proprietà “LAYERS”, in questo modo:

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

L’immagine restituita da MapServer assomiglia alla nostra mappa precedente ma con l’aggiunta dei laghi del nostro nuovo layer:

../../_images/mapserver_lakes.png

Definire lo stile di un layer usando la configurazione del mapfile

Note

Cosa imparerò? vedrai un esempio di elementi di stile all’interno di un layer che dipendono da alcune sue proprietà dei dati.

In un MapFile, un layer può contenere un infinito numero di oggetti CLASS. Questi sono utilizzati per definire lo stile degli elementi contenuti nel file di dati spaziali (DATA). Ad esempio se guardiamo più da vicino il file di dati “ne_10m_lakes” usando uno strumento come ogrinfo, vedremo la definizione delle geometrie e degli attributi che contiene. I valori di questi attributi possono essere utilizzati come un mezzo per rappresentare diversamente gli elementi contenuti in dataset utilizzando diversi oggetti CLASS.

Nel nostro dataset “ne_10m_lakes”, abbiamo un attributo ScaleRank, che sembra essere correlato alle dimensioni del lago. Possiamo utilizzare i valori di questo attributo per rappresentare in modo diverso i laghi. Nell’oggetto LAYER aggiungeremo un altro oggetto CLASS appena prima di quello corrente, in questo modo:

LAYER
 NAME "Lakes"
 STATUS DEFAULT
 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 nostro nuovo oggetto CLASS? Fondamentalmente dice a MapServer di rappresentare gli elementi che hanno la proprietà “ScaleRank” uguale a 0 o a 1 con un una linea di contorno nera. Gli oggetti Class sono sempre letti dall’alto al basso per ogni feature da rappresentare. Quando una feature risponde all‘“EXPRESSION” specificata in una class, questa class viene utilizzata per definire lo stile della feature stessa. Se la feature non risponde a una classe, viene valutata quella sucessiva. Se una feature non risponde a nessuna class allora non viene rappresentata e se l’ultima class in un layer non contiene alcun oggetto “EXPRESSION” allora questa classe viene assunta come di default. La proprietà “CLASSITEM” dice a MapServer quale attributo utilizzare per la valutazione dell’EXPRESSIONs definite nell’oggetto CLASS.

Il risultato di questa nuova aggiunta dovrebbe mostrare i laghi più grandi nella nostra mappa con una linea di contorno nera, come nell’immagine di seguito:

../../_images/mapserver_lakes_scalerank.png

Note

Impara di più su EXPRESSIONS in MapServer.

Che altro?

Questo è un esempio semplice ma puoi fare molto molto di più. Il sito web del progetto MapServer contiene molte risorse per aiutarti ad iniziare. Qui ce ne sono alcune da considerare in seguito: