Esercizi SIT - Laboratorio di Geomatica

Transcript

Esercizi SIT - Laboratorio di Geomatica
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Esercitazioni
su
MapServer
(versione 4.0.1)
Premessa
La presente dispensa vuole essere un sussidio per le esercitazioni su MapServer svolte in aula
informatizzata e per i successivi progetti di laboratorio caratterizzati dall'uso di questo software.
Pertanto i paragrafi seguenti non si presentano 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 di supporto agli esercizi trattati in aula.
Tali suggerimenti, dopo una breve introduzione generale, si riferiscono direttamente ai singoli
esercizi delle esercitazioni, con anche indicazioni importanti per la corretta configurazione
del web GIS in aula informatizzata.
-1-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Sommario
Per quanto detto prima, la struttura della dispensa riprende la successione delle esercitazioni in
aula informatizzata, con una parte introduttiva dedicata ad uno sguardo generale su MapServer e
sull'architettura del web GIS.
A
MapServer
B
Architettura CGI di MapServer
C
I dati supportati da MapServer
D
Le funzioni di interazione con la carta
0
Configurazione dell'ambiente di utilizzo di MapServer
1
Semplice visualizzazione
2
Aggiunta di altri layer
3
Classificazione di un layer
4
Utilizzo di simboli grafici
5
Creazione di etichette (label)
6
Utilizzo di caratteri TrueType
7
Oggetto Feature
8
Caricamento di dati raster
9
Caricamento di dati con la libreria OGR
10 Caricamento di tabelle di PostgreSQL tramite PostGIS
11 Pagina di inizializzazione
12 Navigazione della carta
13 Legenda
14 Barra di scala
15 Carta generale di riferimento
16 Attivazione/disattivazione di layer
17 Utilizzo di Template Reference
18 Viste predefinite
19 Visualizzazione di layer in funzione della scala
20 Interrogazioni puntuali
21 Interrogazioni multiple
22 Interrogazioni di tabelle di PostgreSQL
23 Modifica del Map File dal Template File
Bibliografia
-2-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
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
all’interazione con il server web per la creazione della carta poi presentata all'utente, ma anche a
tutto l’insieme 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 l’ottica di work in process che contraddistingue i software open source di cui MapServer è
un significativo esempio.
MapServer fu in origine realizzato nell’ambito del progetto “ForNet” ad opera dell’University 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
dall’UMN 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.0.2; nel corso delle esercitazioni e nei progetti del laboratorio concernenti MapServer sarà
invece utilizzata la versione 4.0.1, che poco si discosta dalla 4.0.2.
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 dell’utente, 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). Tutte le caratteristiche della versione di MapServer adottata possono essere
visualizzate all'utente tramite la template reference [version], come mostrato nell'esercizio 17.
B. Architettura CGI di MapServer
Le applicazioni presentate durante le esercitazioni si basano su un'architettura CGI, che a livello
di base si articola in tre componenti fondamentali:
-3-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
-
il programma CGI;
-
il map file;
-
il template file.
Introduzione a MapServer
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 l’utente e l’applicazione.
Come schematicamente illustrato nella figura seguente, spetta poi al server web e al browser
attivare l’applicazione e mettere in comunicazione il programma con l’utente.
Nel corso delle esercitazioni 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 durante le esercitazioni.
Template file
Map file
programma
CGI
MapServer
server web
browser
Figura 1– Elementi costitutivi di un’applicazione MapServer.
B1. Il CGI
Un CGI (Common Gateway Interface) è un programma che viene attivato da un server web e
che effettua elaborazioni di dati inviati dall’utente tramite pagine web; i risultati delle elaborazioni
vengono poi presentati all’utente sempre all’interno 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 dall’utente col semplice uso
del mouse o tramite i moduli tipici del linguaggio HTML; l’elemento che assolve a questa funzione
-4-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
è 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 all’interfaccia 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,
l’eseguibile trova le istruzioni che non sono affidate all’utente o sulle quali l’utente 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 degli URL 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 l’utilizzo di URL o moduli HTML implementati ad hoc nel template file: questa
caratteristica rende il programma meno rigido e permette all’utente 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 all’interno 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:
-
per l’immagine map, cioè la carta vera e propria:
[name][id].[ext]
con
[name] : nome dell’applicazione definito all’inizio del map file;
[id] : identificativo di sessione, costituito da una successione di tredici cifre
generata automaticamente dal CGI;
[ext] : formato dell’immagine, che può essere GIF o PNG a seconda del tipo di
estensione adottato in fase di compilazione del codice sorgente di MapServer
o in funzione del particolare binario di Windows installato.
-
per le immagini complementari:
-5-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
[name][object][id].[ext]
con
[nome], [id], [ext] corrispondenti a quelli della map della stessa sessione;
[object] : sigla identificativa del tipo di oggetto: leg per l’oggetto legend
(legenda), ref per l’oggetto reference map (carta generale di
riferimento) e sb per l’oggetto scalebar (barra di scala).
-
per i risultati delle query:
[name][id].qy
con
[nome], [id] corrispondenti a quelli della map della stessa sessione;
qy : estensione utilizzata per il file binario in cui vengono memorizzati i risultati delle
query.
Per quanto riguarda il risultato grafico di un’applicazione CGI di MapServer, quello che viene
effettivamente visualizzato dal browser è una “versione temporanea” dell’interfaccia 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 dev’essere 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 10, che non utilizzano MapServer in modo
interattivo e quindi non necesitano di pagine di inizializzazione. L'esercizio 11, invece, dispone
anche di una pagina di inizializzazione propria.
La figura 2 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:
-
il codice del map file;
-
le variabili del template file;
-
i parametri CGI.
-6-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
template file (sessione N)
Introduzione a MapServer
Riceve i dati in ingresso dal map file e dal
template file della sessione N e in base
ad essi crea le immagini per la nuova
sessione N+1, le salva nella cartella di file
(programma CGI) temporanei e definisce un nuovo id:
immagine per la map
immagine per la
reference map
map file
immagine per la legend
immagine per la scalebar
template file (sessione N+1)
Il server web genera la nuova
interfaccia del template file
inserendovi le immagini create
e visualizzandola tramite il
browser
Figura 2– Schema di funzionamento di MapServer con architettura CGI.
B2. Il map file
Il map file è un file di tipo ASCII che ha la funzione di definire l’aspetto cartografico delle
immagini originate dal CGI ad ogni sessione di lavoro.
Questo file, che può essere realizzato con un comune editor di testo e salvato con l’estensione
.map, è costituito da “oggetti” strutturati secondo uno schema gerarchico a vari livelli, come
mostrato nella figura 3.
-7-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
La dichiarazione di un oggetto inizia con il nome dell’oggetto stesso e termina con la parola chiave
END; all’interno della dichiarazione vengono definite le caratteristiche dell’oggetto 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
Figura 3 – Gerarchia degli oggetti costituenti il map file.
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 (8), necessario per il caricamento di dati raster.
-8-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
B3. Il template file
In un’applicazione di MapServer viene indicata generalmente come template file la pagina web
contenente la visualizzazione della carta (immagine map) e gli oggetti ausiliari (legenda, reference
map, scalebar); tuttavia hanno la funzione di template file anche le pagine utilizzate per la
presentazione dei risultati delle interrogazioni o pagine utilizzate per la segnalazione di errori o
vincoli imposti all'applicazione (ad esempio funzionamento dell'applicazione solo in particolari range
di scala).
Il template file, infatti, è qualsiasi interfaccia grafica tra MapServer e utente ed è costituita da una
pagina HTML, eventualmente dotata di JavaScript o altro, contenente i parametri CGI e le apposite
variabili - dette template reference e racchiuse tra parentesi quadre - a cui il server web
sostituisce ad ogni sessione di lavoro le impostazioni definite dall’utente (in entrata) e i risultati
delle elaborazioni del programma CGI (in uscita), come precedentemente mostrato in figura 2.
Come detto, quindi, quello che contraddistingue un template file da una pagina web classica sono
le variabili di collegamento al programma CGI; negli esercizi sarà possibile avere visione concreta
di questo concetto.
C. I dati supportati da MapServer
In MapServer è possibile utilizzare vari formati di dati, accessibili dal programma attraverso l’uso
delle librerie specifiche Shapelib, LibTIFF, GD, GDAL e OGR o tramite connessioni a DBMS
come Oracle o PostgreSQL.
La maggiore versatilità di applicazioni e rese grafiche è ottenuta con il formato vettoriale
shapefile, considerato “nativo” di MapServer, strutturato, per quanto riguarda la geometria, nei
tipi point (elementi di tipo punto), line (elementi di tipo linea) e polygon (elementi di tipo area)
e gestito dalla libreria Shapelib. Sono comunque utilizzabili anche altri formati vettoriali, dati raster
e visualizzazioni georeferenziate di record provenienti da database.
Per un elenco completo dei dati supportati si rimanda al sito di MapServer; nelle esercitazioni,
tuttavia, sono presenti alcuni esercizi relativi all'utilizzo di dati vettoriali di tipo MapInfo .TAB (cfr.
esercizio 9), di immagini raster (8) e di dati estratti da tabelle di PostgreSQL (10,22).
D. Le funzioni di interazione con la carta
-9-
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
La cartografia creata dal CGI di MapServer e visualizzata nella immagine map ad ogni sessione di
lavoro può essere trattata interattivamente secondo varie modalità, distinte nelle due grandi
categorie di navigazione (pan, zoom in, zoom out, viste predefinite) e interrogazione (query
singole o multiple, basate su un criterio di ricerca o su una feature) della carta.
In ogni caso, quello che permette di programmare interazioni con la carta a seconda delle
particolari esigenze a cui si deve far fronte è il cospicuo numero di parametri CGI che consentono
di personalizzare queste procedure. Infatti, oltre alla notevole varietà di valori disponibili per il
parametro MODE che regola in prima battuta l’interazione con la carta, MapServer dispone di
numerosi altri parametri inviabili al CGI e in grado di fornire risultati utili sia in termini di
affinamento delle funzionalità in questione sia in termini di resa grafica dell’interfaccia web.
Nonostante ciò, MapServer appare oggi, almeno nella sua versione CGI, abbastanza limitato per
funzionalità di livello elevato quali interrogazioni complesse, buffer, zoom e selezioni rettangolari o
funzioni di routing. Per queste funzionalità occorre passare ad architetture PHP o Java o cercare
soluzioni JavaScript a supporto dell'HTML. Gli esercizi 21 e 22 presentano esempi di come sia stato
necessario utilizzare del codice JavaScript per gestire query articolate.
Anche per l'esame delle funzionalità si rimanda direttamente agli esercizi, in particolare a quelli a
partire dal numero 12.
- 10 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
0. Configurazione dell'ambiente di utilizzo di MapServer
Come già accennato, non si intende in questa sede entrare nel particolare del web server
utilizzato, ossia Apache HTTP Server 2.0.48; si tengano presenti, però, le due cartelle cgi-bin
e htdocs che vengono create durante l'installazione di Apache 2 al percorso <Path>/Apache
Group/Apache2/.
In cgi-bin dev'essere copiato il binario di Windows mapserv.exe, vale a dire il CGI.
In htdocs, invece, vengono create tante sottocartelle quante sono le applicazioni che utilizzano il
web server, di tipo MapServer o meno.
Nel caso dell'esercitazione, la sottocartella di riferimento si chiama essit e tutti i file necessari per
le applicazioni sono contenuti in essa. A sua volta, essit include una cartella di archivio, _arc_ ,
comprendente il materiale necessario per le esercitazioni.
All'inizio dell'esercitazione ogni gruppo di studenti che utilizzano il medesimo PC dell’aula
informatizzata dovrà creare in essit una propria cartella denominata <numeropc> (scrivere il
numero con lettere minuscole), in cui inserire tutti i file necessari per l'esercitazione, tranne quelli
comuni, che saranno mantenuti in _arc_ o altrove.
Oltre ad essit, occorre tener presente anche la sottocartella tmp di htdocs: in essa, infatti,
saranno inseriti tutti i file temporanei creati da MapServer.
Ecco comunque in dettaglio le operazioni necessarie per configurare l'ambiente di lavoro prima di
passare al primo esercizio. Quando non è specificata, la cartella in cui effettuare l'operazione
indicata è essit; se il nome della cartella è preceduto da ../, si intende una sottocartella di
htdocs; in tutti gli altri casi si sta considerando una sottocartella di essit.

Cartella
File
Operazione
1)
-
-
Creare una cartella di nome <numeropc>
2)
../tmp
-
Creare una cartella di nome <numeropc>_t
3)
-
-
Da _arc_ copiare in <numeropc> il file
inizia.html
4)
<numeropc>
inizia.html
Sostituire essit/<numeropc> a YYYYYY
(13 sostituzioni)
Ogni
PC
dell’aula
informatizzata
dovrà
utilizzare
un
proprio
CGI
di
Mapserver
(mapserv<numeropc>.exe) su uno dei due PC con server web Apache messi a disposizione
(<pcserver>), secondo lo schema distribuito.
L' URL da scrivere nel browser per visualizzare inizia.html è:
- 11 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
http://<pcserver>/essit/<numeropc>/inizia.html
questa pagina sarà l'indice delle esercitazioni e da essa si potrà accedere direttamente a tutti gli
esercizi.
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 10 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 10 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.html);
- gli esercizi dall'11 al 23, 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 tutti gli esercizi, map file e template file risiederanno nella cartella <numeropc> ed avranno la
seguente denominazione (con <n> numero dell'esercizio):
Denominazione
Tipo file
es<n>.map
es<n>_view.html
es<n>_templ.html
es<n>_iniz.html
es<n>_qy.html
es<n>_h.html
es<n>_f.html
Map file
Template file "statico" (esercizi da 1 a 10)
Template file "dinamico" (esercizi da 11 a 23)
Pagina di inizializzazione (solo esercizio 11)1
Template file principale per le query (esercizi 20,21,22)
Template file header per le query (esercizi 21,22)
Template file footer per le query (esercizi 21,22)
Saranno utilizzati anche altri tipi di file, presentati col procedere degli esercizi e accessibili dal
template file cliccando sull'icona
.
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
e
per fare riferimento rispettivamente al
map file e al template file.
1
Per gli esercizi da 12 a 23 sarà utilizzata come pagina di inizializzazione inizia.html.
- 12 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
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 <numeropc>
il file es1_view.html
2)
<numeropc>
-
Creare il file es1.map
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://<pcserver>/cgi-bin/
mapserv.exe?map=..\htdocs\essit\<numeropc>\es1.map&mode=map"
con il quale si invia una richiesta al CGI (http://<pcserver>/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\essit\<numeropc>\es1.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 primo parametro passato e separare ciascun parametro con il
carattere & senza spazi.
Se ora si prova a visualizzare es.1_view da inizia.html o scrivendone direttamente l'URL
nel browser (http://<pcserver>/essit/<numeropc>/es1_view.html), la pagina viene caricata senza
immagine: occorre infatti dire al CGI come deve crearla e per questo è necessario implementare
un apposito map file.
Per prima cosa occorre creare l'oggetto Map, che è la radice di tutto il map file, specificando:
- il nome, indispensabile in quanto è il prefisso utilizzato dal programma CGI per creare le
immagini temporanee come visto precedentemente:
NAME es1
- 13 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
- l'unità di misura:
UNITS meters
- l' estensione spaziale (MBR iniziale) della carta in funzione delle coordinate2 orizzontali e
verticali minime e massime (in tutto quattro valori):
EXTENT 1496000 5064000 1512000 5080000
- le dimensioni in pixel dell’immagine (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 nell’applicazione
SHAPEPATH "..\..\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 i confini
dell’area archeologica di Comum Oppidum all’interno del Parco Regionale della Spina Verde di
Como, utilizzando il codice seguente:
LAYER
NAME "comumopp"
TYPE line
STATUS default
DATA "ahconf"
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
2
In tutti gli esercizi saranno utilizzate le coordinate Gauss-Boaga; questa scelta deriva dai dati cartografici utilizzati come
esempio.
- 14 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
estensione; per altri tipi di file occorre specificare anche l'estensione o introdurre gli attributi
CONNECTION e CONNECTIONTYPE, come si vedrà negli esercizi 8,9,10.
- 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 la classificazione del layer stesso e per la resa grafica del layer, in questo caso data
dalla sola indicazione del colore (COLOR 0 0 0): 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 es1_view.html, verificando come la carta venga effettivamente creata.
2. Aggiunta di altri layer e Oggetto Style
Obbiettivo: aggiungere nuovi layer alla carta e analizzarne la resa grafica.

Cartella
File
Operazione
1)
<numeropc>
-
Copia/Incolla di es1_view.html e creazione
del file es2_view.html
2)
<numeropc>
es2_view.html
Sostituire Es. 1 con Es. 2 nel tag <TITLE>
3)
<numeropc>
es2_view.html
Opportuno aggiornamento di <!--TITOLO-->
4)
<numeropc>
es2_view.html
In <!--PULSANTI DI LINK--> impostare il
pulsante "Successivo" a es3_view.html.
5)
<numeropc>
es2_view.html
In <!--PULSANTI DI LINK--> impostare il
pulsante "Precedente" a es1_view.html.
6)
<numeropc>
es2_view.html
In <!--PULSANTI DI LINK--> togliere il
commento al pulsante "Precedente".
7)
<numeropc> -
Copia/Incolla di es1.map e creazione di
es2.map
N.B. Salvo diversa indicazione, negli esercizi successivi le modifiche analoghe a quelle riportate ai
punti 2,3,4,5 saranno sintenticamente segnalate come "modifiche di default."
- 15 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Nel template file l'unica modifica riguarda il nome del map file da passare al campo SRC del tag
<IMG>, cioè non più es1.map ma es2.map.
Aggiornare il nome del mapfile da es1 a es2, analogamente a quanto visto per il template file.
Risettare il colore di sfondo dell'immagine da bianco a grigio scuro (75 75 75).
Dalla versione 4, MapServer permette di separare la classificazione del layer dalla resa grafica di
ciascuna classe, affidando quest’ultima ad un oggetto Style, da inserire all’interno di ogni oggetto
Class.
Creare l’oggetto Style per il layer "comumopp", ricolorandolo da nero ad arancio (228 100 0).
Effettuare le operazioni successive nell'ordine in cui vengono qui sotto presentate.
Aggiungere "Stazioni", layer vettoriale di punti, caricando lo shapefile stazioni e colorandolo di
bianco.
Aggiungere "Comuni", layer vettoriale di poligoni, caricando lo shapefile comuni e colorandolo di
grigio (205 205 205). Inoltre, utilizzare l'attributo OUTLINECOLOR per colorare di rosso i bordi dei
poligoni di questo layer.
Visualizzare la carta nel template file, verificando come il layer dei comuni si sovrapponga agli altri
due rendendoli invisibili. Questo è dovuto al fatto che l'ordine con cui i layer appaiono sulla carta è
inverso rispetto a quello con cui sono scritti nel map file, secondo una logica di tipo LIFO (Last In
First Out): l’ultimo 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.

Cartella
File
Operazione
1)
<numeropc>
-
Copia/Incolla di es2_view.html e creazione
- 16 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
del file es3_view.html
2)
<numeropc>
es3_view.html
Modifiche di default
3)
<numeropc>
-
Da _arc_/map copiare in <numeropc> il
file es3.map
Aggiornare il campo SRC del tag <IMG>.
In es3.map sono caricati i due layer "Comuni" e "Stazioni" visti nell'esercizio precedente;
aggiungere in stato default anche il layer "Ferrovia", layer vettoriale di punti, caricando lo shapefile
ferrovia e colorandolo di nero; fare una prima prova di visualizzazione.
- Provare ora a classificare il layer "Stazioni" sulla base dell'azienda ferroviaria a cui compete la
linea passante per la stazione.
Per prima cosa occorre specificare il campo in cui, nella tabella associata allo shapefile, è archiviata
l'informazione classificante: questo è possibile associando all'attributo CLASSITEM il nome del
campo, in questo caso "Azfer".
In seconda battuta occorre creare tanti oggetti Class quante sono le classi in cui si vuole
classificare il layer; nel nostro caso vengono definite due classi, una per le FS ed una per le FNM,
tramite l'attributo EXPRESSION e il valore corrispondente, scritto fra due /, ad esempio:
EXPRESSION /FNM/
Colorare quindi di nero le stazioni FS e di rosso quelle FNM e provare a visualizzare la carta.
- Classificare ora il layer "Ferrovie" sulla base della linea ferroviaria (campo "Linea"), creando tre
classi, una per la linea "FS Milano-Como-Chiasso" (colore: nero), una per la linea "FNM MilanoSaronno-Como" (rosso) ed una terza per tutte le altre linee (134 0 0).
Occorre procedere in modo del tutto analogo a quanto visto prima, con la sola differenza
riguardante la terza classe: il valore di EXPRESSION dev'essere /./.
Provare a visualizzare la carta per verificare il risultato ottenuto.
- Per la classificazione del layer "Comuni" si considerino tre casi differenti, creando sempre due
sole classi (la prima con poligoni gialli, la seconda con poligoni ciano) e cambiando l'EXTENT
dell'oggetto map come indicato nel map file stesso.
Caso a. Classificazione del campo "Nome" visualizzando i comuni di Albese con Cassano e Albiolo,
notando come il valore di EXPRESSION sia case sensitive.
Caso b. Classificazione del campo "Nome" visualizzando nella prima classe il comune di
Bulgarograsso e nella seconda tutti gli altri comuni.
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.
- 17 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
In questo caso la sintassi da utilizzare per la classificazione diventa:
EXPRESSION ([attributo]OPERATORIvalore)
;
si noti come l’intera espressione debba essere compresa tra parentesi tonde, mentre il nome
dell’attributo (case sensitive) tra parentesi quadre.
Nel caso della prima classe dell’esempio considerato si ha:
;
EXPRESSION ([Popol]>10000)
scrivere l’espressione per la seconda classe.
4. Utilizzo di simboli grafici
Obbiettivo: utilizzare simboli grafici per migliorare la resa grafica dei layer.

Cartella
File
Operazione
1)
<numeropc>
-
Copia/Incolla di es3_view.html e creazione
del file es4_view.html
2)
<numeropc>
es4_view.html
Modifiche di default
3)
<numeropc>
-
Da _arc_/map copiare in <numeropc> il
file es4.map
4)
<numeropc>
-
Crare in <numeropc> la cartella graffont
5)
graffont
-
Creare in graffont il file Symbols.sym
6)
graffont
-
Da _arc_ copiare in graffont la cartella
symbols
Aggiornare il campo SRC del tag <IMG>.
Spesso COLOR e OUTLINECOLOR non sono sufficienti per una resa grafica accettabile dei layer
sulla carta, in particolare per i layer di tipo point.
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.
Si voglia ora utilizzare un simbolo per ogni layer presente nel map file, definendoli in
Symbols.sym.
- 18 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Simbolo 1. Creare un simbolo per il layer "Urbanizzato" utilizzando l'immagine urbaree.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 Symbol occorre specificare gli attributi:
- NAME, nome del simbolo, 'urbanizzato';
- TYPE, tipo di simbolo, che assume valore pixmap (simbolo derivante da un'immagine esistente);
- IMAGE, percorso (rispetto a Symbols.sym) e nome dell'immagine utilizzata per la creazione del
simbolo, in questo caso 'symbols\urbaree.gif'.
Per associare il simbolo al layer basta posporre l'attributo SYMBOL all'attributo COLOR nell'oggetto
Style del layer "Urbanizzato". Il valore di SYMBOL può essere o il nome del simbolo o un numero
corrispondente alla posizione occupata in Symbols.sym.
Simbolo 2. Utilizzare un simbolo costruito ad hoc per la classe FS del layer "Ferrovie".
Rispetto ai casi precedenti, rimane invariato il significato dell'attributo NAME, TYPE assume valore
ellipse ed IMAGE non è presente.
Il simbolo viene costruito come un'ellisse, specificando la lunghezza dei semiassi in pixel. Per far
ciò occorre inserire un oggetto Points, in questo caso dato da: POINTS 1 1 END.
L'attributo booleano FILLED permette di specificare se l'ellisse deve essere colorata al suo interno,
come nel nostro caso (quindi il valore da utilizzare è true), o meno.
Nel caso il simbolo venga utilizzato per layer lineari, l'oggetto Style dà infine la possibilità di
disegnare linee tratteggiate: in questo caso STYLE 10 5 END indica che la linea sarà disegnata
per 10 pixel, interrotta per 5, disegnata per 10 e così via.
Aggiungere il simbolo al layer.
Simbolo 3. Costruire un simbolo di tipo ellipse per le ferrovie FNM, con entrambi i semiassi pari a 1
e linea tratteggiata ogni 3x3 pixel. Aggiungere il simbolo al layer.
Simbolo 4. Creare un simbolo per le stazioni FS utilizzando l'immagine q12_blu16.gif.
Aggiungere il simbolo al layer.
Simbolo 5. Creare un simbolo per le stazioni FNM utilizzando l'immagine q12_verde12.gif.
Aggiungere il simbolo al layer.
Visualizzare la carta ottenuta.
5. Creazione di etichette (label)
- 19 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Obbiettivo: utilizzare etichette di testo per inserire scritte nella carta.

Cartella
File
Operazione
1)
<numeropc>
-
Copia/Incolla di es4_view.html e creazione
del file es5_view.html
2)
<numeropc>
es5_view.html
Modifiche di default
3)
<numeropc>
-
Da _arc_/map copiare in <numeropc> il
file es5.map
Aggiornare il campo SRC del tag <IMG>.
Spesso è utile etichettare alcuni campi e renderli visibili all'interno della carta: si utilizzano a tal
fine le etichette o label, che in MapServer vengono gestite nel map file tramite l'oggetto Label,
che è un oggetto figlio di Class.
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 etichettare: 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 utilizzato per l'etichetta, in questo caso si consideri BITMAP3.
- 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.
- 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.
- 20 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
c) Etichettare le stazioni FNM con un'etichetta bitmap, con testo verde (0 134 0) e dimensioni
medie, posizionata automaticamente.
d) È possibile personalizzare ulteriormente un'etichetta, utilizzando una serie di attributi messi a
disposizione da MapServer. Si può ad esempio colorare lo sfondo dell'etichetta con
BACKGROUNDCOLOR o aggiungere un'ombreggiatura al testo o all'etichetta definendone colore
(SHADOWCOLOR
per
l'ombreggiatura
del
testo,
BACKGROUNDSHADOWCOLOR
per
quella
dell'etichetta) e dimensioni in larghezza e altezza (SHADOWSIZE e BACKGROUNDSHADOWSIZE).
Provare a personalizzare l'etichetta delle stazioni FS colorando lo sfondo di grigio (190) e creando
un'ombreggiatura gialla di un pixel per il testo e una blu di tre pixel per l'etichetta.
6. Utilizzo di caratteri TrueType
Obbiettivo: utilizzare font TrueType per le etichette.

Cartella
File
Operazione
1)
<numeropc>
-
Copia/Incolla di es5_view.html e creazione
del file es6_view.html
2)
<numeropc>
es6_view.html
Modifiche di default
3)
<numeropc>
-
Copia/Incolla di es5.map e creazione di
es6.map
4)
graffont
-
Creare in graffont il file fontset.list
Aggiornare il campo SRC del tag <IMG>.
Aggiornare il nome del map file e cancellare le impostazioni sull'ombreggiatura e sulla
colorazione dello sfondo delle etichette.
Si vuole ora utilizzare font di tipo TrueType (Arial, Times, ecc...) per scrivere il testo delle etichette.
Per far ciò occorre modificare le impostazioni degli oggetti Label:
- assegnando a TYPE il valore TRUETYPE;
- definendo SIZE con un valore numerico;
- specificando nell'attributo FONT il nome del carattere TrueType che si vuole utilizzare.
Il valore assegnato a FONT non è il nome effettivo del font, bensì un alias che permette di
identificarlo all'interno del map file. Chi si occupa della dichiarazione degli alias è il fontset, un file
di testo analogo al symbolset, richiamato all'interno del map file nell'oggetto Map tramite l'attributo
FONTSET con il nome e il percorso del fontset rispetto al map file.
3
Per i font TrueType si rimanda all'esercizio successivo.
- 21 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Nel nostro caso il fontset sta nella cartella graffont e si chiama fontset.list: dichiararlo nel
map file.
Per definire i font in fontset.list occorre specificare, utilizzando una riga per ogni font, l'alias
e il percorso assoluto del file del font, separati da una tabulazione.
Per inserire Arial si scriva:
arial C:\Programmi\Apache~1\Apache2\htdocs\sit\graffont\fonts\arial.ttf
Inserire anche Courier (cour.ttf, alias: courier), Times (times.ttf, alias: times) e
Monotyepe Corsiva (MTCORSVA.ttf, alias: mtypcors).
a) Etichettare il nome dei comuni in Times,8.
b) Etichettare il nome delle stazioni FS in Arial,9.
c) Etichettare il nome delle stazioni FNM in Monotype Corsiva,9.
7. Oggetto Feature
Obbiettivo: definire nuove feature all'interno del map file.

Cartella
File
Operazione
1)
<numeropc>
-
Copia/Incolla di es6_view.html e creazione
del file es7_view.html
2)
<numeropc>
es7_view.html
Modifiche di default
3)
<numeropc>
-
Copia/Incolla di es6.map e creazione di
es7.map
Aggiornare il campo SRC del tag <IMG>.
Aggiornare il nome del map file, colorare lo sfondo della carta del colore 255 255 210 e
modificare l'estensione della carta con il seguente valore: 1504700 5069000 1506700 5071000.
- 22 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Si vuole in questo esercizio analizzare l'oggetto Feature, che permette di creare all'interno del
map file delle nuove feature vettoriali senza caricarle da uno shapefile (feature inline). Un
oggetto Feature è definito all'interno di un oggetto Layer e usa l'oggetto Points per la definizione
della geometria della feature.
a) Definire due assi perpendicolari che suddividano la carta in quattro quadranti, intersecandosi nel
punto 1506000 5070000; colorare le linee di rosso.
Creato il layer "Quadranti", vettoriale di linee con stato default, ognuna delle due linee è definita
da un proprio oggetto Feature.
Per la riga verticale si utilizza il codice:
FEATURE
POINTS 1506000 5069000 1506000 5071000 END
END
Creare la feature della riga orizzontale.
Per colorare le linee basta definire due normali oggetti Class e Style all'interno del layer.
b) Definire il centro dei quadranti precedentemente creati ed etichettarli (NE,NW,SE,SW) con una
label bitmap, giant, bianca su sfondo rosso; utilizzare il simbolo generato dall’immagine cq.gif
per visualizzare il punto corrispondente al centro del quadrante.
Rispetto all'esempio precedente, questo nuovo layer ("CentroQuadranti") è di tipo point. Inoltre,
dal momento che le feature non sono associate ad alcuno shapefile, non è possibile utilizzare
LABELITEM, ma occorre specificare di volta in volta il testo da scrivere nell'etichetta con l'attributo
TEXT. Qui sotto è riportato il caso del centro del quadrante NW; implementare gli altri tre casi.
FEATURE
POINTS 1505350 5070500 END
TEXT " NW "
END
c) Creare un parallelogramma magenta di estremi A (1504900 5070100), B (1505100 5070100), C
(1505200 5070300), D (1505000 5070300).
Rispetto all'esempio precedente, questo nuovo layer ("Parallelogramma") è di tipo polygon. Inoltre,
dal momento che la feature da creare è chiusa, l'ultimo punto definito deve coincidere con il primo.
8. Caricamento di dati raster
Obbiettivo: caricare immagini raster nel map file.

Cartella
File
1)
<numeropc>
-
Operazione
Copia/Incolla di es7_view.html e creazione
- 23 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
del file es8_view.html
2)
<numeropc>
es8_view.html
Modifiche di default
3)
<numeropc>
-
Copia/Incolla di es7.map e creazione di
es8.map
4)
<numeropc>
-
Da _arc_/dati copiare in <numeropc> la
cartella raster
Aggiornare il campo SRC del tag <IMG>.
Aggiornare il nome del map file, cancellare il layer "Parallelogramma" e rendere trasparente il
layer dei comuni, lasciando però inalterato il colore dei confini comunali .
L'inserimento di un'immagine raster è gestito, come per un dato vettoriale, all'interno di un
oggetto Layer, con queste precisazioni:
- TYPE assume il valore raster;
- DATA ha come valore il percorso assoluto del raster che si vuole caricare, dal momento
che non ha più senso fare riferimento allo shapepath;
- l'oggetto Class non è obbligatorio e viene utilizzato solo per classificare l'immagine;
- non è possibile inserire oggetti Label e Feature.
Condizione necessaria per la rappresentazione nella carta del raster è che questo sia dotato di un
world file, file di testo che serve per la sua corretta georeferenziazione.
In MapServer, il world file deve stare nella stessa cartella del file raster, deve avere il medesimo
nome di quest'ultimo ed estensione .WLD e deve riportare, su righe successive, le seguenti
informazioni:
- dimensione di un pixel lungo le ascisse;
- primo parametro di rotazione/scala, in genere nullo;
- secondo parametro di rotazione/scala, in genere nullo;
- dimensione di un pixel lungo le ordinate, in genere negativa poichè i pixel crescono dall'alto verso
il basso;
- ascissa del centro del pixel in alto a sinistra nelle coordinate del sistema di riferimento utilizzato
nel map file;
- ordinata del centro del pixel in alto a sinistra nelle coordinate del sistema di riferimento utilizzato
nel map file.
a) Creare un world file, per ogni raster della cartella raster, date le seguenti informazioni:
- i parametri di rotazione/scala sono sempre nulli;
- per tutti i raster, la dimensione del pixel è 0.84674005 in ascissa e -0.84674005 in ordinata;
- le coordinate del primo pixel (pixel in alto a sinistra) sono:
Raster
Est
Nord
- 24 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
nw
ne
sw
se
1504000
1506000
1504000
1506000
Introduzione a MapServer
5071000
5071000
5070000
1506000
b) Caricare i quattro raster nel map file, dando loro il nome "r_<nomefile>".
c) Spegnere il layer del raster SW.
d) Classificare il layer NE, colorando di grigio lo sfondo e di giallo le feature.
Come per la classificazione di un layer vettoriale, occorre definire CLASSITEM, assegnandogli però
il valore di default [pixel].
La classificazione è ora possibile sui due colori del raster, che devono essere specificati in
EXPRESSION tramite i valori:
([pixel] = 0)
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.
9. Caricamento di dati con la libreria OGR
Obbiettivo: caricare dati vettoriali non memorizzati in shapefile.

Cartella
File
Operazione
1)
<numeropc>
-
Copia/Incolla di es8_view.html e creazione
del file es9_view.html
2)
<numeropc>
es9_view.html
Modifiche di default
3)
<numeropc>
-
Copia/Incolla di es2.map e creazione di
es9.map
Aggiornare il campo SRC del tag <IMG>.
Aggiornare il nome del map file, cancellare il layer "Stazioni" e modificare l'estensione della
carta con il seguente valore: 1502000 5074000 1504000 5076000.
L'inserimento di un dato vettoriale che non sia uno shapefile necessita l'impiego della libreria OGR:
questo supporto, opzionale fino alla versione 3.4 di MapServer e ora incluso nella libreria GDAL,
associata di default a MapServer, consente al programma di superare la limitazione
precedentemente imposta dall’esclusività del formato shapefile e di intervenire su set di dati creati
con altri software
- 25 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
La OGR Simple Feature Library si presenta infatti come una libreria di carattere open source
implementata in linguaggio C++ e avente la possibilità di accedere in lettura, e talvolta anche in
scrittura, ai formati di dati:
•
•
•
•
•
•
•
•
•
•
•
Coverages di ArcInfo
Shapefile ESRI;
TAB di MapInfo;
MIF / MID;
Microstation DGN;
TIGER / Line file sets;
OGDI Vectors;
IHO S-57 datasets;
UK.NTF (National Transfert Format);
SDTS TVP (Topological Vector Profile and Point Profile datasets);
PostgreSQL.
Occorre tuttavia precisare che per alcuni formati (come OGDI Vector) la libreria OGR necessita di
ulteriori estensioni, non sempre incluse nei binari precompilati.
Per altri tipi di dati, invece, sono disponibili differenti modalità di connessione: è il caso di
PostgreSQL, accessibile sia con OGR sia con l’applicativo PostGIS appositamente realizzato.
Infine, per quanto riguarda il livello di effettivo utilizzo dei dati di tipo OGR, è importante
sottolineare che alcuni formati, sebbene supportati dal programma, non si adattano bene ad
applicazioni di tipo web: è il comportamento tipico dei file MIF / MID.
In altri casi, invece, come per i TAB di MapInfo, l’uso della connessione OGR permette rese
analoghe a quelle degli shapefile nativi di MapServer. Anche per formati così duttili, però, possono
verificarsi alcuni problemi, fino all’impossibilità da parte della libreria OGR di accedere ai dati. È
questo il caso dei file a geometria mista, contenenti cioè feature di tipi differenti (point, line,
polygon): essi sono stati regolarmente costruiti nel GIS d’origine ma non sono supportati da
MapServer.
Come esempio si voglia caricare il file conoidi, di tipo MapInfo .TAB, contentuo nella cartella
htdocs/dati/ogr.
Come di consueto, il dato va caricato all'interno di un oggetto Layer ("conoidi"); per il caricamento,
però, non si usa più l'attributo DATA, bensì la coppia CONNECTIONTYPE - CONNECTION: a
CONNECTIONTYPE si assegna il nome della connessione (OGR in questo caso), a CONNECTION il
percorso del file dal map file (..\..\dati\ogr nel caso in esame).
A questo punto è possibile classificare il layer con un normale oggetto Class, ad esempio
colorandolo di 214 49 148.
Con prove sull'attributo TYPE, stabilire il tipo che meglio si adatta all'informazione da
rappresentare e verificare come la scelta migliore sia line.
- 26 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
10. Caricamento di tabelle di PostgreSQL tramite PostGIS
Obbiettivo: caricare dati vettoriali del DBMS PostgreSQL tramite lo “spatially DBMS enabler”
PostGIS.

Cartella
File
Operazione
1)
<numeropc>
-
Copia/Incolla di es9_view.html e creazione
del file es10_view.html
2)
<numeropc>
es10_view.html
Modifiche di default
3)
<numeropc>
-
Copia/Incolla di es9.map e creazione di
es10.map
Aggiornare il campo SRC del tag <IMG>.
Aggiornare il nome del map file, cancellare il layer "Conoidi" e modificare l'estensione della
carta con il seguente valore: 1504400 5071689 1507250 5074539.
Si vuole aggiungere un nuovo layer di nome “punttur_iqy” caricandovi tuple provenienti dalla
tabella punttur residente nel DBMS PostgreSQL 7.2. I dati memorizzati nelle tuple sono punti
turistici e quindi nel map file sono assimilati a dati vettoriali di tipo puntuale.
Per il caricamento dei dati è necessario interporre uno “spatially DBMS enabler” tra MapServer e
PostgreSQL: questa funzione è svolta da PostGIS 0.7, che ha il compito di assegnare una
geometria e una georeferenziazione alle tuple della tabella e quindi di renderle rappresentabili in
una carta.
La definizione del layer non varia, rispetto ai casi precedenti, per quanto riguarda NAME, TYPE e
STATUS.
Per quanto concerne il caricamento dei dati, invece, oltre all’attributo DATA sono necessari anche
CONNECTION e CONNECTIONTYPE, da utilizzare con la seguente sintassi:
CONNECTIONTYPE postgis
CONNECTION
“user=<UserName>
dbname=<NomeDatabase>
PcPostgreSQL> port=<NumeroPorta>”
CONNECTION “<GeometryColumn> from <NomeTabella>”
Nel caso in esame considerare :
UserName:
diego
NomeDatabase:
spinaverde
NomePcpostgreSQL: 131.175.143.203
NumeroPorta:
5432
- 27 -
(Creative Commons by-nc-sa 3.0)
host=<Nome
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
GeometryColumn:
the_geom
NomeTabella:
punttur
Introduzione a MapServer
La GeometryColumn è la colonna che PostGIS aggiunge alla tabella da rappresentare
spazialmente e nella quale definisce la geometria e la georeferenziazione delle tuple.
a) Creare il layer in questione e classificarlo sulla base della colonna “tipo”, utilizzando il 5°
simbolo di symbolset per il valore ‘villa storica’, il 7° per ‘chiesa’ e il 6° per tutti gli altri valori.
La classificazione è del tutto simile a quella vista per gli shapefile.
b) Con quanto scritto precedentemente, vengono caricate tutte le tuple della tabella punttur.
Se invece si vogliono caricare solo le tuple che rispondono ad un particolare criterio, è
necessario aggiungere all’oggetto Layer l’attributo FILTER, che appunto discrimina tra le tuple
della tabella secondo un filtro dato da una stringa che in SQL segue la comune clausola
WHERE.
Provare a caricare soltanto i punti turistici di tipo ‘villa storica’.
NOTA. Dall’esercizio 11 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, l’analisi dei file di configurazione si sposterà maggiormente sui template file.
- 28 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
11. Pagina di inizializzazione
Obbiettivo: inizializzare un’applicazione interattiva di MapServer.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es11_iniz.html
2)
<numeropc>
es11_iniz.html
Sostituire a <numeropc> il suo valore
particolare
3)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es11_templ.html
4)
<numeropc>
es11_templ.html Sostituire a <numeropc> il suo valore
particolare
5)
<numeropc>
es11_iniz.html
Sostituire a <npc> il valore, in cifre, del CGI
utilizzato
6)
<numeropc>
-
Copia/Incolla di es10.map e creazione di
es11.map
N.B. Salvo diversa indicazione, negli esercizi successivi le modifiche analoghe a quelle riportate ai
punti 2, 4 e 5 saranno sintenticamente segnalate come "istanziazione di <numeropc> e <npc>".
Aggiornare il nome del map file, cancellare il layer "Punttur_iqy" e modificare l'estensione della
carta con il seguente valore: 1497000 5066000 1510000 5079000.
Affinché il template file sia richiamato da MapServer ogni volta che il CGI legge il map file, è
necessario definire nel map file l’oggetto 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.
Nel caso in esame si utilizzino:
TEMPLATE
“es11_templ.html“
IMAGEPATH
“C:\Programmi\Apache~1\Apache2\htdocs\essit\<numeropc>\tmp\”
IMAGEURL
“/essit/<numeropc>/tmp/”
La pagina di inizializzazione serve per lanciare la prima sessione del web GIS creato con
MapServer.
L’inizializzazione 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 l’azione di attivare il CGI mapserv.exe.
- 29 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Perciò nel codice HTML di es11_iniz.html si ha
<FORM METHOD="GET" ACTION="/cgi-bin/mapserv<numero>.exe">
<INPUT TYPE="hidden" NAME="map"
VALUE="..\htdocs\essit\<numeropc>\es11.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 l’inizializzazione di MapServer avvenga tramite un URL, basta creare un’ancora
che abbia come riferimento esterno il CGI con il nome del map file passato come parametro:
<A HREF=”http://geo21.como.polimi.it/cgibin/mapserv.exe?map=..%5Chtdocs%5Cessit%5C<numeropc>%5Ces11.map”>
URL: http://geo5.como.polimi.it/cgibin/mapserv10.exe?map=..%5Chtdocs%5Cessit%5Cdieci%5Ces11.map
</A>
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 (es11_templ.html), a cui il CGI fa riferimento
tramite l’oggetto Web del map file.
Per gli esercizi successivi non sarà implementata una pagina di inizializzazione propria come per
l’esercizio 11, in quanto ne svolge già la funzione la pagina inizia.html.
Verificare quanto detto nel codice HTML di inizia.html.
Il template file es11_templ.html è differente rispetto a quelli visti negli esercizi precedenti
poiché deve gestire l’interattività 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<numero>.exe">
<INPUT TYPE="hidden" NAME="map"
VALUE="..\htdocs\essit\<numeropc>\es11.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
- 30 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
navigazione; il secondo, invece, dà al CGI l’estensione della carta: il valore [mapext] impone
come estensione quella assegnata dall’attributo EXTENT del map file.
Queste righe di codice sono presenti in tutti i template file degli esercizi dall’11 al 23, poiché sono
indispensabili per l’utilizzo interattivo di MapServer.
Inoltre, è presente il tag
<IMG SRC="[img]" ALT="Carta / Img" BORDER="1"> ,
a cui compete l’inserimento dell’immagine creata dal CGI ad ogni sessione di lavoro: il valore di
SRC
è una template reference che viene sostituita proprio dall’immagine originata da
mapserv.exe.
12. Navigazione della carta
Obbiettivo: navigare la carta con le consuete funzioni di pan e zoom.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es12_templ.html
2)
<numeropc>
es12_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Copia/Incolla di es11.map e creazione di
es12.map
Aggiornare il nome del map file e quello del template file indicato nell’oggetto Web; aggiungere
il layer “conoidi” così come definito nell’esercizio 9 e creare un layer “Laghi” caricando con stato
default lo shapefile di poligoni idroaree e colorandolo di 0 155 240.
Il template file es12_templ.html dà la possibilità all’utente di navigare la carta con funzioni
di pan e zoom e di ripristinare le impostazioni iniziali, definite nel map file.
Ciò che gestisce la navigazione della mappa è la modalità browse del parametro CGI mode,
assegnata con una variabile nascosta all’inizio della FORM come descritto precedentemente.
Ciò che l’utente 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]>
- 31 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
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
allo zoom out.
[zoomdir_0_check], [zoomdir_1_check] e [zoomdir_-1_check] indicano al CGI di mantenere
l’impostazione di navigazione precedentemente selezionata.
Il passo di zoom, infine, è definito pari a 2 dalla variabile nascosta
<INPUT TYPE="hidden" NAME=”zoomsize” VALUE=”2”>
che assegna tale valore al parametro CGI zoomsize.
L’utente, dopo aver scelto se effettuare un pan, uno zoom in o uno zoom out selezionando il radio
button corrispondente, clicca col mouse sulla carta e ottiene l’effetto desiderato: una carta traslata,
ingrandita o rimpicciolita.
Il tag
<INPUT TYPE="submit" VALUE="Ripristina l'estensione iniziale"> ,
invece, invia al CGI tutte le impostazioni del map file, ripristinando così l’estensione in esso
definita.
Infine, se si vuole che la carta venga effettivamente navigata tramite il mouse, l’immagine non
dev’essere 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]"> .
13. Legenda
Obbiettivo: inserimento di una legenda nel template file.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es13_templ.html
2)
<numeropc>
es13_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Copia/Incolla di es12.map e creazione di
es13.map
- 32 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Aggiornare il nome del map file e quello del template file indicato nell’oggetto Web; classificare
il layer “Comuni” riprendendo la classificazione dell’esercizio 3; colorare i poligoni del layer “Laghi”
di 0 215 240 con bordo 0 185 210.
L’inserimento 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 l’immagine della legenda:
-
IMAGECOLOR, colore di sfondo della legenda (nel caso in esame bianco);
-
KEYSIZE, dimensioni iniziali della legenda (18 12);
-
STATUS, stato della legenda: on legenda disegnata, off legenda non disegnata, embed
legenda disegnata all’interno della carta (on).
Inoltre, tramite un oggetto Label all’interno dell’oggetto Legend, viene settato lo stile del testo
da inserire in legenda (Arial 9 nero). Non è necessario specificare POSITION.
Creare l’oggetto Legend secondo le impostazioni indicate tra parentesi.
Per stabilire quali voci inserire in legenda, basta specificare un attributo NAME all’interno di un
qualsiasi oggetto Class, con l’indicazione del testo da porre in legenda.
Ad esempio,
NAME “Conoidi di deiezione”
inserito nell’unico oggetto Class del layer “conoidi”, fa comparire in legenda la voce “Conoidi di
deiezione”.
Inserire in legenda tutte le classi dei layer “conoidi”, “Comuni” e “comumopp” e verificare l’assenza
di voci del layer “Laghi”.
Provare a cambiare i valori di STATUS per l’oggetto Legend.
Nel template file l’inserimento 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">
da scrivere in es13_templ.html.
Verificare la creazione della legenda nella cartella dei file temporanei.
- 33 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
14. Barra di scala
Obbiettivo: inserimento di una barra di scala nel template file.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es14_templ.html
2)
<numeropc>
es14_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Copia/Incolla di es13.map e creazione di
es14.map
Aggiornare il nome del map file e quello del template file indicato nell’oggetto Web; non
classificare il layer “Comuni”, colorando omogeneamente le sue feature di grigio chiaro (185) con
contorni grigio scuro (85); assegnare al colore di sfondo della legenda il valore 238 238 215.
Analogamente a quanto visto per la legenda, l’inserimento 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);
-
STYLE, stile della barra di scala, a scelta tra 0 e 1 (0);
-
UNITS, unità di misura della barra di scala (kilometers);
-
INTERVALS, numero di tacche in cui deve essere ripartita la barra di scala (4);
-
SIZE, dimensioni in pixel della barra di scala (200 2);
-
IMAGECOLOR, colore di sfondo della barra di scala (bianco);
-
BACKGROUNDCOLOR, colore delle tacche pari della barra di scala (bianco);
-
COLOR, colore delle tacche dispari della barra di scala (nero);
-
OUTLINECOLOR, colore del bordo della barra di scala (nero).
Inoltre, tramite un oggetto Label all’interno dell’oggetto Scalebar, viene settato lo stile del testo
da inserire nella barra di scala (small nero; non occorre specificare TYPE).
Creare l’oggetto Scalebar secondo le impostazioni indicate tra parentesi, provando a cambiare i
valori di STYLE e degli attributi di colorazione.
Nel template file l’inserimento 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 l’immagine corrispondente.
- 34 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
15. Carta generale di riferimento
Obbiettivo: inserimento di una carta generale di riferimento nel template file.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es15_templ.html
2)
<numeropc>
es15_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Copia/Incolla di es14.map e creazione di
es15.map
4)
<numeropc>
-
Da _arc_ copiare in <numeropc> la
cartella refmap
Aggiornare il nome del map file e quello del template file indicato nell’oggetto Web; assegnare
al colore di sfondo della barra di scala il valore 238 238 215.
Analogamente a quanto visto per legenda e barra di scala, l’inserimento 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\essit\<numeropc>\refmap\refsit.gif);
-
EXTENT, estensione della carta generale di riferimento: è importante, per un corretto
utilizzo della carta generale di riferimento, che le sue dimensioni siano proporzionali a
quelle della carta (utilizzare l’estensione della carta);
-
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;
-
COLOR, campitura della carta generale di riferimento (trasparente);
-
OUTLINECOLOR, colore del rettangolo utilizzato per il riferimento (rosso).
Creare l’oggetto Reference secondo le impostazioni indicate tra parentesi.
- 35 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Nel template file l’inserimento della carta generale di riferimento richiede un semplice tag di
inserimento immagine al quale si specifichi come sorgente la template reference [ref].
16. Attivazione / disattivazione di layer
Obbiettivo: attivare e disattivare layer dal template file (toggle layer).

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es16_templ.html
2)
<numeropc>
es16_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Copia/Incolla di es15.map e creazione di
es16.map
Aggiornare il nome del map file e quello del template file indicato nell’oggetto Web; aggiungere
il layer “CorsiAcq” - caricando lo shapefile di linee idrol e colorandolo di 0 185 210 - e inserirlo in
legenda (“Aste idriche principali”).
Affinchè un layer sia attivabile o disattivabile dall’utente nel template file, occorre assegnare il
valore on all’attributo STATUS di tale layer.
Rendere tutti i layer attivabili/disattivabili dal template file.
Se dal template file si vuole gestire l’attivazione 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, l’attributo GROUP con il nome del gruppo.
Raggruppare nel gruppo “idrogeo” i layer “CorsiAcq”, “Laghi” e “conoidi”.
Nel template file l’attivazione e la disattivazione di layer (layer toggling) può essere gestita ad
esempio mediante l’utilizzo di checkbox, come si vuole fare in es16_templ.html:
<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="idrogeo" [idrogeo_check]>
Il parametro CGI sottoposto a checkbox è layer, al quale vengono assegnati i nomi dei layer
(primo e secondo caso) o dei gruppi di layer (terzo caso).
- 36 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Affinché il layer sia correttamente specificato, il valore passato al parametro CGI layer dev’essere
quello dell’attributo NAME dell’oggetto Layer del map file per i layer singoli, quello dell’attributo
GROUP per i gruppi di layer.
Come accade per il parametro CGI zoomdir (cfr. esercizio 12), è possibile mantenere in memoria
il nome dei layer, riportandolo a fine tag tra parentesi quadre con il suffisso _check.
L’invio al CGI del nome dei layer da attivare o disattivare è effettuato tramite clic del mouse sulla
carta o mediante il tasto submit.
17. Utilizzo di template reference
Obbiettivo: utilizzo di template reference nel template file.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es17_templ.html
2)
<numeropc>
es17_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Copia/Incolla di es16.map e creazione di
es17.map
Aggiornare il nome del map file e quello del template file indicato nell’oggetto Web; impostare a
default lo stato dei layer “CorsiAcq” e “Laghi”.
Le template reference sono variabili inserite nel codice HTML del template file alle quali il CGI
sostituisce un valore alfanumerico o un’immagine ad ogni sessione di lavoro.
Sono template reference [mapext], [img], [legend], [scalebar] e [ref] viste negli
esercizi precedenti, così come lo sono i nomi dei campi delle tabelle associate agli shapefile o le
colonne di tabelle di DBMS che compaiono nei query template file (esercizi 20-22).
In es17_templ.html sono riportati altri esempi di template reference: qui sotto se ne riporta
l’elenco; rintracciarli nel codice del template file e verificarli col browser.
[scale]
Denominatore della scala nominale della carta; in genere
associato alla barra di scala nella forma 1:[scale];
[mapx][mapy]
Coordinate dell’ultimo clic del mouse;
[minx][maxx][miny][maxy]
Coordinate del MBR (Minimum Bounding Rectangle) attuale;
- 37 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
[dx][dy]
Dimensioni del MBR attuale;
[center_x][center_y]
Coordinate in pixel del centro della carta;
[mapsize]
Dimensioni della carta in pixel;
[toggle_layers]
Layer attivabili/disattivabili;
[layers]
Layer attivi;
[map]
Nome del map file;
[id]
ID della sessione corrente;
[host]
Computer su cui risiede MapServer;
[port]
Porta;
[version]
Versione di MapServer.
18. Viste predefinite
Obbiettivo: inquadrare la carta in funzione di viste predefinite.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es18_templ.html
2)
<numeropc>
es18_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Copia/Incolla di es17.map e creazione di
es18.map
Aggiornare il nome del map file e quello del template file indicato nell’oggetto Web.
Il template file es18_templ.html dà la possibilità all’utente di aggiornare la carta in funzione
di valori predefiniti da sostituire all’ EXTENT del map file, ossia tramite viste predefinite.
Per far ciò, occorre inserire un evento HTML che passi al CGI la nuova estensione della carta.
Nel caso particolare di questo esercizio, l’evento è un menu a tendina (SELECT), nel quale ogni
voce del menu (OPTION) coincide con l’estensione di un particolare inquadramento.
Tale estensione viene assegnata come valore al parametro CGI mapext, che viene inviato al CGI
azionando il pulsante di aggiornamento della carta (tasto submit).
<SELECT NAME="mapext">
<OPTION VALUE="1487000 5054000 1523000 5088000"> Olona-Lambro
<OPTION VALUE="1497000 5066000 1510000 5079000"> Parco Spina Verde
…
- 38 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
</SELECT>
Provare a inquadrare la carta secondo le viste predefinite a disposizione nel template file e a
crearne di nuove.
19. Visualizzazione di layer in funzione della scala
Obbiettivo: visualizzare i layer soltanto in determinati intervalli di scala.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es19_templ.html
2)
<numeropc>
es19_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Copia/Incolla di es18.map e creazione di
es19.map
Il template file es19_templ.html dà la possibilità all’utente di inquadrare la carta in funzione
di scale particolari e di centrarla in un punto predefinito. Tale proprietà è del tutto analoga a quella
delle viste predefinite trattate nell’esercizio precedente.
Anche in questo template file, del resto, la selezione di un particolare inquadramento della carta è
gestito tramite menu a tendina, uno per selezionare il centro del nuovo inquadramento, l’altro
per impostare la scala di visualizzazione.
Nel primo caso a mapserv.exe viene passato il parametro CGI mapxy, con la coppia di
coordinate del centro di inquadramento; nel secondo caso, invece, il parametro CGI che entra in
gioco è scale, a cui corrisponde di volta in volta il denominatore della scala alla quale si vuole
disegnare la carta.
Scopo principale dell’esercizio 19, tuttavia, è mostrare come alcuni layer possano essere
visualizzati solo in particolari range di scala; questa proprietà è gestita a livello di map file.
Aggiornare il nome del map file e quello del template file indicato nell’oggetto Web.
Molto spesso un dato non è in grado di fornire l’informazione che porta in sé poiché è visualizzato
a scale inopportune: ad esempio, una carta tecnica regionale raster non è leggibile a scale troppo
piccole (ad esempio 1:50000) perché sarebbe una macchia nero-bianca indefinita, né è
significativa a scale troppo grandi (ad esempio 1:1000) perché l’effetto grafico mostrerebbe
chiaramente che è stata superata la risoluzione dell’immagine.
- 39 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Appare quindi utile poter fissare degli estremi di visualizzazione del dato in funzione della scala di
rappresentazione.
In MapServer questo è possibile all’interno degli oggetti Layer, utilizzando gli attributi MAXSCALE e
MINSCALE con il valore del denominatore della scala
Un layer che abbia
MAXSCALE 10000
non può essere visualizzato con una scala di 1:25000, perché 25000 è maggiore del massimo
“denominatore di scala” previsto per quel layer, che è appunto 10000.
Viceversa, un layer che abbia
MINSCALE 1000
non può essere visualizzato con una scala di 1:500, perché 500 è minore del minimo
“denominatore di scala” previsto per quel layer, che è appunto 1000.
Il layer in questione, quindi, è rappresentabile solo per scale comprese tra 1:1000 e 1:10000.
Si tenga presente che MAXSCALE e MINSCALE si riferiscono al denominatore della scala; perciò il
denominatore della scala della carta deve essere minore di MAXSCALE e maggiore di MINSCALE,
mentre la scala della carta deve essere maggiore di 1:MAXSCALE e minore di 1:MINSCALE.
Impostare la visualizzazione in funzione della scala:
-
del layer “CorsiAcq”, rendendolo visualizzabile per scale maggiori di 1:10000;
-
del layer “r_ne”, rendendolo visualizzabile in un intervallo di scala compreso tra 1:2000 e
1:10000.
Utilizzare il template file per verificare queste impostazioni.
20. Interrogazioni puntuali
Obbiettivo: interrogare una feature di un layer.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es20_templ.html
2)
<numeropc>
es20_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es20_qy.html
4)
<numeropc>
es20_qy.html
Istanziazione di <numeropc> e <npc>
5)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file queryvuota.html
- 40 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
6)
<numeropc>
queryvuota.html Istanziazione di <numeropc> e <npc>
7)
<numeropc>
-
Da _arc_/map copiare in <numeropc>
il file es20.map
In genere, quando si vuole interrogare una carta si rendono necessari più template file: il
template file principale (es20_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 l’unico query template file necessario è
es21_qy.html), che riporta i risultati dell’interrogazione; un eventuale template file per
interrogazioni vuote (queryvuota.html).
Nel template file principale es20_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 dall’utente;
-
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);
-
featurequery: interrogazione di feature mediante una feature di un layer utilizzato come
layer di selezione (slayer);
-
featurenquery: interrogazione di feature mediante le feature di un layer utilizzato come
layer di selezione (slayer);
-
itemfeaturenquery: interrogazione composta che in prima battuta definisce un slayer e la
sua feature “interrogante” tramite una itemquery e quindi interroga altri layer (qlayer) tramite
la feature dell’ slayer;
-
itemfeaturenquery: interrogazione composta che in prima battuta definisce un slayer e le
sue feature “interroganti” tramite una itemnquery e quindi interroga altri layer (qlayer) tramite
le feature dell’ slayer.
- 41 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
La scelta del layer da interrogare viene comunicata al CGI tramite l’invio del parametro qlayer,
avente come valore il nome del layer da sottoporre a query.
In questo esercizio si faccia un’interrogazione 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="ferrovia"> Ferrovia (LINE)
<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 es20_qy.html vengono riportati i risultati dell’interrogazione, 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 (ad esempio shapefile o tabella di PostgreSQL).
Nell’esercizio in esame appartengono al primo tipo le template reference:
[cl]
nome del layer interrogato (nome del layer a cui appartiene la feature interrogata)
[nr]
numero totale di risultati (in questo caso 1 perché è stata effettuata
un’interrogazione di tipo query)
Le template reference [NOME], [PROVINCIA], [SUPERFICIE] e [POPOL], invece, non sono
altro che i campi della tabella associata allo shapefile comuni caricato nel layer “Comuni”.
Si noti come il nome dei campi sia scritto in maiuscolo, sebbene nella tabella compaia con la
prima lettera maiuscola e le altre minuscole. Questa convenzione si discosta da quella utilizzata
negli attributi EXPRESSION, DATA e FILTER del map file, che sono case sensitive.
Come detto poc’anzi, la query map è una carta che viene creata nel map file e che riporta
l’ubicazione della feature selezionata. La generazione della query map viene affidata direttamente
al CGI, come dimostra la riga di codice seguente:
- 42 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
<IMG SRC="/cgi-bin/mapserv.exe?map=[map]
&queryfile=c:\programmi\Apache%20Group\Apache2\htdocs\essit\<numeropc>\tm
p\es20[id].qy&mode=map">
Il tag IMG impone la creazione dell’immagine della carta da parte di mapserv.exe, al quale
vengono passati come parametri CGI map, queryfile e mode.
Analogamente a quanto visto nei template file degli esercizi 1-10, mode assume valore map, cioè
quello di creazione della carta.
A map, invece, non viene passato il nome del map file, ma la template reference [map], a cui
corrisponde il map file corrente.
Con il parametro CGI queryfile, infine, viene comunicato al CGI il risultato della query – con
l’indicazione della feature da evidenziare nella query map – precedentemente salvato dal CGI
stesso all’interno di es20[id].qy nella cartella dei file temporanei (<numeropc>\tmp).
Affinchè questo file venga creato, è necessario che nel template file principale sia specificato, con
valore true, il parametro CGI savequery. A tal fine, in genere, si usa scrivere:
<INPUT TYPE="hidden" NAME="savequery" VALUE="true">
all’atto dell’apertura della FORM.
Il template file per interrogazioni vuote, come queryvuota.html in questo esercizio, è
uno speciale template file che il CGI visualizza quando una query non produce alcun risultato.
Viste le peculiarità del template file per le funzionalità di interrogazione della carta, si passi ora
a esaminare il map file.
In esso occorre semplicemente specificare i template file utilizzati per la presentazione dei risultati
e definire le caratteristiche dell’oggetto map.
In ogni oggetto Layer che sia interrogabile occorre specificare il query template file utilizzato per la
presentazione dei risultati di un’interrogazione effettuata sulle feature di quel layer.
Questo è fatto semplicemente assegnando all’attributo TEMPLATE il nome del query template file.
In aggiunta si può impostare la tolleranza da utilizzare per l’interrogazione tramite clic del mouse,
specificando con TOLERANCEUNITS l’unità di misura della tolleranza e con TOLERANCE il valore
della tolleranza in tale unità.
Assegnare ai layer “Comuni”, “ferrovia” e “Stazioni” il query template file es20_qy.html,
utilizzando per gli ultimi due una tolleranza di 10 pixel.
Non è detto che il query template file debba essere unico: ad esempio si sarebbero potuti utilizzare
tre query template file diversi, uno per ogni layer.
- 43 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Unico, invece, è il template file per interrogazioni vuote, che va specificato non all’interno
dell’oggetto Layer ma all’interno dell’oggetto Web, assegnando il suo nome all’attributo EMPTY.
Impostare queryvuota.html come template file per interrogazioni vuote.
La definizione della query map, infine, viene gestita all’interno di un oggetto apposito, l’oggetto
QueryMap, che dipende direttamente dall’oggetto Map.
Gli attributi dell’oggetto QueryMap sono:
-
SIZE, dimensioni della query map.
-
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.
Creare una query map di dimensioni 300x300 pixel e verificare tramite browser le differenti
versioni stilistiche.
21. Interrogazioni multiple
Obbiettivo: interrogare un layer con una stringa di ricerca sugli attributi delle feature.

Cartella
File
Operazione
1)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es21_templ.html
2)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es21_qy.html
3)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es21_h.html
4)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es21_f.html
5)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es21_qys.html
6)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es21_hs.html
7)
<numeropc>
-
Da _arc_/template copiare in
<numeropc> il file es21_fs.html
- 44 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
8)
<numeropc>
-
Da _arc_/map copiare in <numeropc>
il file es21.map
9)
<numeropc>
tutti
Istanziazione di <numeropc> e <npc>
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
l’interrogazione
viene
formulata
nel
template
file
principale
(es21_templ.html), mentre i risultati sono riportati nei query template file, con l’opzione della
solita pagina queryvuota.html come template file per interrogazioni vuote.
In questo esercizio i layer sottoposti a interrogazione siano solo “Comuni” e “ferrovia”, per i quali si
vogliono impiegare query template differenti.
Come per l’esercizio 20, nel template file principale occorre specificare la modalità di
interrogazione e i layer da interrogare.
La modalità di interrogazione che risponde all’esigenza sopra esposta è itemnquery,
selezionabile con un radio button sul parametro mode che, analogamente all’esercizio precedente,
può assumere anche il valore browse.
Ancora un pulsante radio permette di selezionare il layer da interrogare, senza differenze rispetto
al caso visto precedentemente per l’interrogazione con modalità query.
Verificare quanto appena detto nel codice HTML di es21_templ.html.
La stringa di selezione (stringa di ricerca) sugli attributi del layer interrogato deve essere
passata a mapserv.exe tramite il parametro CGI qstring.
Il valore di qstring deve soddisfare la seguente sintassi (case sensitive):
‘[Attributo]’operatore’Valore’ , se l’attributo è di tipo stringa,
[Attributo]operatoreValore , se l’attributo è un numero.
Esempi dei due casi sono, rispettivamente:
(‘[Provincia]’eq’Varese’) ,
([Popol]>15000) .
- 45 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
In es21_templ.html sono presenti box di testo, link, pulsanti e operatori che, associati a
funzioni JavaScript implementate ad hoc, permettono di comporre il valore di qstring elemento per
elemento; la struttura di questi strumenti esula le finalità di questa dispensa.
Quando si lavora con query multiple, il numero dei risultati di un’interrogazione è 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 si spezzare il codice HTML del query template file in tre tronconi: un
header, un “query template file principale” e un footer.
Nell’header 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.
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 dell’interrogazione:
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 nell’header 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 un’unica pagina HTML, come si può constatare
esaminando il codice dei tre file. Un esempio su tutti: il tag HTML viene aperto nell’header e chiuso
nel footer.
Istanziare <numeropc>/tmp per i file temporanei e il percorso della reference map.
Rispetto ad un’interrogazione in modalità query, nulla cambia per quanto riguarda la definizione
della query map e l’utilizzo 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 es21_qy.html, es21_h.html e
es21_f.html rispettivamente come query template file principale, header e footer.
- 46 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Definire un query template file per il layer “ferrovia” utilizzando es21_qys.html, es21_hs.html
e es21_fs.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.
22. Interrogazioni di tabelle di PostgreSQL
Obbiettivo: interrogare con query multiple un layer costituito da tuple di una tabella di
PostgreSQL.

Cartella
File
Operazione
1)
<numeropc> -
Da _arc_/template copiare in
<numeropc> il file es22_templ.html
2)
<numeropc> -
Da _arc_/template copiare in
<numeropc> il file es22_qy.html
3)
<numeropc> -
Da _arc_/template copiare in
<numeropc> il file es22_h.html
4)
<numeropc> -
Da _arc_/template copiare in
<numeropc> il file es22_f.html
5)
<numeropc> -
Da _arc_/map copiare in <numeropc>
il file es22.map
6)
<numeropc> tutti
Istanziazione di <numeropc> e <npc>
Questo esercizio è un caso particolare del precedente esercizio 21: la modalità di interrogazione
è infatti ancora itemnquery; quello che cambia è il tipo di dato da interrogare: non più uno
shapefile ma una tabella del DBMS PostgreSQL.
L’unica differenza rispetto al caso precedente è che si ha un unico layer da interrogare
(“Evidenze”) e, soprattutto, che varia la sintassi del valore di qstring.
Per interrogazioni su tabelle di DBMS, infatti, la sintassi della stringa di ricerca ricalca il linguaggio
SQL e in particolare la clausola WHERE:
(AttributoOperatore’Valore’) , se l’attributo è di tipo stringa,
(AttributoOperatoreValore) , se l’attributo è un numero.
- 47 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
Esempi dei due casi sono, rispettivamente:
(‘Tipo’=’iscrizione’) ,
(codp>1000) .
Come in es21_templ.html, sono anche qui presenti box di testo, link, pulsanti e operatori che,
associati a funzioni JavaScript, facilitano la composizione di qstring.
Nulla cambia nei query template file.
I Istanziare <numeropc>_t (sottocartella di tmp) per i file temporanei e il percorso della
reference map.
La definizione delle query di tabelle di PostgreSQL nel map file non comporta alcuna variazione
rispetto a quanto visto nei due esercizi precedenti per gli shapefile.
23. Modifica del map file dal template file
Obbiettivo: modificare alcuni attributi del map file direttamente dal template file.

Cartella
File
Operazione
1)
<numeropc> -
2)
<numeropc> es23_templ.html Istanziazione di <numeropc> e <npc>
3)
<numeropc> -
Da _arc_/template copiare in
<numeropc> il file es23_templ.html
Da _arc_/map copiare in <numeropc>
il file es23.map
es23_templ.html dà la possibilità all’utente di modificare alcuni attributi del map file
direttamente dal template file, passando a mapserv.exe i nuovi valori di tali attributi come se
fossero valori di parametri CGI.
Questo è possibile sfruttando gli eventi della FORM del template file come menu a tendina, pulsanti
radio, checkbox o box di testo: con essi si impostano i nuovi valori di alcuni attributi del map file e
con il tasto submit si inviano tali valori al CGI.
Come già accennato, il cambiamento di un attributo del map file viene imposto a mapserv.exe
come se fosse un parametro CGI, il tutto mediante la sintassi:
- 48 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
map_NomeOggetto_NomeAttributo
map indica che si deve intervenire a livello di map file.
NomeOggetto è il nome dell’oggetto in cui si trova l’attributo da modificare: se l’oggetto è
univoco, si mette la parola chiave che lo identifica (ad esempio LEGEND), se invece è multiplo,
come un layer, si mette il suo nome (ad esempio Comuni).
NomeAttributo è l’attributo da modificare.
In es23_templ.html sono stati implementati i seguenti eventi per la modifica di attributi del
map file:
Modifica
Attributo modificato (NAME=)
Evento HTML
Colore del layer “Comuni”
map_Comuni_class_color
SELECT su 5 valori
Stato del layer “Laghi”
map_Laghi_status
SELECT su 2 valori (default, off)
Simbolo dei confini del Parco
Spina Verde
map_ConfSpVe_class_symbol
SELECT su 3 valori
Stile della barra di scala
map_scalebar_style
SELECT su 2 valori (0, 1)
Stato della legenda
map_legend_status
RADIO su 3 valori (on, off, embed)
Voce in legenda per il layer
“Comuni”
map_Comuni_class_name
TEXT box
La modifica dei parametri del map file dal template file è possibile anche scrivendo gli attributi da
modificare direttamente nell’URL del browser.
Istanziare <numeropc>_t (sottocartella di tmp) per i file temporanei e il percorso della
reference map.
- 49 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
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
http://mapserver.gis.umn.edu/doc40/getstarted-howto.html (Febbraio 2004)
Koormann F. (2003)
MapServer Template Reference
http://mapserver.gis.umn.edu/doc40/template-reference.html (Febbraio 2004)
Koormann F., Lime S. (2003)
MapServer CGI Reference
http://mapserver.gis.umn.edu/doc40/cgi-reference.html (Febbraio 2004)
Lime S. (2003)
MapServer Demo
http://maps.dnr.state.mn.us/mapserver_demos/workshop/ (Febbraio 2004)
Magni D. (2002)
Progettazione e implementazione di un WebGIS archeologico: il caso del Parco della Spina
Verde di Como
Tesi di laurea – Politecnico di Milano
(MapServer versione 3.5.1)
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 all’uso di MapServer (versione 3.3)
Progetto d’esame del corso di Cartografia Numerica (Prof.ssa M.A.Brovelli – Politecnico di Milano)
University of Minnesota (2003)
- 50 -
(Creative Commons by-nc-sa 3.0)
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
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)
- 51 -
(Creative Commons by-nc-sa 3.0)
Introduzione a MapServer
D.Magni - Corso di Sistemi Informativi Territoriali (GIS) – a.a. 2004/2005
Introduzione a MapServer
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
Per maggiori informazioni:
X Condizioni di utilizzo delle dispense
http://creativecommons.org/licenses/by-nc-sa/3.0
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.it
X Testo della licenza
http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode
Ultimo aggiornamento: 22/04/2005
- 52 -
(Creative Commons by-nc-sa 3.0)