• Non ci sono risultati.

Aggregazione addizionale degli elementi loop

5. Costruzione del grafo di riferimento

5.2. Grafo BDTRE

5.2.6 Costruzione degli archi BDTRE

5.2.6.2 Aggregazione addizionale degli elementi loop

Con questa procedura addizionale si vanno a ricercare gli elementi ulteriormente aggregabili, al fine di migliorare la sovrapponibilità delle geometrie risultanti con gli archi del grafo OSM.

Si osserva, in particolare, la presenza di alcuni elementi ad anello, generalmente rotatorie o piazze, che, non presentando una corrispondenza sulla rete OSM, generano discrepanze ed accentuano la frammentazione dei tracciati, Figura 5-55.

137

Figura 5-55 Esempio di elementi BDTRE ad anello senza una corrispondenza OSM

Figura 5-56 Nodi risultanti a seguito dell'aggregazione degli archi BDTRE costituenti un anello

Nell’esempio in Figura 5-55 si individuano due loop (elementi evidenziati in giallo) che non presentano una corrispondenza sul grafo OSM (arco riportato in verde). Questa discrepanza comporta che al singolo arco OSM corrispondano ben 7 archi BDTRE, intervallati da 4 nodi di intersezione non presenti sulla prima rappresentazione.

Aggregando gli archi che compongono ciascun anello, i vertici alle loro estremità non risulterebbero più dei punti d’intersezione (INT), ma dei punti di congiunzione tra il loop stesso e l’elemento adiacente (CONT), come in Figura 5-56. A seguito di una correzione di questo tipo sarebbe, quindi, possibile aggregare ulteriormente le geometrie in un unico elemento che, infine, corrisponderebbe all’arco OSM.

La correzione descritta nell’esempio può essere effettuata sull’intera rete procedendo come segue:

1. Occorre, innanzitutto, individuare gli elementi che costituiscono un anello chiuso interposto tra due segmenti di rettifilo.

Questa ricerca può essere svolta ragionando sull’identificativo spaziale (GeoID) dei nodi di estremità di ciascun elemento:

A. Due o più elementi costituiscono un loop solo se le loro estremità coincidono. In altre parole, due segmenti formeranno un anello se, pur seguendo percorsi differenti, avranno stesso punto iniziale e finale.

B. Non è, tuttavia, detto che questi elementi abbiano lo stesso orientamento ed immaginando una circolazione rotatoria è, anzi, probabile il contrario. Se così fosse, un arco partirebbe dal punto finale e terminerebbe nel punto iniziale del suo complementare.

138

Dopo aver ridefinito gli identificativi delle estremità del vettore Archi (GeoID_i e GeoID_f), si potrà generare un campo di unione attraverso la formulazione mostrata in Tabella 5-60, che metterà in pratica l’osservazione A, risolvendo l’incertezza espressa al punto B.

Tabella 5-60 Generazione del campo di unione degli elementi BDTRE che costituiscono un anello

Archi – Calcolatore di Campi Nome campo Unione

Tipo campo String(30)

Formula if( "GeoID_i" < "GeoID_f", concat("GeoID_i", '-', "GeoID_f"), concat("GeoID_f", '-', "GeoID_i"))

2. È possibile, conseguentemente, aggregare le geometrie sulla base del campo Unione, come mostrato in Figura 5-57.

Figura 5-57 Aggregazione degli elementi BDTRE costituenti un anello, attraverso il campo Unione

3. Il campo AR_Count è stato introdotto per conteggiare gli elementi uniti. Le geometrie che non compongono un loop non verranno aggregate e, quindi, saranno contraddistinte da AR_Count = 1.

Selezionando e rimuovendo dal layer Aggregato tutti gli elementi con AR_Count pari ad 1 verranno, dunque, conservati solo 138 geometrie chiuse ad anello.

4. A questo punto è necessario supervisionare gli elementi residui e, dal confronto con gli archi OSM, stabilirne o meno la necessità di aggregazione. Dalla disamina dei 138 elementi del vettore Aggregato si determinano i seguenti risultati:

• 41 anelli non hanno un corrispettivo OSM e la loro aggregazione si rende, dunque, necessaria;

• 97 loop trovano, invece, effettiva corrispondenza sul grafo OSM e vengono, quindi, rimossi dal layer Aggregato.

139 5. Per unire i valori ottenuti alle geometrie contenute sul layer EL_Corretti_v1, si suggerisce di fare

ricorso allo strumento “Unisci attributi per posizione”, come mostrato in Figura 5-58.

Figura 5-58 Unione degli attributi dal layer Aggregato con le geometrie del vettore EL_Corretti_v1

Il layer Vettore unito, così ottenuto, può essere esportato sul file EL_Corretti_v1.shp selezionando l’opzione “Sovrascrivi File”.

6. Il campo Geo_Count, previsto in fase di aggregazione (Figura 5-57), serve per valutare se l’estremità iniziale degli elementi aggregati è la stessa. Quando il Geo_Count è pari ad 1 significa, infatti, che le geometrie hanno origine nello stesso punto e, quindi, che sono tutte orientate allo stesso modo.

È indispensabile che gli elementi aggregati in un loop abbiano stessa direzione perché, viceversa, la geometria risultante avrebbe le estremità iniziale e finale coincidenti (GeoID_i = GeoID_f). Si rende, dunque, necessario invertire il verso degli elementi il cui complementare ha orientamento opposto.

Questa operazione può essere eseguita come segue:

• Si devono, innanzitutto, scegliere gli elementi da invertire presenti sul layer EL_Corretti_v1.

Come anticipato, i loop costituiti da geometrie con verso discorde sono contraddistinti da un valore di Geo_Count > 1, ma adottando questo unico criterio di selezione verrebbero coinvolti sia gli elementi da invertire che i loro rispettivi complementari. Non è rilevante quale degli

140

elementi dell’anello venga scelto ma è chiaro che, per ottenere un orientamento concorde, si debba eseguire l’inversione solo di una delle parti complementari.

Per far fronte a questo inconveniente è possibile ragionare sull’attributo Arco_v2, introdotto in fase di aggregazione (punto 2, Figura 5-57), in cui viene riportato l’identificativo del primo elemento aggregato. Sul layer EL_Corretti_v1, dunque, si potrà selezionare solo il primo elemento costitutivo di ciascun loop (Arco = Arco_v2) contenente una geometria dal verso discorde (Geo_Count > 1), come indicato in Tabella 5-61.

Tabella 5-61 Selezione degli elementi di loop da invertire

EL_Corretti_v1 – Seleziona con Espressione Formula "Arco" = "Arco_v2" and "Geo_Count" > 1

• Si può, quindi, utilizzare lo strumento “Inverti verso linea” sulla selezione effettuata;

• Si sostituiscono, infine, le geometrie del vettore Invertito sul layer EL_Corretti_v1.

7. È opportuno, a questo punto, completare il campo Arco_v2 del vettore EL_Corretti_v1, per riportare anche gli identificativi degli archi non coinvolti nell’aggregazione addizionale, Tabella 5-62.

Tabella 5-62 Aggiornamento dell’identificativo Arco_v2 derivante dall’aggregazione addizionale degli elementi BDTRE

EL_Corretti_v1 – Calcolatore di Campi Aggiorna campo esistente Arco_v2

Tipo campo String(10)

Formula if("Arco_v2" is null, "Arco", "Arco_v2")

8. Occorre, successivamente, intervenire sull’ordine di aggregazione per evitare che una nuova classificazione dei nodi porti alla luce la presenza di errori. La soluzione più semplice consiste nel modificare l’attributo Order dei soli elementi complementari appartenenti ad un loop.

Si noti, innanzitutto, che nel caso in esame, le singole geometrie che costituiscono un anello non sono mai più di 9. Con la soluzione seguente si riesce, dunque, a correggere la sequenza di unione (Order) dei segmenti che costituiscono il primo arco di un loop, senza generare conflitti con l’ordine di aggregazione degli elementi del suo complementare:

• Per gli elementi che compongono il primo arco di un loop con versi concordi (Arco = Arco_v2 e Geo_Count = 1) si incrementa di 10 l’attributo Order. In questo modo verranno aggregati con lo stesso ordine originale, ma solo dopo i segmenti che compongono l’arco complementare.

• Per gli elementi che compongono il primo arco di un loop con versi discordi (Arco = Arco_v2 e Geo_Count > 1), invece, si sottrae a 20 il valore di Order. Così facendo verranno aggregati con ordine inverso rispetto all’originale, ma solo dopo i segmenti che compongono l’arco complementare.

• In tutti i casi rimanenti l’attributo Order non necessita variazioni.

141 Si introduce, quindi, il nuovo campo Order_v2, Tabella 5-63.

Tabella 5-63 Generazione del campo Order_v2 per il layer EL_Corretti_v1

EL_Corretti_v1 – Calcolatore di Campi Nome campo Order_v2

Tipo campo Integer(2)

Formula if("Arco" = "Arco_v2" and "Geo_Count" = 1, 10 +"Order", if("Arco" =

"Arco_v2" and "Geo_Count" > 1, 20 - "Order", "Order"))

In seguito, si utilizza il comando “Ordina con espressione” per ordinare le geometrie di EL_Corretti_v1 secondo l’attributo Order_v2. Il layer Ordinato può essere esportato sovrascrivendo il file EL_Corretti_v1.shp.

9. Si aggregano, a questo punto, gli elementi del layer EL_Corretti_v1 secondo l’attributo Arco_v2, Figura 5-59.

Figura 5-59 Aggregazione delle geometrie del vettore EL_Corretti_v1 secondo l’attributo Arco_v2

Il vettore Aggregato, contenente 7409 archi, può essere esportato come AGG_Archi.

10. Si ridefiniscono, quindi, i campi GeoID_i, GeoID_f e si aggiorna la classificazione dei nodi del vettore AGG_Archi, ripetendo gli step esposti al paragrafo 5.2.4.1 e salvando i risultati su un nuovo file Nodi_AGG.shp. Da quest’operazione si ottengono i seguenti risultati:

• 4672 nodi INT;

• 97 nodi ESTR;

• 77 nodi CONT;

• 31279 vertici interni (null).

La presenza residua di nodi CONT indica la possibilità di aggregare ulteriormente le geometrie, operazione che verrà svolta nel paragrafo seguente.

142