• Non ci sono risultati.

Definizione delle proprietà globali degli archi

5. Costruzione del grafo di riferimento

5.2. Grafo BDTRE

5.2.6 Costruzione degli archi BDTRE

5.2.6.4 Definizione delle proprietà globali degli archi

147

Tabella 5-67 Ripartizione del campo AGG_L [m] in 2 colonne di lunghezza inferiore a 254 caratteri

Aggregato – Calcolatore di Campi Nome campo AGG_L1

Tipo campo String(254) Formula

if( length( "AGG_L [m]" ) <= 254, "AGG_L [m]", array_to_string(

array_slice( string_to_array( "AGG_L [m]", ','), 0, floor( array_length(

string_to_array( "AGG_L [m]", ','))/2) ) ) )

Aggregato – Calcolatore di Campi Nome campo AGG_L2

Tipo campo String(254) Formula

if( length( "AGG_L [m]" ) <= 254, null , array_to_string( array_slice(

string_to_array( "AGG_L [m]", ','), floor( array_length( string_to_array(

"AGG_L [m]", ','))/2 + 1), -1) ) )

Il layer Aggregato, così ottenuto, può essere esportato, infine, come Archi_Def.shp, sovrascrivendo il file esistente.

148

Tabella 5-68 Implementazione in Q-GIS del calcolo di TGM, stimato come media pesata sulle lunghezze

Archi_Def – Calcolatore di Campi Nome campo TGM

Tipo campo Integer(5)

Formula

array_sum( array_foreach( generate_series(0, array_length(

string_to_array("AGG_TGM", ',')) -1), array_get(

string_to_array("AGG_TGM", ','), @element) * array_get( array_cat(

string_to_array("AGG_L1", ','), if("AGG_L2" is null, array(), string_to_array("AGG_L2", ','))), @element) ) ) / array_sum(

array_foreach( array_cat( string_to_array("AGG_L1", ','), if("AGG_L2" is null, array(), string_to_array("AGG_L2", ','))), to_real(@element) ) )

Le funzioni utilizzate in Tabella 5-68 sono sufficientemente auto esplicative e si rimanda al manuale di Q-GIS per eventuali chiarimenti.

Di seguito si riportano, dunque, solo gli espedienti escogitati per un uso ottimale delle funzioni:

• Il modo più rapido per ottenere il prodotto dell’i-esimo valore di AGG_TGM con la relativa lunghezza AGG_L consisterebbe nell’effettuare un ciclo tra gli elementi dei due vettori e moltiplicare ad ogni iterazione gli elementi con stesso indice. Questa operazione sarebbe facilmente eseguibile attraverso un ciclo FOR, ma questa opzione non è presente sul Calcolatore di Campi.

L’unico modo per ottenere il risultato desiderato consiste, dunque, nel costruire la funzione FOR attraverso l’utilizzo combinato delle funzioni array_foreach, generate_series ed array_get:

Con la funzione generate_series si genera un vettore contenente una successione di numeri interi che, in questo caso, sarà ordinata da 0 ad n – 1, con n corrispondente al numero di elementi concatenati (array_length). Questa sequenza fornisce gli indici corrispondenti alla posizione di ciascun elemento all’interno del vettore. Si fa presente che avendo valorizzato tutti gli attributi mancanti, paragrafo 5.2.5, le stringhe contenute nei campi denotati con

“AGG” rappresentano dei vettori (string_to_array) con lo stesso numero di elementi (array_length).

Passando, successivamente, generate_series come argomento di array_foreach, si effettua un ciclo in cui ad ogni iterazione il valore @element corrisponde all’indice corrente dell’elemento.

Si potranno, infine, selezionare gli elementi in base alla loro posizione all’interno del vettore, utilizzando array_get per estrarre le entità con indice pari ad @element.

• Quando l’array AGG_L2 è vuoto, il concatenamento, array_cat, dei due campi complementari (AGG_L1, AGG_L2) produce un errore che restituisce il valore null. Per evitare l’inconveniente è sufficiente sostituire ad AGG_L2 un vettore vuoto(array()).

• La somma delle lunghezze presente al denominatore restituisce un errore se non si provvede a convertire gli elementi della sommatoria in numeri decimali. In questo caso si usa la funzione array_foreach in maniera tradizionale, per sostituire ogni elemento del vettore con il corrispondente valore numerico (to_real(@element))

149 2. Per quanto riguarda l’attributo relativo alla capacità C, si prospettano due alternative:

• Valore minimo

Si può adottare per l’intero arco il valore associato al segmento con la capacità minima, immaginando che tale elemento produca l’effetto “collo di bottiglia” in grado di compromettere il deflusso dell’intera tratta, Tabella 5-69.

Tabella 5-69 Implementazione in Q-GIS del calcolo di Cmin, stimata ipotizzando l’effetto “collo di bottiglia”

Archi_Def – Calcolatore di Campi Nome campo Cmin

Tipo campo Integer(5)

Formula array_min( array_foreach( string_to_array("AGG_C", ','), to_int(@element) ) )

• Valore medio

Risulta poco sensato calcolare il valore medio di capacità semplicemente attraverso una media aritmetica. Una soluzione ragionevole si può individuare esplorando la teoria del deflusso ininterrotto e le ipotesi di Greenshields, considerando le formule mostrare in Figura 5-63.

Figura 5-63 Teoria del deflusso ininterrotto - Ipotesi di Greenshields

𝑉 = 𝑉𝑓 ∙ (1 −𝐾𝑐𝐾) 𝐾 = 𝐾𝑐 ∙ (1 − 𝑉

𝑉𝑓)

𝑄 = 𝑉 ∙ 𝐾𝑐 ∙ (1 − 𝑉

𝑉𝑓) = 𝐾𝑐 ∙ (𝑉 −𝑉2 𝑉𝑓) 𝐾𝑐𝑟 =𝐾𝑐

2

150

Dalle ipotesi di Greenshields si ricava la seguente Formula 5-15.

Formula 5-15 Flusso critico Qcr e densità di congestionamento Kc

𝑄𝑐𝑟 = 𝐾𝑐 ∙ (𝑉 −𝑉2

𝑉𝑓) = 𝐾𝑐 ∙ [ 𝑉𝑓

2 − (𝑉𝑓

2 )

2

𝑉𝑓 ]

=1

4𝐾𝑐 ∙ 𝑉𝑓 𝐾𝑐 = 4𝑄𝑐𝑟

𝑉𝑓

Ipotizzando che la capacità del tronco stradale C sia stata progettata per sostenere il flusso critico Qcr si ottiene la Formula 5-16.

Formula 5-16 Densità di congestionamento Kcin funzione della capacità C

𝐾𝑐 = 4𝐶 𝑉𝑓

Il valore di densità Kc di un arco, dato dall’aggregazione di più tratte, può essere calcolato come somma del numero di veicoli presenti su ciascun segmento (pari al prodotto Kci. Li), in condizioni di congestionamento, divisa per la lunghezza totale dell’arco, come in Formula 5-17.

Formula 5-17 Densità di congestionamento Kcglobale di un arco

𝐾𝑐𝐴𝑟𝑐𝑜 =∑ 𝐾𝑐𝑛𝑖 𝑖∙ 𝐿𝑖

𝐿𝐴𝑟𝑐𝑜 =∑ 𝐾𝑐𝑛𝑖 𝑖∙ 𝐿𝑖

∑ 𝐿𝑛𝑖 𝑖

Il valore medio di capacità per l’intero arco, quindi, può essere calcolato come in Formula 5-18:

Formula 5-18 Capacità media di un arco

𝐶𝐴𝑟𝑐𝑜 =1

4𝐾𝑐𝐴𝑟𝑐𝑜∙ 𝑉𝑓𝐴𝑟𝑐𝑜 =1 4

∑ 𝐾𝑐𝑛𝑖 𝑖∙ 𝐿𝑖

∑ 𝐿𝑛𝑖 𝑖 ∙∑ 𝐿𝑛𝑖 𝑖

∑ 𝐿𝑖 𝑉𝑖

𝑛𝑖

=1 4

∑ 𝐾𝑐𝑛𝑖 𝑖∙ 𝐿𝑖

∑ 𝐿𝑖 𝑉𝑖

𝑛𝑖

=

∑ 𝐶𝑖∙𝐿𝑖 𝑉𝑖

𝑛𝑖

∑ 𝐿𝑖 𝑉𝑖

𝑛𝑖

Implementando la Formula 5-18 nel Calcolatore di Campi, si ricava quanto mostrato in Tabella 5-70.

Tabella 5-70 Implementazione in Q-GIS del calcolo di Cmed, stimata secondo le ipotesi di Greenshields

Archi_Def – Calcolatore di Campi Nome campo Cmed

Tipo campo Integer(5)

Formula

array_sum( array_foreach( generate_series( 0, array_length(

string_to_array("AGG_C" ,',') )-1), array_get( string_to_array("AGG_C" ,','),

@element) * array_get( array_cat( string_to_array("AGG_L1", ','), if("AGG_L2" is null, array(), string_to_array("AGG_L2", ','))), @element) /1000 / array_get( string_to_array("AGG_Vf" ,','), @element) ) ) / array_sum( array_foreach( generate_series( 0, array_length(

string_to_array("AGG_C" ,',') )-1), array_get( array_cat(

string_to_array("AGG_L1", ','), if("AGG_L2" is null, array(), string_to_array("AGG_L2", ','))), @element) /1000 / array_get(

string_to_array( "AGG_Vf" ,','), @element) ) )

151 Chiaramente il caso in esame, riguardante una realtà urbana, presenta una rete stradale costellata da numerose intersezioni ed è, quindi, distante dalle ipotesi di flusso ininterrotto.

Considerate, tuttavia, tutte le incertezze e le approssimazioni adottate in questa procedura una ulteriore semplificazione può ritenersi accettabile.

3. Definizione degli attributi globali di velocità Vf e V:

La velocità di flusso libero Vf e la velocità media V di ciascun arco, vengono stimate come la velocità media di percorrenza, secondo quanto mostrato in Formula 5-19.

Formula 5-19 Velocità media di percorrenza

𝑉𝐴𝑟𝑐𝑜 =∑ 𝐿𝑛𝑖 𝑖

∑ 𝑡𝑛𝑖 𝑖 =∑ 𝐿𝑛𝑖 𝑖

∑ 𝐿𝑖 𝑉𝑖

𝑛𝑖

• n = n° totale di elementi aggregati nell’arco;

• i = valore relativo all’i-esimo elemento concatenato.

Di seguito si riportano le rispettive formulazioni, implementate in Q-GIS, Tabella 5-71 e Tabella 5-72.

Tabella 5-71 Implementazione in Q-GIS del calcolo di Vf, stimata come velocità media di percorrenza

Archi_Def – Calcolatore di Campi Nome campo Vf

Tipo campo Integer(3)

Formula

array_sum( array_foreach( generate_series( 0, array_length(

string_to_array("AGG_Vf" ,',') )-1), array_get( array_cat(

string_to_array("AGG_L1", ','), if("AGG_L2" is null, array(), string_to_array("AGG_L2", ','))), @element) /1000 ) ) / array_sum(

array_foreach( generate_series( 0, array_length(

string_to_array("AGG_Vf" ,',') )-1), array_get( array_cat(

string_to_array("AGG_L1", ','), if("AGG_L2" is null, array(), string_to_array("AGG_L2", ','))), @element) /1000 / array_get(

string_to_array( "AGG_Vf" ,','), @element) ) )

Tabella 5-72 Implementazione in Q-GIS del calcolo di V, stimata come velocità media di percorrenza

Archi_Def – Calcolatore di Campi Nome campo V

Tipo campo Integer(3)

Formula

array_sum( array_foreach( generate_series( 0, array_length(

string_to_array("AGG_V" ,',') )-1), array_get( array_cat(

string_to_array("AGG_L1", ','), if("AGG_L2" is null, array(), string_to_array("AGG_L2", ','))), @element) /1000 ) ) / array_sum(

array_foreach( generate_series( 0, array_length(

string_to_array("AGG_V" ,',') )-1), array_get( array_cat(

string_to_array("AGG_L1", ','), if("AGG_L2" is null, array(), string_to_array("AGG_L2", ','))), @element) /1000 / array_get(

string_to_array( "AGG_V" ,','), @element) ) )

152

A questo punto, la procedura può dirsi conclusa ed analizzando i risultati ottenuti si ricavano le seguenti osservazioni:

• Si ricorda che i dati di domanda campionati da TIM sono forniti con granularità oraria e verranno, quindi, impiegati per stimare i flussi orari. Per poter confrontare i flussi stimati su base TIM con il traffico in Figura 5-64 occorrerà, preventivamente, convertire il TGM nel flusso orario passando attraverso la distribuzione oraria del traffico.

• Confrontando visivamente Cmin con Cmed, rispettivamente in Figura 5-65 e Figura 5-66, si verifica che la teoria di Greenshields conduce a risultati tanto più verosimili quanto più si è prossimi alle ipotesi di flusso ininterrotto. In altre parole, Cmed appare più adatta nel descrivere le tratte extraurbane ed autostradali, mentre Cmin è più indicata per il contesto urbano. In entrambi i casi, tuttavia, la capacità appare sensibilmente sovrastimata, con circa il 50% degli archi caratterizzati da valori superiori ai 4000 veicoli/h.

• Analizzando le velocità non si osservano grandi differenze tra la velocità di flusso libero Vf e velocità di percorrenza media giornaliera V, rispettivamente in Figura 5-67 e Figura 5-68. Questo risultato introduce un certo scetticismo sul metodo di stima dell’attributo aspd_max da cui si è ricavato V. Si ipotizza che la velocità media di percorrenza sia stata ricavata, piuttosto, come velocità media temporale, osservando le velocità istantanee dei veicoli in transito su una sezione di misura. Una stima di questo tipo spiegherebbe le velocità, relativamente elevate, associate alle tratte urbane che, a causa della presenza di innumerevoli intersezioni, dovrebbero essere affette da significativi rallentamenti.

Come auspicabile, la distribuzione spaziale delle velocità risulta, tuttavia, ragionevole, con valori più elevati per le tratte extraurbane e ridotti nei contesti urbani.

Figura 5-64 Rappresentazione del TGM ricavato per ciascun arco del grafo [veicoli/giorno]

153

Figura 5-65 Rappresentazione di Cmin ricavata per ciascun arco del grafo [veicoli/ora]

Figura 5-66 Rappresentazione di Cmed ricavata per ciascun arco del grafo [veicoli/ora]

154

Figura 5-67 Rappresentazione della Vf ricavata per ciascun arco del grafo [km/h]

Figura 5-68 Rappresentazione della V ricavata per ciascun arco del grafo [km/h]

155