• Non ci sono risultati.

4. Architettura Della Infrastruttura

4.2. Architettura dell’Infrastruttura

4.2.2. GWM-Engine Interface

L’interazione fra i servizi GO-WS e GeoMedia WebMap avviene tramite un’entità intermedia chiamata GWM-Engine Interface, progettata ed implementata appositamente con il fine di astrarre le componenti ed i meccanismi di GWM fornendo semplici chiamate alle operazioni GIS. L’impiego della libreria GWMEngineInterface per implementare i

servizi GO-WS costituisce un particolare caso d’uso, in quanto è stata realizzata come libreria di uso generico.

La libreria contiene il namespace GWMEngineInterface al cui interno sono definite le

classi che implementano le quattro tipologie di operazioni GIS presentate precedentemente.

Tutte le classi hanno in comune alcuni metodi e proprietà; due proprietà in particolare permettono di descrivere gli errori che si sono verificati durante l’invocazione di un metodo:

€ GeoEngineErrorMsg: riporta la descrizione di un fallimento attribuito al

motore GIS;

€ SystemErrorMsg: descrive un errore di sistema scaturito da altre condizioni

non legate a GWM;

4.2.2.1. Uso delle Classi

L’uso di una delle classi del namespace GWMEngineInterface avviene secondo una

procedura, detta SDES, composta da quattro passi: 1. Start-up: attivazione del motore GIS; 2. Data access: accesso ai dati geografici; 3. Execution: esecuzione dell’operazione GIS; 4. Shut-down: disattivazione motore GIS.

Seguendo questo schema si è certi che alla fine dell’esecuzione lo stato di GWM sarà ripristinato. Ciò è dovuto al fatto che gli oggetti COM istanziati, relativi alle librerie costituenti il motore GIS, sono rilasciati in modo controllato e del tutto invisibile all’utente. Se questo non accade, il comportamento di GWM ad ogni esecuzione è influenzato dalle precedenti.

4.2.2.1.1. Attivazione del motore GIS

Tutte le classi contenute all’interno del namespace GWMEngineInterface sono

accomunate dal meccanismo di attivazione di GWM che avviene tramite i costruttori delle classi, in modo:

€ diretto: al costruttore della classe interessata viene fornito il riferimento (handler) alla classe GWMMapServerHelper di GWM;

€ indiretto: la classe che implementa una tipologia di operazioni geografiche, abilita il motore GIS usando il riferimento alla classe HTTPServerUtility del

framework .NET passatogli tramite il costruttore. Tale classe è utilizzata per processare le richieste web.

4.2.2.1.2. Accesso ai Dati

L’accesso ai dati avviene tramite il metodo DataAccess, i dataset geografici sono

identificati tramite istanze della classe LayerIdentifier discussa in precedenza. Oltre ai layer è possibile specificare un’area di interesse descritta tramite la classe

BoundingBox

,

definita all’interno del namespace GenericLayerIdentifier.

Il metodo restituisce i dataset richiesti, modellati tramite istanze della classe

GRecordset di GWM, se non si sono presentati errori. Nel caso contrario, il metodo restituirà un valore logico corrispondente a “falso” e la descrizione dell’errore sarà riportata attraverso le due proprietà preposte.

4.2.2.1.3. Esecuzione dell’Operazione GIS

In generale le operazioni GIS accettano due dataset come operandi e restituiscono un nuovo dataset contenente il risultato. È stato scelto di limitare il numero di dataset a due solo per semplificare l’implementazione dell’infrastruttura, dato che GWM non impone limiti al riguardo.

Un’altra semplificazione è stata effettuata scegliendo di operare su interi dataset, limitati da un’area di intereresse, anziché su un insieme di feature. Specificare un insieme di feature afferenti ad un layer implica dover indicare un criterio di restrizione sui dati. Per poterlo identificare un insieme basta aggiungere una proprietà, alla classe preposta all’identificazione di un layer, in cui riportare la restrizione sotto forma di costrutto “SQL- WHERE”.

4.2.2.1.4. Disattivazione del motore GIS

L’architettura di GWM pone un forte vincolo sull’uso del motore GIS in quanto una sua istanza può servire solo una richiesta alla volta; dopo che l’operazione è stata effettuata è necessario disattivare GWM deallocando l’oggetto MapServer istanziato dalla classe che implementa l’operazione. L’eliminazione di tale oggetto COM può avvenire in due modi:

€ diretto, tramite il metodo ShutDownGeoEnginecomune a tutte le classi;

€ indiretto, tramite il distruttore della classe.

Da notare che qualsiasi richiesta rimane pendente se effettuata prima del rilascio dell’istanza del motore GIS.

4.2.2.2. Classi di GWM-Engine Interface

Il modello delle classi che implementano l’interfaccia GWM-Engine Interface è molto semplice: esso prevede la classe astratta CommonInterfaceElements in cui sono

illustrato il modello semplificato delle classi, per una descrizione completa vedere l’appendice C.

Figura 4.12

Modello UML delle classi di GWM-Engine Interface.

Le classi che ereditano da CommonInterfaceElements, raggruppano le operazioni

geografiche nelle quattro tipologie presentate.

La classe GeoProcessingimplementa le seguenti operazioni:

€ Clip: effettua l’operazione di Clip di un dataset utilizzando la geometria

definita mediante coordinate nello stesso sistema di riferimento del dataset di input;

€ Intersect: esegue l’operazione di Intersezione fra due dataset non nulli;

€ Merge: esegue l’operazione di Merge;

€ Union: effettua l’operazione di Unione fra due dataset;

La classe SelectBy implementa le operazioni di selezione per tema. Tali operazioni

restituiscono una lista contenente gli identificatori delle feature selezionate. I metodi esposti sono i seguenti:

€ Distance: dati due dataset ed una distanza espressa nell’unità di misura dei

dataset, seleziona le feature del dataset attivo (relativo al layer attivo) che si trovano alla data distanza dalle feature del dataset di selezione (relativo al layer di selezione).

€ Overlap: dati due dataset D1 e D2 (rispettivamente, attivo e di selezione) e due

generiche feature f1 e f2 tale che f1∈D1 e f2∈D2. Allora, il metodo seleziona tutte

le feature di D1 che rispettano uno dei seguenti criteri spaziali:

• f1 contiene f2;

• f1 interseca f2;

La classe Buffer espone i metodi necessari ad implementare due tipi di operazioni di

buffering, da eseguire su di un dataset:

€ BufferByDistanceConst: per le feature del dataset, crea una o più fasce di

rispetto definendole come successione di intervalli di distanze della forma “inf…sup”, ad esempio “0..100;101..200”. Il metodo necessita dell’unità di misura con cui la distanza è indicata.

€ BufferByDistanceField: permette di costruire un’area di rispetto attorno ad

una feature in base al valore di un suo attributo numerico.

Per entrambi i metodi è possibile indicare se il buffer deve avere i bordi squadrati od arrotondati. E’ possibile inoltre considerare i buffer che si intersecano come un’unica feature.

4.2.2.3. GWMEngineInterface.Service

Figura 4.13

Schema UML delle classi del namespace Service.

All’interno di questo namespace, figura 4.13, è definita una classe per materializzare i dataset e due classi per creare mappe a partire da dataset geografici e temi:

€ Export: permette di materializzare un dataset in GML od in formati proprietari

(attualmente solo shape file). I metodi di esportazione accettano un dataset, un nome con cui riferirlo ed un percorso (sul filesystem) dove materializzare i dati; € LayerRender: consente di restituire un dataset in un formato grafico. Perché

questo possa essere fatto, è necessario fornire un sistema di riferimento ed uno stile di visualizzazione;

€ MapRender: per poter creare una mappa sono necessari un insieme di temi, un

sistema di riferimento ed eventualmente un’area di interesse. Il metodo

ai dati è eseguito indirettamente in quanto al metodo sono indicati i temi tramite la collezione di tipo ThemeList, contenente la lista di temi descritti tramite i

parametri di identificazione (figura 4.8). Il sistema di riferimento di mappa è indicato tramite il percorso su filesystem ad un file, proprietario di GWM, che lo definisce. Il metodo restituisce, in caso non vi siano fallimenti, una URL alla cache di GWM dove è contenuto il file grafico. Sono previsti sia formati raster sia vettoriali, quali rispettivamente:

• JPG, PNG, GIF; • SVG, CGM.

Le prime due classi sono state progettate in modo tale da poter sfruttare gli ambienti, creati dall’uso delle classi GeoProcessing e Buffer. per restituire il risultato delle

operazioni geografiche.

Documenti correlati