Principi

CGI e MapServer

MapServer è un server cartografico che funziona da applicazione CGI.

Il server riceve una richiesta contenente, come parametro inviato tramite l'indirizzo URL, il nome del file di configurazione di una mappa ed eventuali altre preferenze. MapServer risponde o inviando direttamente l'immagine della mappa o copiando il file sul sistema locale e inviando in risposta al cliente un file HTML contenente le principali informazioni sulla mappa prodotta (indirizzo URL della carta, nuovo extent , nuova scala, etc.) Il formato della pagina HTML di risposta è modificabile a piacimento dall'utente, si parla di pagine template.

Meccanismo di funzionamento di MapServer con utilizzo di template HTML.

In questo scenario non vi è memoria sul programma MapServer delle precedenti richieste. Tutte le informazioni sulla mappa sono continuamente inviate avanti e indietro dal cliente al server grazie al meccanismo di templating.

La resa di una carta di MapServer si basa su tre elementi:

  • il file di configurazione della carta richiesta
  • i layer contenuti in formati vari
  • eventuali modifiche inviate via l'URL di chiamata

Il file di configurazione è un semplice file di testo contenente delle parole chiavi che permettono di identificare gli elementi di configurazione della mappa. Il seguente è un esempio di file di configurazione che definisce una carta contente un solo layer di tipo linea chiamato "fiumi".

MAP
	NAME prov_ts
	STATUS ON
	SIZE 600 600
	EXTENT 2409000.00 5048000.00 2436000.00 5075000.00
	SHAPEPATH "../data"
	UNITS meters

	WEB
	  TEMPLATE "../templates/all.xml"
	  IMAGEPATH "C:\progetti\schede\schede\schedeWeb\tempImages\"
	  IMAGEURL "tempImages/"
	END # END_WEB

	LAYER
	  NAME fiumi
	  STATUS ON
	  DATA fiumi
	  TYPE LINE
	  CLASS
	    SYMBOL 0
	    NAME "fiumi"
            COLOR 0 0 0
	    SIZE 2
	  END # END_CLASS
	END # END_LAYER
END

MapServer fornisce un potente meccanismo di personalizzazione di una carta che consiste nella modifica del file di configurazione di una mappa tramite passaggio di parametri inviati con la richiesta URL.

Si tratta di una vera è propria sintassi, a volte difficile da applicare, che si basa sull'annidamento degli elementi del file di configurazione.

Ecco un esempio di chiamata che richiede la mappa chiedendo la modifica del colore utilizzato per la resa del layer "fiumi".

http://www.mioserver.it/mapserv?map=prov_ts.map&mode=map&map_fiumi_fiumi_color=0 0 255

Jemma si propone di fungere da memoria tra il cliente (un browser per esempio) e il server, intercettando le informazioni provenienti dal primo e generando le richieste URL da inviare al server http.

Se utilizzato all'interno di un server d'applicazione, per esempio, Jemma permette di memorizzare le preferenze dell'utente nella sessione http dell'utente, permettendo la costruzione di pagine dinamiche in java (java server pages o jsp) con mappe prodotte da MapServer.

L'oggetto Map

Il cuore di Jemma consiste in un unico oggetto, rappresentazione del file di configurazione di MapServer.

L'oggetto Map viene utilizzato per memorizzare le preferenze di un utente e permettere così di modificare l'aspetto della mappa a piacimento.

Diagramma rappresentante l'oggetto e gli oggetti contenuti. La freccia semplice indica un rapporto di uno a uno (un oggetto contiene un solo oggetto dell'altro tipo). Il tratto che termina con un rombo indica un rapporto uno a n (per esempio un oggetto Map può contenere numerosi oggetti Layer).

La base di ogni mappa resta il file di configurazione associato. Ogni attributo dell'oggetto Map può essere o non essere istanziato, ossia può avere o no un valore associato. Vengono prese in considerazioni solo gli attributi istanziati mentre per gli altri vengono utilizzati i valori di default del file di configurazione.

Ciò permette di modificare una mappa complessa indicando unicamente gli attributi che si vogliano modificare e ignorando tutti gli altri.

Jemma in un'applicazione J2EE

Jemma nasce all'origine come una libreria per server d'applicazione J2EE, ma può essere ugualmente usata all'interno di applicazioni Java o applet.

Se utilizzata all'interno di un server d'applicazione l'oggetto Map viene associato ad una sessione http e le informazioni scambiate con il cliente sono minime (identificatore della mappa, parametri di personalizzazione, immagine della mappa finita) aumentando il grado di sicurezza del sistema.

Il diagramma mostra le azioni necessarie che intervengono per completare una richiesta di una mappa da un browser verso Jemma.

Cinematica di una richiesta via Jemma in uno scenario di applicazione web con pagine dinamiche.

  1. Il browser richiede una pagina dinamica ad un server d'applicazione J2EE.
  2. Jemma costruisce la richiesta nella forma in un indirizzo URL e la invia al server d'applicazione ospitante MapServer.
  3. MaserServer esegue le operazioni richieste recuperando le informazioni necessarie (mappe, layer, simboli, …).
  4. MapServer crea la mappa e la coppia tra i file di immagini pubblici.
  5. MapServer utilizza un template XML per inviare le informazioni a Jemma.
  6. Jemma salva le informazioni sul contesto locale e invia una pagina html in risposta al browser contente l'indirizzo URL della mappa.
  7. Il browser riceve la pagina html e richiede al server http la mappa.
  8. Il server http invia la mappa in risposta al cliente.