Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione
a
MapServer
(versione 4.0.1)
Premessa
La presente dispensa vuole essere una breve panoramica su MapServer e sulle sue principali
caratteristiche, funzionalit e tecniche implementative. I paragrafi seguenti non devono per
essere letti come una guida d'uso del programma, per la quale si rimanda alla bibliografia ed in
particolare al sito di MapServer (http://mapserver.gis.umn.edu), ma come un insieme di nozioni e
suggerimenti per un primo approccio con il software e le relative modalit di utilizzo.
Tali suggerimenti, dopo una breve introduzione generale, si riferiscono direttamente a singoli
esercizi, aventi lo scopo di trattare, sia dal punto di vista dell'utente finale, sia dal punto di vista
dell'implementatore, le funzioni di base di MapServer.
-1(Creative Commons by-nc-sa 3.0)
Polismaker (11/02/2005)
Sommario
La dispensa si articola in 4 paragrafi introduttivi e in 15 brevi esercizi, come riportato qui sotto:
A
MapServer
Semplice visualizzazione
Classificazione di un layer
Pagina di inizializzazione
10 Legenda
11 Barra di scala
12 Carta generale di riferimento
13 Attivazione/disattivazione di layer
14 Interrogazioni puntuali
15 Interrogazioni multiple
Bibliografia
Polismaker (11/02/2005)
A. MapServer
MapServer un ambiente di sviluppo che consente la realizzazione di applicazioni web per il
caricamento, la visualizzazione e la consultazione di dati cartografici e non, provenienti da sistemi
GIS. Con queste parole ci si riferisce a MapServer non solo come al software deputato
allinterazione con il server web per la creazione della carta poi presentata all'utente, ma anche a
tutto linsieme di studi volti al potenziamento delle funzionalit del programma e alla sua
interazione con altri applicativi disponibili quali DBMS (ad esempio Oracle, Sybase, MySQL,
PostgreSQL) o linguaggi di programmazione (come Perl, Python, PHP, Tk/Tcl, Guile, Java),
secondo lottica di work in process che contraddistingue i software open source, di cui MapServer
un significativo esempio.
MapServer fu in origine realizzato nellambito del progetto ForNet ad opera dellUniversity of
Minnesota (UMN), della NASA (National American Space Agency) e del Minnesota Department of
Natural Resources (MNDNR) e in seguito sviluppato dallo stesso MNDNR e dal Minnesota Land
Manager Information Center (LMIC). Allo stato attuale, invece, la ricerca e lo sviluppo del
programma fanno parte del progetto TerraSIP, sponsorizzato dalla NASA e portato avanti
dallUMN e da un consorzio di enti che si occupano di gestione territoriale.
La versione ufficiale di MapServer attualmente disponibile, testata e corredata di documentazione
la 4.4.1 (al 7/2/2005); nel corso delle esercitazioni sar invece utilizzata la versione 4.0.1.
Dal sito ufficiale di MapServer (http://mapserver.gis.umn.edu) possibile scaricare sia i codici
sorgenti, compilabili su numerosi sistemi UNIX con una notevole possibilit di personalizzazione da
parte dellutente, sia binari precompilati per Windows.
Durante le esercitazioni sar utilizzato il binario precompilato per Windows ms401_gif_pg.zip: il
nome del file riflette le caratteristiche principali di questo binario, ossia la release (401), l'output
grafico (gif, Graphic Interchange Format) e la possibilit di accedere al DBMS PostgreSQL, tramite
PostGIS (pg).
Polismaker (11/02/2005)
il programma CGI;
il map file;
il template file.
Ognuno di essi svolge una funzione specifica: il programma CGI il vero e proprio eseguibile, il
map file serve per configurare le modalit di reperimento e presentazione dei dati, il template file
la pagina web che fa da interfaccia tra lutente e lapplicazione.
Come schematicamente illustrato nella figura seguente, spetta poi al server web e al browser
attivare lapplicazione e mettere in comunicazione il programma con lutente.
Per gli esercizi sar utilizzato come server web Apache HTTP Server 2.0.48, il cui studio
demandato ad altri corsi, e come browser Internet Explorer, sebbene questa scelta sia solo di
comodo, dal momento che un buon web GIS deve potersi interfacciare anche con altri browser
come Netscape, Opera, ecc...
MapServer pu anche essere utilizzato con architetture PHP o Java, ma questi argomenti non
verranno affrontati in questa sede.
Template file
Map file
programma
CGI
MapServer
server web
browser
Polismaker (11/02/2005)
B1. Il CGI
Un CGI (Common Gateway Interface) un programma che viene attivato da un server web e
che effettua elaborazioni di dati inviati dallutente tramite pagine web; i risultati delle elaborazioni
vengono poi presentati allutente sempre allinterno di pagine HTML; quindi quello che per i web
GIS viene definito motore del GIS.
In particolare il CGI di MapServer - denominato mapserv.exe per Windows e mapserv per
sistemi UNIX - riceve i valori di alcuni parametri cartografici selezionati dallutente col semplice uso
del mouse o tramite i moduli tipici del linguaggio HTML; lelemento che assolve a questa funzione
il template file, che una vera e propria interfaccia tra utente e applicazione, in cui di volta in
volta vengono definite nuove impostazioni e presentate le visualizzazioni cartografiche che ne
derivano.
Oltre allinterfaccia costituita dal template file, tuttavia, il CGI di MapServer riceve informazioni su
come creare carte o risultati di interrogazioni dei dati anche dal map file. In esso, infatti,
Polismaker (11/02/2005)
leseguibile trova le istruzioni che non sono affidate allutente o sulle quali lutente interviene non
agendo direttamente sul CGI ma attivando, disattivando o cambiando il codice del map file.
A scopo esemplificativo, possono essere citate le operazioni di navigazione della carta (pan, zoom)
come funzioni attivate direttamente dal template file, la definizione dei path di acquisizione dei dati
come impostazioni proprie del map file e le query o la selezione di layer come interazioni tra
template file e map file.
Le ultime versioni di MapServer, inoltre, permettono di modificare parti di codice del map file
attraverso lutilizzo di URL o moduli HTML implementati ad hoc nel template file: questa
caratteristica, che sar meglio specificata alla fine del paragrafo, rende il programma meno rigido e
permette allutente una maggiore possibilit di costruire la cartografia a cui interessato.
Nello specifico, il CGI utilizza i parametri ricevuti in ingresso dal template file e dal map
file per elaborare una serie di immagini temporanee, ossia la carta e altri oggetti
complementari (legenda, carta generale di riferimento, barra di scala), e per creare un file di
memorizzazione dei risultati delle query; ognuno di questi elementi viene salvato in una
cartella di file temporanei e visualizzato allinterno del template file in funzione di
come questo stato strutturato con la programmazione HTML.
Ogni volta che riceve dei dati di input, il CGI crea una nuova serie di file temporanei; essi
sono contraddistinti da un identificativo di sessione (id) e vengono denominati
secondo la seguente nomenclatura:
-
[nome], [id], [ext] corrispondenti a quelli della map della stessa sessione;
Polismaker (11/02/2005)
[object] : sigla identificativa del tipo di oggetto: leg per loggetto legend
(legenda), ref per loggetto reference map (carta generale di
riferimento) e sb per loggetto scalebar (barra di scala).
-
Per quanto riguarda il risultato grafico di unapplicazione CGI di MapServer, quello che viene
effettivamente visualizzato dal browser una versione temporanea dellinterfaccia costituita dal
template file: accanto alle impostazioni HTML fisse vengono inserite immagini che sono diverse
(per scala, elementi visualizzati, standard rappresentativi) ad ogni applicazione. Ne deriva che il
template file devessere inizializzato alla prima sessione di lavoro; per far ci occorre utilizzare una
pagina web di avvio del programma o specificare i parametri necessari all'interno dell'URL del
template file.
Per le esercitazioni prevista un'unica pagina di inizializzazione per tutti gli esercizi, denominata
inizia.html. Fanno eccezione gli esercizi da 1 a 7, che non utilizzano MapServer in modo
interattivo e quindi non necesitano di pagine di inizializzazione. L'esercizio 8, invece, dispone anche
di una pagina di inizializzazione propria.
La figura 3 mostra quanto avviene durante un processo di richiesta-risposta in un web GIS
costruito con MapServer in architettura CGI.
Per quanto riguarda il dettaglio delle modalit di invio dei parametri di elaborazione al programma
CGI, si possono distinguere tre tipologie di impostazioni:
-
i parametri CGI.
Polismaker (11/02/2005)
map file
Polismaker (11/02/2005)
La dichiarazione di un oggetto inizia con il nome delloggetto stesso e termina con la parola chiave
END; allinterno della dichiarazione vengono definite le caratteristiche delloggetto attraverso
coppie attributo-valore. Gli attributi sono contraddistinti da termini predefiniti propri di MapServer
mentre i valori possono essere costituiti da caratteri alfanumerici o stringhe e a rigore dovrebbero
essere scritti tra apici o doppi apici; per alcuni attributi, tuttavia, devono obbligatoriamente essere
omessi. Nel codice del map file inoltre possibile inserire righe di commento, che devono essere
introdotte dal simbolo #.
WEB
PROJECTION
LEGEND
LABEL
SCALEBAR
LABEL
FEATURE 1
POINTS 1
REFERENCE
FEATURE
POINTS
QUERYMAP
FEATURE f
POINTS p
MAP
LAYER 1
PROJECTION
STYLE 1
LAYER
CLASS 1
STYLE
LAYER n
CLASS
STYLE s
OUTPUT
FORMAT
LABEL
CLASS m
JOIN
L'esame delle principali caratteristiche del map file e degli oggetti in esso contenuti sar trattato
direttamente nei singoli esercizi.
Altri file ASCII vengono utilizzati in MapServer a supporto del map file: sono il fontset (cfr.
esercizio 6), che definisce i font TrueType da utilizzare nelle scritte, il symbolset (4), per l'impiego
di simboli grafici, e il world file (7), necessario per il caricamento di dati raster.
Polismaker (11/02/2005)
Polismaker (11/02/2005)
Polismaker (11/02/2005)
Polismaker (11/02/2005)
L' URL da scrivere nel browser per visualizzare inizia<Nx>.html, ossia la pagina da cui si potr
accedere agli esercizi, :
http://<mioserver>/polismaker/<Nx>/inizia<Nx>.html ,
con <mioserver>=geo21.como.polimi.it per i gruppi 21a, 21b, 21c, 21d, 21e.
e <mioserver>=geo5.como.polimi.it per i gruppi 5f, 5g, 5h, 5i, 5j.
La presentazione degli esercizi sar strutturata in modo da trattare applicazioni via via pi
complesse; a livello di utilizzo del CGI essa suddivisa in due passi successivi:
- gli esercizi dall'1 al 7 utilizzeranno il CGI solo per la generazione dell'immagine (da qui il
nome del primo esercizio), che un'immagine statica all'interno del template file: non sar quindi
possibile n navigarla n interrogarla; in questi primi sette esercizi si lavorer in particolar modo
sul map file e sulla sua configurazione e l'accesso al template file sar del tutto simile a quello ad
una normale pagina web (semplice link da inizia<Nx>.html);
- 13 (Creative Commons by-nc-sa 3.0)
Polismaker (11/02/2005)
- gli esercizi dall'8 al 15, invece, utilizzeranno il CGI come motore del GIS propriamente detto
e quindi le immagini generate dal CGI saranno navigabili e interrogabili; la configurazione del web
GIS si sposter perci anche sul lato template file, che potr essere attivato non pi come una
semplice pagina web ma tramite apposite pagine di inizializzazione o specificando nell'URL
parametri di ingresso.
Per gli esercizi da 1 a 7 saranno utilizzati il map file s<Nx>.map e il template file s_templ.map;
per gli esercizi successivi, invece, il map file sar d<Nx>.map e il template file d_templ.map.
Per tutti gli esercizi, map file e template file risiederanno nella cartella <Nx>.
Per l'editing dei map file e dei template file si utilizzer un normale editor di testo.
Non sar trattato l'editing di pagine web in HTML: saranno considerati solo i tag necessari al
funzionamento del web GIS.
Nella dispensa, all'inizio di ogni esercizio ne saranno specificati l'obbiettivo (introdotto dal
simbolo) e le operazioni da effettuare per predisporre i file necessari ().
Per semplicit, poi, saranno utilizzate anche le icone
Polismaker (11/02/2005)
1. Semplice visualizzazione
Obbiettivo: generare una carta con il CGI sulla base delle impostazioni fornite dal map file e
visualizzarla in una pagina HTML (template file).
Cartella
File
Operazione
1)
Da _arc_/template copiare in
<Nx> il file s_templ.html
2)
<Nx>
Nel template file, l'unico tag di interesse per MapServer <IMG> nella sezione <!--GIS-->
del file: in esso si specifica l'immagine, ossia la carta, da caricare. Come campo SRC, infatti, si
utilizza:
"http://<mioserver>/cgi-bin/
mapserv.exe?map=..\htdocs\polismaker\<Nx>\s<Nx>.map&mode=map"
con il quale si invia una richiesta al CGI (http://<mioserver>/cgi-bin/ mapserv.exe)
passando come parametri (parametri CGI) il map file, con il percorso per accedervi a partire
dalla cartella del CGI (map=..\htdocs\polismaker\<Nx>\s<Nx>.map) e la modalit di
utilizzo dell'immagine, in questo caso map (mode=map), che fa s che venga ritornata al template
file l'immagine creata.
Ogni volta che si passano parametri CGI al motore del GIS, occorre frapporre il carattere ? tra
l'indirizzo del CGI e il nome del prima parametro passato e separare ciascun parametro con il
carattere & senza spazi.
Sostituire inoltre a <Nx> il nome della propria cartella di lavoro nella sezione <!PULSANTI DI
LINK-->.
Polismaker (11/02/2005)
NAME s<Nx>
- l'unit di misura:
UNITS meters
- l' estensione spaziale (MBR iniziale) della carta in funzione delle coordinate1 orizzontali e
verticali minime e massime (in tutto quattro valori):
EXTENT 1496000 5062000 1512000 5078000
- le dimensioni in pixel dellimmagine (larghezza e altezza):
SIZE 400 400
- lo shapepath, ossia il percorso rispetto alla posizione del map file della cartella contenente i dati
di tipo shapefile utilizzati nellapplicazione
SHAPEPATH "..\_arc_\dati\shpf"
- il colore di sfondo dell'immagine, espresso secondo la convenzione RGB decimale (in questo
caso l'immagine avr uno sfondo bianco)
IMAGECOLOR 255 255 255
A questo punto occorre chiudere l'oggetto Map con la parola chiave END, eventualmente
accompagnata da un commento del tipo # Fine dell'oggetto Map , che identifichi l'END in
questione rispetto ad altri END che potrebbero essere presenti nel map file come terminazione di
altri oggetti.
Definito l'oggetto Map e le caratteristiche globali della carta, occorre caricare i dati geografici
utilizzando uno o pi oggetti Layer. In questo esercizio si carichi un solo layer per le linee
ferroviarie della zona di Como, utilizzando il codice seguente:
LAYER
NAME "Ferrovia"
TYPE line
STATUS default
DATA "ferrovia"
CLASS
COLOR 0 0 0
END
END
Ogni volta che si inserisce un oggetto Layer, occorre specificare:
- NAME: nome identificativo del layer, tramite il quale il template file e il programma CGI si
riferiscono al layer e ai dati in esso contenuti;
- DATA: attributo necessario per caricare il dato nel layer: in questo esercizio si vuole caricare uno
shapefile e quindi basta specificarne il nome (cos come compare all'interno dello shapepath) senza
1
In tutti gli esercizi saranno utilizzate le coordinate Gauss-Boaga; questa scelta deriva dai dati cartografici utilizzati come
esempio.
Polismaker (11/02/2005)
estensione; per altri tipi di file occorre specificare anche l'estensione o introdurre gli attributi
CONNECTION e CONNECTIONTYPE.
- STATUS: stato corrente di attivazione del layer, secondo tre valori predefiniti, default (il layer
viene sempre visualizzato), on (il layer viene visualizzato previa attivazione dal template file) e
off (il layer non viene visualizzato);
- TYPE: tipologia del dato caricato nel layer; pu essere point (entit vettoriale di tipo punto),
line (entit vettoriale di tipo linea), polygon (entit vettoriale di tipo area), raster (dato
raster) e altre modalit non propriamente corrispondenti a tipologie di dato ma a esigenze di
visualizzazione particolari (circle, annotation e query);
Inoltre, come si pu vedere l'oggetto layer creato contiene al suo interno un oggetto Class,
necessario per specificare la resa grafica del layer, in questo caso data dalla sola indicazione del
colore: i confini del parco saranno disegnati in nero.
La definizione dell' oggetto Class indispensabile per i layer di dati vettoriali, facoltativa per quelli
costituiti da raster.
Si riprovi ora a visualizzare s_templ.html, verificando come la carta venga effettivamente creata.
Polismaker (11/02/2005)
First Out): lultimo layer ad essere dichiarato viene disegnato come strato superiore della carta.
Pertanto occorre inserire i layer opportunamente; in alternativa, provare a rendere trasparente il
layer di poligoni, dando all'attributo che ne gestisce il colore il valore -1 -1 -1.
3. Classificazione di un layer
Obbiettivo: visualizzare un layer differenziando la resa grafica delle entit che lo costituiscono
in funzione di particolari criteri di classificazione.
Polismaker (11/02/2005)
Caso a. Classificazione del campo "Nome" visualizzando i comuni di Gironico e Orsenigo, notando
come il valore di EXPRESSION sia case sensitive.
Caso b. Classificazione del campo "Nome" visualizzando nella prima classe il comune di Gironico e
nella seconda tutti gli altri comuni (per questa seconda classe il valore di EXPRESSION dev'essere
uguale a /./.)
Polismaker (11/02/2005)
Caso c. Classificazione del campo "Popol" (popolazione), considerando nella prima classe i
comuni con pi di 10000 abitanti, nella seconda quelli con popolazione minore o uguale a 10000
abitanti.
In questo caso la sintassi da utilizzare per la classificazione diventa:
EXPRESSION ([attributo]OPERATORIvalore)
si noti come lintera espressione debba essere compresa tra parentesi tonde, mentre il nome
dellattributo (case sensitive) tra parentesi quadre.
Nel caso della prima classe dellesempio considerato si ha:
EXPRESSION ([Popol]>10000)
Polismaker (11/02/2005)
Cartella
File
Operazione
1)
<Nx>
2)
graffont
Spesso COLOR e OUTLINECOLOR non sono sufficienti per una resa grafica accettabile dei layer
sulla carta, in particolare per i layer di tipo point (come nel caso del layer Stazioni).
Per ovviare a questa carenza possibile utilizzare dei simboli grafici, costruiti ad hoc o generati
utilizzando immagini gi esistenti.
Tali simboli non vengono definiti all'interno del map file ma in un apposito file, detto symbolset e
denominato Symbols.sym, che risulta un'appendice del map file stesso. Per associare un
symbolset al map file basta inserire l'attributo SYMBOLSET nell'oggetto Map con il nome e il
percorso del symbolset rispetto alla posizione del map file.
Nel nostro caso implementare Symbols.sym all'interno della cartella graffont; pertanto si ha
SYMBOLSET "graffont\Symbols.sym".
Si voglia ora utilizzare un simbolo per alcuni layer del map file.
Simbolo 1. Creare un simbolo per i comuni con meno di 10000 abitanti del layer "Comuni",
utilizzando l'immagine camp.gif gi esistente nella cartella symbols. Occorre perci creare un
oggetto Symbol, introdotto dalla parola chiave SYMBOL e concluso dalla parola chiave END, in
Symbols.sym. All'interno dell'oggetto occorre Symbol specificare gli attributi:
- NAME, nome del simbolo, per semplicit 's1';
- TYPE, tipo di simbolo, che in questo caso assume valore pixmap (simbolo derivante da
un'immagine esistente); tuttavia, anche possibile creare il simbolo direttamente nel symbolset.
- IMAGE, percorso (rispetto a Symbols.sym) e nome dell'immagine utilizzata per la creazione del
simbolo, in questo caso '..\..\_arc_\symbols\camp.gif'. Si noti come, partendo dalla
posizione di Symbols.sym, si debba prima uscire dalla cartella graffont (..\) e dalla cartella <Nx>
(..\), quindi entrare nelle cartelle _arc_ e symbols.
Per associare il simbolo al layer basta posporre l'attributo SYMBOL all'attributo COLOR nell'oggetto
Class del layer "Comuni". Il valore di SYMBOL pu essere o il nome del simbolo o un numero
corrispondente alla posizione occupata in Symbols.sym.
Polismaker (11/02/2005)
a) Si vuole inserire un'etichetta che visualizzi sulla carta il nome di un comune. Occorre perci
operare nel layer "Comuni", specificando l'attributo che si vuole etichettare e definendo la vera e
propria etichetta.
La prima operazione gestita da LABELITEM che, analogamente a
CLASSITEM per la
classificazione di un layer, ha come valore il nome del campo da interrogare: in questo caso,
quindi, occorre scrivere LABELITEM "Nome".
L'etichetta, invece, viene definita all'interno dell'oggetto Class che si vuole etichettare,
specificando, compresi tra la parola chiave LABEL e l'END di chiusura dell'oggetto:
- TYPE: tipo di font utlizzato per l'etichetta, in questo caso si consideri BITMAP2.
- SIZE: dimensione del testo; per font di tipo bitmap i valori possibili per questo attributo
sono small (da utilizzare in questo esempio), medium e giant.
- COLOR: colore del testo dell'etichetta, in questo caso (255 0 140) per i comuni con
popolazione maggiore o uguale a 10000 abitanti e (200 200 200) per gli altri.
- 22 (Creative Commons by-nc-sa 3.0)
Polismaker (11/02/2005)
- POSITION: posizione dell'etichetta rispetto alla feature etichettata; i valori possibili sono
dati da una coppia di caratteri alfanumerici che esprimono nell'ordine la posizione nel senso
delle ordinate e la posizione nel senso delle ascisse: per la prima i valori sono U (in alto), C
(al centro), L (in basso), per la seconda L (a sinistra), C (al centro) e R (a destra). Nel
nostro caso si utilizzi POSITION CC, che disegna l'etichetta centrata sulla feature. inoltre
disponibile anche il valore auto, che posiziona automaticamente l'etichetta in modo da non
interferire con le altre etichette presenti.
b) Etichettare il nome delle stazioni FS con un'etichetta bitmap, con testo blu scuro (0 0 134) e
dimensioni medie, posizionata in alto a destra.
c) Etichettare le stazioni FNM con un'etichetta bitmap, con testo verde (0 134 0) e dimensioni
medie, posizionata automaticamente.
per
l'ombreggiatura
del
testo,
BACKGROUNDSHADOWCOLOR
per
quella
Polismaker (11/02/2005)
Cartella
File
Operazione
1)
graffont
C:\Programmi\Apache~1\Apache2\htdocs\polismaker\_arc_\fonts\arial.ttf
Polismaker (11/02/2005)
Polismaker (11/02/2005)
per il nero,
([pixel] = 1)
per il bianco.
L'attributo COLOR di ogni classe permette di settare i nuovi colori: cambiare il nero in 255 210 0 e
il bianco in 155 155 155.
Polismaker (11/02/2005)
NOTA. Dallesercizio 8 in poi, il template file sar utilizzato in modo interattivo: le carte potranno
infatti essere aggiornate, navigate, interrogate e modificate, secondo le normali funzionalit di un
web GIS. Pertanto, lanalisi dei file di configurazione si sposter maggiormente sui template file.
8. Pagina di inizializzazione
Obbiettivo: inizializzare unapplicazione interattiva di MapServer.
Cartella
File
Operazione
1)
<Nx>
Da _arc_/template copiare in
<Nx> il file es8_iniz.html
2)
<Nx>
es8_iniz.html
3)
<Nx>
Da _arc_/template copiare in
<Nx> il file d_templ.html
4)
<Nx>
Modificare l'estensione della carta con il valore 1497000 5066000 1510000 5079000,
assegnare a IMAGECOLOR il valore 215 215 215 e mettere a OFF lo STATUS dei file raster.
- 27 (Creative Commons by-nc-sa 3.0)
Polismaker (11/02/2005)
Affinch il template file sia richiamato da MapServer ogni volta che il CGI legge il map file,
necessario definire nel map file loggetto Web, nel quale vanno specificati gli attributi:
-
TEMPLATE, con il nome del template file e il suo percorso rispetto alla posizione del map
file;
IMAGEPATH e IMAGEURL, con il percorso della cartella dove MapServer andr a porre i
file temporanei creati ad ogni sessione di lavoro.
d_templ.html
IMAGEPATH
C:\Programmi\Apache~1\Apache2\htdocs\tmp\
IMAGEURL
/tmp/
La pagina di inizializzazione serve per lanciare la prima sessione del web GIS creato con
MapServer.
Linizializzazione pu avvenire tramite una FORM o direttamente da un URL.
- Nel primo caso si costruisce una FORM che, con il metodo get (preferibile rispetto a put),
gestisca lazione di attivare il CGI mapserv.exe.
Perci nel codice HTML di es8_iniz.html si ha
<FORM METHOD="GET" ACTION="/cgi-bin/mapserv.exe">
<INPUT TYPE="hidden" NAME="map"
VALUE="..\htdocs\polismaker\<Nx>\d<Nx>.map">
<INPUT TYPE="submit" VALUE="CREA LA CARTA">
</FORM>
Dei due tag INPUT racchiusi nella FORM, il primo specifica al CGI, in modalit nascosta, il map
file da utilizzare (parametro CGI map); il secondo, invece, il pulsante di attivazione della FORM e
di invio delle informazioni al CGI.
- Nel caso in cui linizializzazione di MapServer avvenga tramite un URL, basta creare unancora
che abbia come riferimento esterno il CGI con il nome del map file passato come parametro:
<A HREF=http://<mioserver>/cgibin/mapserv.exe?map=..%5Chtdocs%5Cpolismaker%5C<Nx>%5Cd<Nx>.map
Questo metodo simile a quanto visto nei template file degli esercizi precedenti per la creazione
della carta. In questo caso, per, non viene specificato il parametro mode, poich la modalit di
utilizzo di MapServer indicata nel template file (d_templ.html), a cui il CGI fa riferimento
tramite loggetto Web del map file.
Polismaker (11/02/2005)
Per gli esercizi successivi non sar implementata una pagina di inizializzazione propria come per
lesercizio 8, in quanto la funzione di inizializzazione gi svolta da inizia<Nx>.html.
Verificare quanto detto nel codice HTML di inizia.html.
Sostituire inoltre a <Nx> il nome della propria cartella di lavoro nella sezione <!PULSANTI DI
LINK-->.
Il template file d_templ.html differente rispetto a quelli visti negli esercizi precedenti
poich deve gestire linterattivit utente-MapServer.
Perci, anche nel template file occorre definire una FORM, a cui faccia riferimento tutta la pagina e
che attivi il CGI mapserv.exe.
<FORM METHOD="GET" ACTION="/cgi-bin/mapserv.exe">
<INPUT TYPE="hidden" NAME="map"
VALUE="..\htdocs\polismaker\<Nx>\d<Nx>.map">
<INPUT TYPE="hidden" NAME="imgext" VALUE="[mapext]">
<INPUT TYPE="hidden" NAME="mode" VALUE="browse">
. . .
</FORM>
Oltre al map file (parametro CGI nascosto map), al CGI vengono passati i parametri CGI nascosti
mode e imgext. Il primo specifica la modalit di utilizzo del CGI, ossia browse, modalit di
navigazione; il secondo, invece, d al CGI lestensione della carta: il valore [mapext] impone
come estensione quella assegnata dallattributo EXTENT del map file.
Queste righe di codice sono presenti in tutti i template file degli esercizi dall8 in poi, poich sono
indispensabili per lutilizzo interattivo di MapServer.
Inoltre, presente il tag
<IMG SRC="[img]" ALT="Carta / Img" BORDER="1"> ,
a cui compete linserimento dellimmagine creata dal CGI ad ogni sessione di lavoro: il valore di
SRC
mapserv.exe.
Sostituire inoltre a <Nx> il nome della propria cartella di lavoro e <mioserver> il nome del
proprio server, ove necessario (cfr. le sezioni <!--ES.14 ... Z.14--> e <!PULSANTI DI
LINK-->).
Polismaker (11/02/2005)
Cartella
File
Operazione
1)
<Nx>
d_templ.html
Polismaker (11/02/2005)
Ci che gestisce la navigazione della mappa la modalit browse del parametro CGI mode,
assegnata con una variabile nascosta allinizio della FORM come descritto precedentemente.
Ci che lutente vede e usa per scegliere come navigare la carta sono invece i tre radio button dati
dai tag:
<INPUT TYPE="radio" NAME=zoomdir VALUE=0 [zoomdir_0_check]>
<INPUT TYPE="radio" NAME=zoomdir VALUE=1 [zoomdir_1_check]>
<INPUT TYPE="radio" NAME=zoomdir VALUE=-1 [zoomdir_-1_check]>
Questi tag assegnano un valore al parametro CGI zoomdir, che regola le modalit di navigazione
della carta: il valore 0 corrisponde al pan, 1
allo zoom in e -1
invece, invia al CGI tutte le impostazioni del map file, ripristinando cos lestensione in esso
definita.
Infine, se si vuole che la carta venga effettivamente navigata tramite il mouse, limmagine non
devessere inserita con il tag IMG, come per gli esercizi precedenti, ma con il tag INPUT, grazie al
quale il mouse diventa uno strumento di invio di informazioni al CGI:
<INPUT TYPE="image" NAME="img" SRC="[img]"> .
Polismaker (11/02/2005)
B FUNZIONE DI
ZOOM IN
A LA CARTA PRIMA
DELLO ZOOM IN
C LA CARTA DOPO
LO ZOOM IN
Polismaker (11/02/2005)
10. Legenda
Obbiettivo: inserimento di una legenda nel template file.
Cartella
File
Operazione
1)
<Nx>
d_templ.html
Linserimento di una legenda nel template file richiede innanzitutto che tale legenda venga
definita nel map file. Per fare ci, occorre inserire nel map file un oggetto Legend che contenga
le seguenti informazioni che il CGI utilizza per disegnare limmagine della legenda:
-
STATUS, stato della legenda: on legenda disegnata, off legenda non disegnata, embed
legenda disegnata allinterno della carta (on).
Inoltre, tramite un oggetto Label allinterno delloggetto Legend, viene settato lo stile del testo
da inserire in legenda (Arial 9 nero).
Creare loggetto Legend secondo le impostazioni indicate tra parentesi.
Per stabilire quali voci inserire in legenda, basta specificare un attributo NAME allinterno di un
qualsiasi oggetto Class, con lindicazione del testo da porre in legenda.
Ad esempio,
NAME Laghi
inserito nellunico oggetto Class del layer Laghi, fa comparire in legenda la voce Laghi.
Inserire in legenda tutte le classi dei layer Comuni e Stazioni e verificare lassenza di voci del
layer Ferrovia.
Provare a cambiare i valori di STATUS per loggetto Legend.
Nel template file linserimento della legenda richiede un semplice tag di inserimento immagine,
al quale si specifichi come sorgente la template reference [legend], come accade con il tag
<IMG SRC="[legend]" BORDER="0" ALT="Legenda">
presente in d_templ.html.
Polismaker (11/02/2005)
Cartella
File
Operazione
1)
<Nx>
d_templ.html
Analogamente a quanto visto per la legenda, linserimento di una barra di scala nel template file
richiede un oggetto Scalebar nel map file. I suoi attributi sono:
-
STATUS, stato della barra di scala: on barra di scala disegnata, off non disegnata (nel
caso in esame: on);
INTERVALS, numero di tacche in cui deve essere ripartita la barra di scala (4);
Inoltre, tramite un oggetto Label allinterno delloggetto Scalebar, viene settato lo stile del testo
da inserire nella barra di scala (small nero; non occorre specificare TYPE, FONT e POSITION).
Creare loggetto Scalebar secondo le impostazioni indicate tra parentesi, provando a cambiare i
valori di STYLE e degli attributi di colorazione.
Nel template file linserimento della barra di scala richiede un semplice tag di inserimento
immagine al quale si specifichi come sorgente la template reference [scalebar]: ad ogni
sessione di lavoro il CGI sostituir a questa variabile limmagine corrispondente.
Polismaker (11/02/2005)
Cartella
File
Operazione
1)
<Nx>
d_templ.html
Analogamente a quanto visto per legenda e barra di scala, linserimento nel template file di una
carta generale di riferimento (detta anche reference map o overview map), richiede un
oggetto Reference nel map file.
I suoi attributi sono:
-
STATUS, stato della carta generale di riferimento: on disegnata, off non disegnata (nel
caso in esame: on);
IMAGE,
nome
della
carta
da
utilizzare
come
carta
generale
di
riferimento
(C:\Programmi\Apache~1\Apache2\htdocs\polismaker\_arc_\refmap\refsit.gif);
-
SIZE, dimensioni in pixel della carta generale di riferimento (150 150): importante, per
un corretto utilizzo della carta generale di riferimento, che le sue dimensioni siano
proporzionali a quelle della carta;
Polismaker (11/02/2005)
Cartella
File
Operazione
1)
<Nx>
d_templ.html
Affinch un layer sia attivabile o disattivabile dallutente nel template file, occorre assegnare il
valore on allattributo STATUS di tale layer.
Rendere tutti i layer attivabili/disattivabili dal template file, tranne Laghi.
Se dal template file si vuole gestire lattivazione non tanto di un singolo layer, ma di un gruppo di
layer, occorre aggiungere, agli oggetti Layer che si vogliono raggruppare in un unico gruppo di
layer, lattributo GROUP con il nome del gruppo.
Raggruppare nel gruppo draster i quattro layer dei dati raster.
Polismaker (11/02/2005)
Nel template file lattivazione e la disattivazione di layer (layer toggling) pu essere gestita ad
esempio mediante lutilizzo di checkbox:
<INPUT
<INPUT
<INPUT
<INPUT
TYPE="checkbox"
TYPE="checkbox"
TYPE="checkbox"
TYPE="checkbox"
NAME="layer"
NAME="layer"
NAME="layer"
NAME="layer"
VALUE="Comuni" [Comuni_check]>
VALUE="Stazioni" [Stazioni_check]>
VALUE="Ferrovia" [Ferrovia_check]>
VALUE="draster" [draster_check]>
Il parametro CGI sottoposto a checkbox layer, al quale vengono assegnati i nomi dei layer
(primo, secondo e terzo caso) o dei gruppi di layer (quarto caso).
Affinch il layer sia correttamente specificato, il valore passato al parametro CGI layer devessere
quello dellattributo NAME delloggetto Layer del map file per i layer singoli, quello dellattributo
GROUP per i gruppi di layer.
Come accade per il parametro CGI zoomdir (cfr. esercizio 9), possibile mantenere in memoria il
nome dei layer, riportandolo a fine tag tra parentesi quadre con il suffisso _check.
Linvio al CGI del nome dei layer da attivare o disattivare effettuato tramite clic del mouse sulla
carta o mediante il tasto submit.
Polismaker (11/02/2005)
Cartella
File
Operazione
1)
<Nx>
Da _arc_/template copiare in
<Nx> il file qy.html
2)
<Nx>
Da _arc_/template copiare in
<Nx> il file queryvuota.html
3)
<Nx>
d_templ.html
In genere, quando si vuole interrogare una carta si rendono necessari pi template file: il
template file principale (d_templ.html nel caso di questo esercizio), che permette di
selezionare le feature da interrogare mantenendo le funzioni dei template file viste finora; uno o
pi query template file (in questo esercizio lunico query template file necessario qy.html),
che riporta i risultati dellinterrogazione; un eventuale template file per interrogazioni vuote
(queryvuota.html).
Nel template file principale d_templ.html occorre specificare innanzitutto quale modalit
di interrogazione si vuole utilizzare e quali layer si vogliono interrogare.
La scelta della modalit di interrogazione avviene tramite il parametro CGI mode, finora presente
negli esercizi con i due valori map (creazione della carta) e browse (navigazione della carta).
I valori di mode che permettono di interrogare la carta sono i seguenti:
-
query: interrogazione di una feature della carta, selezionata tramite clic del mouse;
nquery: interrogazione di pi feature della carta, selezionate con il mouse o con un rettangolo
di selezione definito dallutente;
itemquery: interrogazione degli attributi di una feature della carta mediante una stringa di
ricerca (qstring);
itemnquery: interrogazione degli attributi di pi feature della carta mediante una stringa di
ricerca (qstring);
Polismaker (11/02/2005)
La scelta del layer da interrogare viene comunicata al CGI tramite linvio del parametro qlayer,
avente come valore il nome del layer da sottoporre a query.
In questo esercizio si faccia uninterrogazione di tipo query, scegliendo il layer da interrogare con
un pulsante radio:
<INPUT TYPE="radio" NAME="mode" VALUE="query" CHECKED>
<INPUT TYPE="radio" NAME="qlayer" VALUE="Comuni"> Comuni (POLYGON)
<INPUT TYPE="radio" NAME="qlayer" VALUE="Stazioni"> Stazioni (POINT)
In realt, come si pu vedere dal codice riportato qui sopra, solo gli ultimi tre INPUT
appartengono al radio button della scelta del layer da interrogare. Il primo INPUT, infatti, un
pulsante radio sul parametro CGI mode, che permette di scegliere se interrogare (mode=query) o
navigare (mode=browse) la carta.
Nel query template file qy.html vengono riportati i risultati dellinterrogazione, ossia il nome
della feature interrogata, le sue principali caratteristiche e la query map, cio una carta nella quale
sia evidenziata la posizione della feature interrogata.
Il nome della feature e le sue caratteristiche sono valori che il CGI sostituisce ad apposite
template reference incluse nel codice HTML del query template file. Alcune di esse sono
template reference proprie di Map Server, altre sono i nomi dei campi della tabella associata al
dato.
Nellesercizio in esame appartengono al primo tipo le template reference:
[cl]
nome del layer interrogato (nome del layer a cui appartiene la feature interrogata)
[nr]
Polismaker (11/02/2005)
Polismaker (11/02/2005)
STYLE, stile della query map; i valori possibili sono: normal (la query map viene disegnata
come una normale carta, senza che le feature interrogate vengano evidenziate), hilite (di
uno stesso layer, le feature interrogate vengono evidenziate, quelle non interrogate vengono
disegnate secondo le impostazioni del corrispondente oggetto Layer) e selected (di uno
stesso layer vengono disegnate solo le feature interrogate).
COLOR, colore con cui evidenziare le feature interrogate (provare con magenta, 255 0 255).
Creare una query map di dimensioni 300x300 pixel e verificare tramite browser le differenti
versioni stilistiche. In particolare, si noti come hilite non funzioni se le feature interrogate sono
rappresentate mediante simboli grafici; provare a togliere i simboli per verificarlo in questo
esercizio.
- 41 (Creative Commons by-nc-sa 3.0)
Polismaker (11/02/2005)
Cartella
File
Operazione
1)
<Nx>
Da _arc_/template copiare in
<Nx> il file i_qy.html
2)
<Nx>
Da _arc_/template copiare in
<Nx> il file qy_h.html
3)
<Nx>
Da _arc_/template copiare in
<Nx> il file qy_f.html
4)
<Nx>
d_templ.html
In questo esercizio si vuole interrogare un layer cercandone le feature che soddisfino un criterio
di ricerca stabilito sugli attributi delle feature stesse. Con un esempio, una possibile richiesta da
inviare al CGI potrebbe essere: dimmi tutti i comuni che hanno popolazione maggiore di 15000
abitanti.
Anche
in
questo
caso
linterrogazione
viene
formulata
nel
template
file
principale
(d_templ.html), mentre i risultati sono riportati nei query template file, con lopzione della solita
pagina queryvuota.html come template file per interrogazioni vuote.
- 42 (Creative Commons by-nc-sa 3.0)
Polismaker (11/02/2005)
Quando si lavora con query multiple, il numero dei risultati di uninterrogazione variabile. Per
questo motivo conviene ripetere per ogni risultato soltanto alcune delle template reference che
popolano un query template file e, pi in generale, soltanto il codice HTML che strettamente
necessario.
A tal fine MapServer permette di spezzare il codice HTML del query template file in tre tronconi: un
header, un query template file principale e un footer.
Nellheader e nel footer compaiono tutti gli elementi fissi del query template file, tra cui il nome
del layer interrogato, il numero totale di risultati e la query map.
Polismaker (11/02/2005)
Nel query template file principale, invece, sono inserite esclusivamente le template reference
che devono essere ripetute per ogni feature che risponde al criterio di ricerca dellinterrogazione:
in ultima istanza tali template reference non sono altro che i campi delle tabelle associate ai dati.
Si consideri ad esempio il query template file del layer Comuni: se sei comuni rispondono al
criterio di ricerca [Popol]>15000, ossia Popolazione maggiore di 15000 abitanti, si hanno:
Comuni (valore di [cl]), 6 (valore di [nr]) e la query map nellheader o nel footer;
[NOME], [PROVINCIA], [SUPERFICIE] e [POPOL] ripetute 6 volte con i valori corrispondenti
ai sei comuni.
Infine una puntualizzazione: header, footer e query template file principale non sono tre frame di
uno stesso frameset, ma sono veri e propri tagli di ununica pagina HTML, come si pu constatare
esaminando il codice dei tre file. Un esempio su tutti: il tag HTML viene aperto nellheader e chiuso
nel footer.
Sostituire a <Nx> il nome del proprio gruppo di lavoro in qy_h.html (2 sostituzioni) e in
qy_f.html (1 sostituzione).
Rispetto ad uninterrogazione in modalit query, nulla cambia per quanto riguarda la definizione
della query map e lutilizzo di un template file per interrogazioni vuote.
Negli oggetti Layer, invece, il query template file deve essere specificato nelle sue tre parti,
indicando header, query template file principale e footer rispettivamente con gli attributi HEADER,
TEMPLATE e FOOTER.
Definire un query template file per il layer Comuni utilizzando i_qy.html, qy_h.html e
qy_f.html rispettivamente come query template file principale, header e footer.
Provare a effettuare interrogazioni sui due layer inserendo direttamente la stringa di ricerca o
componendola con gli appositi strumenti.
Polismaker (11/02/2005)
Bibliografia
DM Solutions Inc. (2003)
MapServer HTML Legend HOWTO - Version 4.0
http://mapserver.gis.umn.edu/doc40/html-legend-howto.html (Febbraio 2004)
Doyon J.-F. (2003)
MapFile Reference - MapServer 4.0
http://mapserver.gis.umn.edu/doc40/mapfile-reference.html (Febbraio 2004)
Doyon J.-F., Morissette D. (2003)
MapServer WFS Client HOWTO
http://mapserver.gis.umn.edu/doc40/wfs-client-howto.html (Febbraio 2004)
Doyon J.-F., Morissette D. (2003)
MapServer WFS Server HOWTO
http://mapserver.gis.umn.edu/doc40/wfs-server-howto.html (Febbraio 2004)
Kishor P., Schut P., Smedsmo J. (2004)
HOWTO for Getting Started with MapServer
- 45 (Creative Commons by-nc-sa 3.0)
Polismaker (11/02/2005)
McKenna J. (2003)
HOWTO for OGR Use in MapServer - Version 4.1
http://mapserver.gis.umn.edu/doc40/ogr-howto.html (Febbraio 2004)
Nationales P.S. (2003)
MapServer 4.0 Tutorial
http://hypnos.cbs.umn.edu/projects/tutorial/ (Febbraio 2004)
Ramsey P. (2002)
PostGIS Manual
http://postgis.refractions.net/docs/ (Aprile 2002)
Sacerdoti S. (2000)
Guida alluso di MapServer (versione 3.3)
Progetto desame del corso di Cartografia Numerica (Prof.ssa M.A.Brovelli Politecnico di Milano)
University of Minnesota (2003)
Font Set Reference
http://mapserver.gis.umn.edu/doc40/fontset.html (Febbraio 2004)
University of Minnesota (2003)
Map Projections & Coordinate Systems
http://mapserver.gis.umn.edu/doc40/coordinates.html (Febbraio 2004)
University of Minnesota (2000)
MapServer Frequently Asked Questions
http://mapserver.gis.umn.edu/doc40/mapserver-FAQ.html (Febbraio 2004)
University of Minnesota (2003)
System Management
http://mapserver.gis.umn.edu/doc40/manage.html (Febbraio 2004)
Warmerdam F. (2003)
HOWTO for Raster in MapServer 4.0
http://mapserver.gis.umn.edu/doc40/raster-howto.html (Febbraio 2004)
Polismaker (11/02/2005)
Appendice
Riepilogo delle sostituzioni di <Nx> + <mioserver> da effettuare in ogni template file
Template file
s_templ.html
n sost.
3+1
riferimenti
<!-- GIS --> (2+1 sost.)
<!-- PULSANTI DI LINK -->
(1+0 sost.)
es8_iniz.html
7+2
d_templ.html
4+3
qy.html
3+0
queryvuota.html
2+0
qy_h.html
2+0
i_qy.html
0+0
qy_f.html
1+0
Polismaker (11/02/2005)
LICENZA
Queste dispense sono disponibili sotto la licenza:
Creative Commons , Attribuzione - Non commerciale - Condividi allo stesso modo , 3.0
Creative Commons , Attribution Noncommercial - Share Alike , 3.0