Skip to content.
Logo tecnoteca

Portale Tecnoteca.it

Logo tecnoteca

Vai al sito aziendale Tecnoteca.com


 
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



Tesi di Laurea:
"Sviluppo funzionalità gis su portale Zope"
di Marco Celotti


- Università degli studi di Udine -
-  Facoltà di Scienze Matematiche Fisiche e Naturali  -
- Dicembre 2004 -


Slide Tesi.ppt


Video Tesi.zip  [913 KB formato AVI]