You are here:
tecnoteca.it
Tesi on line
Sviluppo funzionalità gis su portale ZOPE
Sviluppo
Sviluppo codice MapServer
Sviluppo codice MapServer
MapServer prende in input dati su cartine, layers, scale di riferimento, etichette layers, legende e quant'altro riguardi una comune cartina geografica.Tutte queste informazioni vengono riunite all'interno di un file testuale, il “Mapfile”, che risiede fisicamente sul file system ed ha un'estensione di tipo “.map”.
Quando MapServer riceve tale file semplicemente crea la cartina richiesta in base ai parametri prefissati.
Per avere un'idea di come sia organizzato tale file si presenta di seguito il Mapfile utilizzato per la creazione dell'oggetto cartina in questo progetto.
Una nota importante riguardo il Mapfile riguarda l'aspetto del codice; il codice rispetta una struttura ben definita.
Se tale struttura non viene rispettata nella stesura del Mapfile, MapServer genererà un errore di sintassi nel Mapfile.
# definizione caratteristiche generali della mappa: nome, stato, dimensione...
MAP
NAME 'demo'
STATUS ON
SIZE 450 450
# extent della mappa; servono a definire la visualizzazione iniziale della cartina. Se errati si potrebbe
# visualizzare una cartina completamente bianca.
EXTENT 6.176532 35.758795 19.407059 47.995570
#unità di misura della cartina; in questo caso si usano i metri
UNITS METERS
#lo shapepath indica una posizione sul file system fisico dove MapServer andrà a cercare i file sorgenti
#dei layer che di seguito in questo file verranno elencati; se il path non è corretto MapServer genererà un
#errore.
SHAPEPATH '/home/marco/ItaliaShape/'
#colore del background della cartina
IMAGECOLOR 255 255 255
#formato dell'immagine che MapServer genererà
IMAGETYPE 'png'
#temp files
WEB
IMAGEPATH "/tmp/"
IMAGEURL "/tmp/"
TEMPLATE "foo"
END
#qui comincia e finisce con l'end subito sotto la cartina di riferimento; la cartina di riferimento è una
#piccola cartina che aiuta e facilita la navigazione nel momento in cui il livello di zoom è abbastanza alto
#e quindi il rischio di perdere il senso della posizione corrente è molto alto.
REFERENCE
IMAGE 'reference_map.png'
SIZE 100 100
EXTENT 6.176532 35.758795 19.407059 47.995570
STATUS ON
MINBOXSIZE 10
MAXBOXSIZE 100
COLOR -1 -1 -1
OUTLINECOLOR 128 0 0
END
#questa è invece la definizione di una scala per la mappa.
SCALEBAR
IMAGECOLOR 235 237 248
LABEL
COLOR 0 0 0
SIZE TINY
END
STYLE 1
SIZE 100 2
COLOR 0 0 0
UNITS KILOMETERS
INTERVALS 2
TRANSPARENT FALSE
STATUS ON
END
#di seguito ci sono una serie di definizioni di simboli; i simboli sono delle composizioni vettoriali che
#tornano molto utili per segnalare e caratterizzare sulla mappa i diversi layer. Per poter visualizzare ad
#esempio le città maggiori con un cerchio rosso, le città medie con una croce rossa e le città minori con
#un triangolo rosso è prima necessario definire questi tre simboli con una specifica sintassi. Una volta
#definiti sarà possibile utilizzarli all'interno della definizione dei layer per sceglierne la rappresentazione.
#simbolo “cerchio”
SYMBOL
NAME 'circle'
TYPE ELLIPSE
POINTS 1 1 END
FILLED TRUE
END
#simbolo “triangolo”
SYMBOL
NAME 'triangle'
TYPE VECTOR
POINTS
0 4
2 0
4 4
0 4
END
FILLED TRUE
END
#simbolo “+”
SYMBOL
NAME "plus"
TYPE vector
POINTS
2 0
2 4
-99 -99
0 2
4 2
END
END
#simbolo “X”
SYMBOL
NAME "cross"
TYPE vector
FILLED true
POINTS
2 3
3 4
4 3
3 2
4 1
3 0
2 1
1 0
0 1
1 2
0 3
1 4
2 3
END
END
#a questo punto si comincia con la descrizione dei layer che dovranno comporre la mappa e che
#dovranno avere il loro file sorgenti nel path precedentemente specificato. Il primo layer è il layer che
#rappresenta il terreno della cartina; il campo name indica il suo nome, il campo type indica il tipo di layer
#(se è un layer di punti, di linee o di poligoni), il campo status indica se deve essere o meno visualizzato
#sulla mappa (default='on'), il campo data indica all'interno della cartella indicata dallo shapepath quale
#sia il nome dei file (.shp + .shx + .dbf) sorgenti.
LAYER
NAME 'PONET_poly_region'
TYPE POLYGON
STATUS DEFAULT
DATA 'PONET_poly_region'
#la classe indica in questo caso il solo colore con il quale visualizzare il terreno
CLASS
COLOR 225 225 185
END
END
# secondo layer; questo è il layer dei fiumi. In tutto uguale alla struttura del layer terreno eccetto per il
#campo type che in questo caso è di tipo linea
LAYER
NAME 'DNNET_arc_polyline'
TYPE LINE
STATUS DEFAULT
DATA 'DNNET_arc_polyline'
CLASS
COLOR 0 150 255
END
END
#layer dei confini della mappa
LAYER
NAME 'PONET_arc_polyline'
TYPE LINE
STATUS DEFAULT
DATA 'PONET_arc_polyline'
CLASS
COLOR 0 0 0
END
END
#layer di punti sull mappa; notare il campo type che ora presenta il valore punto ed il campo maxscale
#che in questo contesto indica la scala massima a cui deve essere visibile questo layer. Questa
#funzionalità di maxscale, come anche quella di minscale, è molto utile per garantire una certa chiarezza
#nel presentare la mappa. In poche parole è possibile far vedere certi layer solamente ad un certo livello
#di zoom, spegnendoli altrimenti.
LAYER
NAME 'PPPOINT_point_point'
TYPE POINT
STATUS DEFAULT
DATA 'PPPOINT_point_point'
MAXSCALE 50
#la classe in questo caso è un po' più complessa delle classi già viste in quanto presente due campi
#aggiuntivi, oltre al campo colore, ovvero symbol e size; il primo indica quale dei simboli
#precedentemente descritti del Mapfile utilizzare per il layer corrente(Mapserver esegue la numerazione
#automatica dei simboli del Mapfile) ed il secondo indica che dimensione utilizzare per tale simbolo
CLASS
COLOR 150 0 0
SYMBOL 1
SIZE 2
END
END
#questo layer è diverso rispetto ai layer precedenti poiché è un layer di tipo annotazione (type
#annotation); in breve questo layer presenta non dei punti, delle linee o dei poligoni, ma bensì delle
#stringhe (parole o frasi) in corrispondenza di determinati punti.
#Le stringhe da riportare sulla cartina sono i dati riportati nel file .dbf
#specificato dal campo data mentre i punti su cui riportare tali informazioni sono specificati nel file .shp.
#anche le stringhe possono avere una specifica rappresentazione in termini di dimensione, colore,
#ombreggiatura, stile, font etc.
LAYER
NAME 'PPPOINT_point_point_label'
TYPE ANNOTATION
DATA 'PPPOINT_point_point'
STATUS DEFAULT
LABELITEM "PPPTNAME"
CLASSITEM "PPPTNAME"
LABELMAXSCALE 50
CLASS
NAME 'All'
EXPRESSION /./
STYLE
COLOR -1 -1 -1
END
LABEL
COLOR 30 30 30
#SHADOWCOLOR 218 218 218
#SHADOWSIZE 2 2
TYPE BITMAP
FONT arial
SIZE MEDIUM
POSITION CC
PARTIALS FALSE
BUFFER 2
END
END
END
#questo layer, in tutto uguale a dei layer già visti, è in verità un layer molto particolare. E' infatti uno dei
#due layer che nel sistema sviluppato hanno un contenuto dinamico. Non presentano nessuna
#particolarità poiché il contenuto dinamico è dato esclusivamente dall'editing dei file di contenuto (.shp , .
#shx , .dbf)
LAYER
NAME 'esempio_layer_uno'
TYPE POINT
STATUS DEFAULT
DATA 'esempio_layer_uno'
CLASS
COLOR 200 0 0
SYMBOL "circle"
SIZE 12
END
END
#il secondo layer dinamico
LAYER
NAME 'esempio_layer_due'
TYPE POINT
STATUS DEFAULT
DATA 'esempio_layer_due'
CLASS
COLOR 0 200 0
SYMBOL "triangle"
SIZE 12
END
END
# Fine del Mapfile
END