5. Costruzione del grafo di riferimento
5.2. Grafo BDTRE
5.2.4 Analisi dei nodi BDTRE
5.2.4.4 Correzione errori residui
La correzione degli errori residui consiste nel troncamento degli elementi lineari in corrispondenza dei nodi ERR, con procedimento del tutto analogo a quanto descritto nel paragrafo 5.1.4.5.
Di seguito viene sinteticamente illustrata la sequenza di operazioni da svolgere per apportare la suddetta correzione, rimandando al paragrafo 5.1.4.5 per eventuali approfondimenti:
1. Selezionare ed esportare i nodi ERR1 ed ERR2 del vettore BDTRE-Nodi_v1 come Nodi_ERR_v1.shp.
2. Definizione delle linee di taglio:
• Estrazione delle coordinate per il punto finale delle linee di taglio, Tabella 5-45 e Tabella 5-46.
Tabella 5-45 Estrazione della longitudine traslata verso ovest dei punti del vettore Nodi_ERR_v1
Nodi_ERR_v1 – Calcolatore di Campi Nome campo Xf
Tipo campo Real(13, 10) Formula $x - 0.0000000001
Tabella 5-46 Estrazione della latitudine dei punti del vettore Nodi_ERR_v1
Nodi_ERR_v1 – Calcolatore di Campi Nome campo Yf
Tipo campo Real(13, 10)
Formula $y
• Conversione del vettore multi-punto Nodi_ERR_v1 a geometria puntuale, tramite lo strumento SAGA “Convert Multipoints to Points”, e successiva esportazione del layer risultante come Nodi_Start-End_v1;
• Generazione delle estremità terminali delle linee di taglio:
▪ aprire il file Nodi_Start-End_v1.dbf con Excel e salvare il contenuto del foglio di calcolo come Nodi_End_v1.csv;
▪ importare Nodi_End_v1.csv su Q-GIS selezionando, come coordinate, “Campo X” = Xf e
“Campo Y” = Yf;
▪ esportare il vettore Nodi_End_v1, appena ottenuto, sul file Nodi_Start-End_v1.shp, selezionando l’opzione “Aggiungi al layer” presente nella finestra di dialogo che verrà mostrata, Figura 5-47.
Figura 5-47 Aggiunta di Nodi_End_v1 al layer Nodi_Start-End_v1
124
• Definizione delle linee di taglio utilizzando lo strumento “Da punti a percorso” sul layer Nodi_Start-End_v1, scegliendo GeoID come “Espressione del gruppo di percorso”, Figura 5-48.
Figura 5-48 Generazione delle Linee_Split_v1 dalla congiunzione dei Nodi_Start-End_v1 con stesso GeoID
Le linee, così generate, possono essere esportate come Linee_Split_v1.shp.
3. Selezione degli elementi lineari da troncare, “EL_Split”:
• Generazione del campo “EL_Split” in cui elencare gli EL_ID degli elementi da troncare in corrispondenza del nodo ERR, Tabella 5-47.
Tabella 5-47 Concatenamento degli id senza estremità nei punti del vettore Nodi_ERR_v1
Nodi_ ERR_v1 – Calcolatore di Campi Nome campo EL_Split
Tipo campo String(40)
Formula
array_to_string(array_filter( array_foreach( generate_series( 0, array_length( string_to_array( "EL_ID", ','))-1), if(array_get(string_to_array( "Extr", ','), @element) = '', array_get(string_to_array( "EL_ID", ','), @element), '')), @element <> ''))
• Successiva ripartizione degli id concatenati in EL_Split su n colonne distinte, Tabella 5-48.
Tabella 5-48 Ripartizione degli id concatenati all’interno del campo EL_Split del vettore Nodi_ERR_v1
Nodi_ ERR_v1 – Calcolatore di Campi Nome campo EL_Split-n
Tipo campo String(10)
Formula array_get( string_to_array( "EL_Split" , ','), n-1)
Operazione da reiterare n volte incrementando n ad ogni ripetizione;
125
• Selezione degli elementi da troncare attraverso n operazioni di join tra i layer BDTRE_Selezione e Nodi_ERR_v1, inserendo nel “Campo unione” il valore EL_Split-n corrispondente all’iterazione raggiunta, Figura 5-49.
Figura 5-49 join di BDTRE_Selezione con Nodi_ERR_v1 attraverso l'id
Salvataggio dell’esito del primo join, Tabella 5-49.
Tabella 5-49 Individuazione degli elementi da correggere contenuti nel vettore BDTRE_Selezione (iterazione 1)
BDTRE_Selezione – Calcolatore di Campi Nome campo ERR
Tipo campo String(1)
Formula if( "Nodi_ERR_v1_N_Class" is null, 'f', 't')
Salvataggio dei risultati dei join successivi, Tabella 5-50.
Tabella 5-50 Individuazione degli elementi da correggere contenuti nel vettore BDTRE_Selezione (iterazione n)
BDTRE_Selezione – Calcolatore di Campi Aggiorna Campo ERR
Tipo campo String(1)
Formula if( "ERR" = 't', 't', if( "Nodi_ERR_v1_N_Class" is null, 'f', 't'))
• Selezione ed esportazione degli elementi da troncare e di quelli già corretti:
▪ Esportazione degli elementi con ERR = ‘t’ sul file EL_ERR_v1.shp;
▪ Esportazione degli elementi con ERR = ‘f’ sul file EL_Corretti_v1.shp.
126
4. Troncamento degli elementi di EL_ERR_v1 in corrispondenza delle Linee_Split_v1 con lo strumento SAGA “Split Lines with Lines”, Figura 5-50.
Figura 5-50 Troncamento di EL_ERR_v1 in corrispondenza di Linee_Split_v1
5. Pulizia delle geometrie del vettore Intersection con lunghezza nulla, generando il nuovo campo “L”, Tabella 5-51, ed eliminando tutti gli elementi con valore 0.
Tabella 5-51 Individuazione dei segmenti con lunghezza nulla presenti sul vettore Intersection
Intersection – Calcolatore di Campi Nome campo L
Tipo campo Real(10, 3) Formula $length
6. Salvataggio delle correzioni effettuate esportando il vettore Intersection sul layer EL_Corretti_v1 e scegliendo “Aggiungi al layer”.
7. Generazione di un nuovo set di identificativi univoci EL_ID, Tabella 5-52, ed aggiornamento dei campi GeoID_i e GeoID_f del layer EL_Corretti_v1.
Tabella 5-52 Attribuzione di un nuovo set di identificativi univoci per gli elementi del vettore EL_Corretti_v1
EL_Corretti_v1 – Calcolatore di Campi Nome campo EL_ID
Tipo campo String(10) Formula @row_number
127 Al termine di questa procedura tutti gli errori più evidenti dovrebbero essere stati rimossi. Si suggerisce, tuttavia, di ripetere la classificazione dei nodi per verificare che non vi siano altri errori non individuabili al primo tentativo.
Ripetendo la procedura una seconda volta si riscontra, infatti, la presenza di 12 nodi ERR1 non emersi in precedenza.
In questo caso, l’anomalia è dovuta alla presenza di due geometrie sovrapposte, per le quali ciascuno dei 12 vertici interni risulta condiviso tra più elementi lineari senza mai essere un’estremità (ERR1), Figura 5-51.
Figura 5-51 Geometria BDTRE duplicata (id = 87454)
L’errore non era rilevabile in precedenza poiché l’elemento sovrapposto veniva rimosso durante la fase di eliminazione dei duplicati per attributo (GeoID e id). Avendo rimpiazzato id con EL_ID, al termine del primo tentativo, la geometria non viene più vista come duplicata e nel corso della successiva iterazione emerge l’errore.
Rimuovendo, dunque, la geometria duplicata e ripetendo, un’ultima volta, la classificazione dei nodi, non verrà individuato nessun altro errore.
Analizzando i risultati ottenuti al termine del processo correttivo, illustrati in Figura 5-52, si osserva una buona corrispondenza tra il numero di nodi ESTR ed INT appartenenti alla rete BDTRE e quelli presenti sul corrispondente grafo OSM (Figura 5-37 a pag. 106).
Categorizzando le geometrie lineari BDTRE, sulla base dell’attributo el_str_cf si verifica, invece, una discreta sovrapponibilità tra la classificazione funzionale delle strade e l’attributo fclass degli elementi OSM (Figura 5-36 a pag. 106).
128
Figura 5-52 Risultato del processo correttivo dei nodi e degli elementi lineari BDTRE