Moduli Funzionali

Jemma può essere scomposto in tre moduli funzionali: comunicazioni con MapServer, recupero automatica dell'informazione dal cliente, trattamento del file di configurazione .map.

Comunicazione con MapServer

La comunicazione tra MapServer e Jemma avviene tramite chiamata http o https nel caso si debba usare un protocollo di sicurezza. L'URL di richiesta viene creato percorrendo l'oggetto Map e generando una coppia nome/valore per ogni attributo istanziato. La richiesta viene quindi inviata a MapServer che, terminate le operazioni di calcolo necessarie, risponde attraverso un file xml (funzionalità di templating di MapServer). I valori in risposta vengono utilizzati per aggiornare l'oggetto Map (nuovo extent della mappa, indirizzo delle immagini, nuovo fattore di scala, …) e per creare la risposta al cliente (pagina html o presentazione dentro un'applicazione).

<?xml version="1.0" encoding="ISO-8859-1"?>
<values>
	<img>[img]</img>
	<mapext>[mapext]</mapext>
	<map>[map]</map>
	<ref>[ref]</ref>
	<scalebar>[scalebar]</scalebar>
	<scale>[scale]</scale>
	<legend>[legend]</legend>
</values>
File xml di template utilizzato per inviare le informazioni dal MapServer a Jemma.

Sebbene MapServer dichiara di poter modificare qualsiasi attributo definito nel file di configurazione non tutte le modifichei sono prese realmente in considerazione. Alcune perché palesemente inutili, altre perché, sembrerebbe, non ancora implementate.

L'immagine riportata di seguito mostra quali oggetti di un file map e a quale grado sono risultati modificabili utilizzando la versione di MapSever attualmente disponibile (versione 4.2.0). Il dettaglio per attributo è disponibile in appendice.

Diagramma rappresentate gli oggetti che compongono un file di configurazione map e le loro relazioni (gli oggetti a sinistra contengono uno o più oggetti disegnati alla loro destra). I colori raggruppano gli oggetti in base al numero di attributi che sono risultati modificabili tramite chiamata URL. Arancione - nessuno. Verde - gran parte. Azzurro - solo una parte. Blu - non testato.

Aggiornamento automatico via URL

Il secondo modulo funzionale serve ad automatizzare le modifiche all'oggetto Map domandate dal cliente attraverso una richiesta URL (per esempio generata da un formulario Web). Jemma integra la stessa nomenclatura specificata da MapServer nel caso di una chiamata diretta dal browser a MapServer. In tal modo il passaggio di un'applicazione esistente basata su MapSever verso Jemma richiede pochi secondi.

Scenario d'utilizzazione di moduli di aggiornamento automatico e di chiamata a MapServer. (1) Il Browser invia una richiesta con i parametri che rispettano la nomenclatura MapServer. (2) La richiesta viene trattata e l'ogetto Map viene opportunamente modificato. (3) Il modulo di comunicazione utilizza il file Map per generare la richiesta a MapServer.

L'oggetto Map

Il terzo modulo utilizza direttamente il file di configurazione di una mappa. Purtroppo, pur condividendone la logica di elementi contenuti e contenenti, il file di configurazione di una mappa in MapServer non è scritto in formato xml. Il lavoro di parsing e di analisi è notevolmente complesso e porta facilmente all'errore. In attesa che MapServer si adegui agli standard (cosa richiesta da tempo a gran voce) abbiamo deciso di aggirare il problema utilizzando i commenti al file per ricostruire una sintassi che rispetti quella impiegata nel formato xml. Questa piccola modifica ci ha permesso di implementare due utili funzionalità:

  1. la lettura del file .map e l'inizializzazione dell'oggetto Map
  2. la modifica del file .map stesso introducendo nuovi elementi

La seconda delle due funzionalità implica la necessità di condividere il file di configurazione tra le macchine ospitanti le applicazioni. La prima invece può essere effettuata anche tramite una più facile e sicura chiamata http.

Il modulo per la gestione del map file può essere utilizzato in due modi: la modifica del map file (1a) (per esempio introduzione di un nuovo simbolo o di un nuovo layer) che verrà poi preso in considerazione dal MapServer (1b); lettura del file map (2a) e inizializzazione automatica di tutto o alcuni degli elementi dell'oggetto Map.

Funzionalità ereditate

Jemma offre ovviamente tutte le funzionalità che sono accessibile via una normale interfaccia web e MapServer. Tra queste citiamo quelle che riteniamo più importanti ai fini dei nostri progetti:

  1. Supporto dei formati geografici più diffusi (shapefile, PostGIS, ArcSDE, …)
  2. Supporto dei formati raster TIFF/GeoTIFF e EPPL7
  3. Indicizzazione per il formato shapefile
  4. Mappe tematiche su informazione geografica e alfanumerica con espressioni regolari
  5. Oggetti cartografici di supporto (scalebar, legend, reference map)
  6. Personalizzazione basata sulla scala