This is an old revision of the document!
Table of Contents
MapServer
Pacchetti installati su Debian Sarge:
- cgi-mapserver
- mapserver-bin
- mapserver-doc
- perl-mapscript
- python-mapscript
- php4-mapscript (da pkg-grass.alioth.debian.org, non c'è in testing.)
Una introduzione: MapServer 5.x Tutorial.
CGI MapServer
Lo script mapserv
è l'eseguibile CGI del pacchetto MapServer, accetta parametri GET e POST e viene usato come motore per generare singole immagini o complesse pagine web interattive. Si può fare un test per vedere se MapServer funziona in questo modo: preparare un MapFile di nome /var/www/hello-world.map
con il seguente contenuto:
MAP NAME HELLO STATUS ON EXTENT 0 0 4000 3000 SIZE 400 300 IMAGECOLOR 255 200 255 WEB IMAGEPATH "/tmp/" IMAGEURL "/tmp/" END LAYER NAME "credits" STATUS DEFAULT TRANSFORM FALSE TYPE ANNOTATION FEATURE POINTS 200 150 END TEXT 'Hello World!' END CLASS LABEL TYPE BITMAP COLOR 0 0 0 END END END END
Con il browser si richiede la pagina http://host/cgi-bin/mapserv?map=/var/www/hello-world.map&mode=map
. Lo script CGI genera al volo l'immagine, in questo caso un box 400 x 300 pixel con un'etichetta di testo al centro.
In questo caso lo script CGI ha ricevuto come parametri GET il nome del file .map
che definisce l'immagine da generare e il parametro mode=map
che indica di restituire semplicemente l'oggetto bitmap, senza la pagina interattiva predefinita (mode=browse
).
MapFile
Un MapFile è indispensabile per generare una mappa: definisce gli oggetti che verranno visualizzati e altri dettagli della mappa stessa (dimensioni, colori, ecc.). Gli oggetti sono organizzati in strati (layer) che vengono sovrapposti. La sintassi di un MapFile è spiegata nella MapFile Reference. Qui abbiamo l'indice della documentazione.
Anche il sito umn.mapserver.ch ha una buona guida sui mapfile.
MapFile con parametri
È possibile passare a run-time alcuni parametri al mapfile, tramite i parametri della richiesta inviata al CGI-BIN. Vedere la pagina Run-time Substitution della documentazione.
Ad esempio è possibile definire un MAP.LAYER.FILTER
di questo tipo:
FILTER ("multimedia = '%multimedia%' and seats >= %nseats% and sound = '%sound%')
Nella query CGI sarà sufficiente aggiungere i parametri multimedia=yes&seats=100&sound=yes
. Non tutti i parametri del mapfile accetta la sostituzione di variabile, ecco l'elenco:
- LAYER.DATA
- LAYER.TILEINDEX
- LAYER.CONNECTION
- LAYER.FILTER
- CLASS.EXPRESSION
Se il prametro viene usato per comporre una query SQL (come nell'esempio precedente) questa possibilità espone al rischio di SQL injection. Per evitare questo rischio si definiscono i pattern di validazione per ciascuna variabile. Contestualmente è possibile definire dei valori di default per le variabili che non fossero presenti nella query:
METADATA 'multimedia_validation_pattern' '^yes|no$' 'sound_validation_pattern' '^yes|no$' 'nseats_validation_pattern' '^[0-9]{1,3}$' 'default_sound' 'yes' 'default_nseats' '5' 'default_multimedia' 'yes' END
Query su attributi
Quando si effettua una query sugli attributi di un layer nella richiesta CGI-BIN è possibile includere alcuni parametri per filtrare il risultato della ricerca:
mode |
---|