• Non ci sono risultati.

CAPITOLO 6 – PROGETTAZIONE DELLE FUNZIONI

7.4 L’APPLICATIVO

7.4.2 Funzionamento dell’applicativo: caso singolo punto

Nel caso di applicazione su singolo punto, si rende cliccabile la mappa e si seleziona il punto da analizzare (c’è anche un opzione per abbandonare e riprendere un altro punto nel caso di errore di selezione).

Una volta scelto il punto e selezionato il sistema di indicatori scelto, l’applicativo fa la seguente cosa (espressa in metalinguaggio):

Per ogni indicatore nel sistema

Per ogni funzione all’interno dell’indicatore Calcola la funzione nel punto Filtra il risultato della funzione Nuova funzione

Nuovo indicatore

Le varie funzioni di aggregazione sono calcolate partendo dalla selezione degli elementi presenti nel layer richiamato dalla funzione secondo i parametri di query (geografica e su attributi) anch’essi richiamati dalla funzione

Pertanto abbiamo che il calcolo di una funzione è eseguito nel seguente modo (in metalinguaggio):

Selezione su attributi di funzione.layer Selezione Geografica di funzione.layer

Applica funzione.tipo sui restanti elementi dell’insieme

Come possiamo notare, quindi, lo schema seguito è:

Funzione( σgeog ( σattr ( Layer ) , Pappl ))

Schema che abbiamo definito nei capitoli precedenti (capitolo 5)

.

Ricordiamo che nel caso in cui la funzione fosse una distanza su percorso la formula diventerebbe dipendente dal layer di supporto. Stesso discorso vale per la condizione geografica che se fosse una condizione di intorno su percorso, dipenderebbe a sua volta dal layer di supporto.

Le varie selezioni producono un cursore che viene passato allo step successivo. Gli aggregatori implementati nel prototipo sono i seguenti:

• Distanza euclidea

• Distanza su percorso (in minuti) • Conteggio elementi

• Somma su un attributo • Media su un attributo • Massimo su un attributo • Minimo su un attributo

CAPITOLO 7 – Il Software

Una volta applicato l’aggregatore ottenuto il risultato “grezzo” della funzione; tale risultato viene “affinato” passando attraverso una fase di filtraggio, ovvero mediante l’ausilio della funzione filtrafunz che prende in input il valore risultato e il filtro unico corrispondente alla funzione e all’indicatore che abbiamo calcolato e ottiene in output un valore normalizzato (compreso nell’intervallo chiuso [0 , 10]) che rappresenta la bontà del punto considerato.

Passiamo alla descrizione di come vengono calcolati gli aggregatori.

7.4.2.1 Distanza euclidea

Il nome per esteso dell’aggregatore in questione è “distanza euclidea dal più

vicino elemento di un insieme”.

L’insieme in questione è il cursore calcolato mediante le selezioni geografiche e su attributi dal layer di partenza indicato nella definizione della funzione nel database di supporto.

La distanza euclidea viene calcolata mediante un’interfaccia di tipo

iProximityOperator.

Questa interfaccia implementa un operatore il cui scopo è il calcolo della distanza tra due geometrie.

La nostra funzione pertanto crea un IProximityOperator e mediante il suo membro ReturnDistance applicato al punto di applicazione e a tutti gli elementi del cursore che abbiamo creato al passo precedente presi uno per uno, calcola la distanza euclidea ad ogni elemento.

Una volta fatto ciò, restituisce in output la minore di tutte queste distanze calcolate.

Attenzione: l’operatore IProximityOperator applicato ad aree, restituisce il punto dell’area più vicina al punto di applicazione della nostra funzione.

7.4.2.2 Distanza su percorso

Come per il caso precedente di distanza euclidea, anche per la distanza su percorso si parla di “distanza su percorso dall’elemento di un insieme più vicino

al nostro punto di applicazione”.

Anche qui abbiamo un cursore da cui partire che è frutto delle elaborazioni ai passi precedenti e anche qui abbiamo le informazioni registrate sul nostro database di supporto; quello che cambia rispetto alla distanza euclidea è ovviamente il metodo di calcolo e di implementazione della funzione di aggregazione.

Per i nostri scopi, abbiamo bisogno di un layer lineare che funga da supporto. La funzione, verrà implementata mediante la libreria Pathfinder di ESRI.

Tale libreria chiede che il nostro layer di supporto faccia parte di una geometric network.

Il movimento delle persone, il trasporto e la distribuzione di merci e servizi, la consegna di risorse ed energia e la comunicazione di informazioni abbisognano di un sistema di reti definibile.

In Arcgis le reti sono modellate come grafi non planari mono-dimensionali o come reti geometriche (geometric network) composte di features. Queste features sono costrette ad esistere dentro la rete e possono essere considerate come features di rete. Arcgis automaticamente mantiene la relazione topologica tra le features di rete che compaiono in una certa rete geometrica.

La connettività tra queste features è basata su coincidenze geometriche (di qui il nome di reti geometriche).

Una rete geometrica ha una rete logica corrispondente che è rappresentata dall’insieme delle feature class che la costituiscono.

La rete logica è la rappresentazione fisica della connettività di rete.

C’è un rapporto uno a uno tra gli elementi della rete logica e quelli della rete geometrica.

Una volta ottenuta la geometric network, ovvero una topologia costruita sulla base di layer lineari e puntuali (barriere caselli e semafori), abbiamo uno strumento di supporto perfetto per la nostra ricerca.

Pathfinder è uno strumento per il calcolo di cammini minimi tra due punti su grafi

pesati.

Dando in input a Pathfinder due punti qualsiasi e una geometric network, esso fa le seguenti cose:

• Controlla un intorno del punto di partenza e cerca il più vicino punto sul grafo all’interno di tale intorno

• Controlla un intorno del punto di arrivo e cerca il più vicino punto sul grafo all’interno di tale intorno

• Calcola, tra tutti i cammini tra i due punti sul grafo, il cammino minimo tenendo conto del peso associato a ciascun arco

CAPITOLO 7 – Il Software

Figura 38 – Il funzionamento di pathfinder

La figura 38 esemplifica i passi eseguiti da pathfinder per la ricerca del cammino tra due punti.

Alcune precisazioni sul funzionamento della libreria:

• Pathfinder lavora solo su punti. Per lavorare su geometrie differenti, bisogna fornire allo strumento un punto significativo della geometria (quale il punto centrale del segmento per quanto riguarda le linee o il centroide per quanto riguarda le aree) per riportarci nella situazione di distanza tra punti.

• Se anche uno solo dei due punti che vogliamo unire dal percorso minimo è troppo distante dalla rete (non contiene un punto della rete all’interno del suo intorno), Pathfinder genera un errore, pertanto è consigliabile lavorare con reti geometriche formate da layer lineari molto fitti oppure lavorare solo esclusivamente su punti vicini alla rete.

7.4.2.3 Conteggio e operazioni su attributi

Le funzioni di conteggio, somma su attributo, media su attributo, massimo e minimo su attributo, sono implementate mediante un’unica funzione che per comodità di programmazione, le calcola tutte e restituisce in output solo quella desiderata dall’utente.

Per fare questo, la nostra implementazione della funzione prende in input, oltre che il cursore creato mediante le selezioni al passo precedente, anche una variabile che ci dice quale sia il risultato che più interessa all’utente.

Le funzioni sono calcolate in maniera molto semplice, infatti, la loro implementazione è rappresentata semplicemente mediante un ciclo sul cursore (creato al passo precedente e descritto in 4.3.2). Ad ogni passo di iterazione, si aggiorna un counter, si somma un attributo (nel caso ci sia) e si guarda se l’eventuale valore dell’attributo è minore del minimo relativo o maggiore del massimo relativo.

Finito il ciclo, si prende il valore di somma e si divide per il valore counter ottenendo così anche la media.

Finito il loop si controlla quale fosse la richiesta dell’utente e si scrive in output la variabile corrispondente a tale richiesta.

7.4.2.4 Filtraggio dei valori di una funzione

Come gia espresso in precedenza (paragrafo 5.1.1) il risultato delle funzioni è dipendente dalla grana del calcolo e dal tipo delle funzioni stesse.

Si avrà pertanto, quasi sicuramente, che due risultati provenienti da due funzioni differenti avranno due diverse scale di valori (supponiamo ad esempio di prendere una distanza su base metrica e un conteggio di elementi).

Inoltre c’è da considerare il fatto che mentre alcune funzioni vengono massimizzate tanto più alto è il numero che otteniamo come risultato, altre hanno più valore se il risultato si avvicina a zero (come avveniva nell’esempio riportato qualche riga sopra).

Per questi due motivi, c’è bisogno di una funzione di filtro, una funzione che prenda un valore reale e lo trasformi in un valore normalizzato appartenente ad un intervallo (noi prenderemo come intervallo l’insieme chiuso [0,10].

Detto K l’insieme delle funzioni geografiche e I l’insieme degli indicatori, la funzione filtro ha la seguente definizione:

Filtro: I × K × R Æ [0,10]

Come gia asserito in fase di editing, esiste nel nostro database di supporto archivio che associa ad ogni coppia <nome funzione , nome indicatore> una look up table. La funzione di filtro che viene applicata ai risultati delle funzioni, altri non è che un select case sul risultato della funzione che associa a tale valore un valore “qualificato”, ovvero è un espressione del tipo:

CAPITOLO 7 – Il Software

Documenti correlati