User Tools

Site Tools


tecnica:gps_cartografia_gis:mapserver

This is an old revision of the document!


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
tecnica/gps_cartografia_gis/mapserver.1304497051.txt.gz · Last modified: 2011/05/04 10:17 by niccolo