QGIS: LOCALIZZAZIONE OTTIMALE

Immaginate di essere incaricati dal Sindaco della vostra città per la localizzazione ottimale di un nuovo plesso scolastico e di volere utilizzare QGIS (insieme ad altri strumenti) per farlo.

Avete quindi a disposizione due raster ( DEM  e uso suolo dell’area comunale) e due layer vettoriali (siti ricreativi e scuole preesistenti dell’area comunale) con i quali  elaborare un possibile risultato.

Questa problematica va svolta fissando dei criteri soggettivi nella predisposizione di una certa zona caratterizzata dalle quattro proprietà sopraelencate ad accogliere un nuovo plesso scolastico. Si rende quindi necessario classificare ogni set di dati su una scala numerica omogenea che sia indicativa di questa predisposizione (si utilizzerà una scala da 1 a 10 indicando con i valori più elevati i siti più “accoglienti”).

 Procedimento:

 Carichiamo il DEM in QGIS:

dem
screenshot QGIS – DEM

calcoliamo la pendenza (slope) con l’analisi geomorfologica:

raster => analisi geomorfologica => Pendenza (slope)

slope
finestra di dialogo

il raster di uscita ‘slope.tif’ :

slope
screenshot slope non riclassificato

per poter usare quest’ultimo strato informativo occorre ‘riclassificarlo’ in funzione di una scala omogenea (scala da 1 a 10) secondo la seguente legge:

legge_1
legge di variazione slope

graficamente avremo:

legge_slope
rappresentazione grafica delle legge di riclassificazione

in altri termini: per tutti i valori di ‘slope’ minori di 10 (cioè un valore ottimale per la realizzazione di un plesso scolastico) assoceremo il valore massimo della scala omogenea 10; per valori di ‘slope’ superiori a 30 (cioè un valore assolutamente da evitare per la realizzazione di un plesso scolastico) assoceremo il valore minimo della scala omogenea 1; per tutti gli altri valori compresi tra 10 e 30 utilizzeremo una variazione lineare descritta nella legge stessa (-9/20*slope+29/2) equazione facilmente ricavabile impostando il passaggio delle retta per i due punti (10,10) e (30,1).

Vediamo come riclassificare il raster slope utilizzando il calcolatore Raster di QGIS (senza scomodare GRASS):

dal menù Raster => Calcolatore raster

calcolatore_raster
finestra di dialogo del calcolatore raster di QGIS

l’espressione da utilizzare è un pò complessa in quanto occorre utilizzare le istruzioni condizionali, ma nulla di impossibile (vedasi la documentazione di QGIS):

( “slope@1”  < 10 )  * 10 +  ( ( “slope@1” > 10 ) and ( “slope@1” <= 30 ) ) * ( “slope@1” * ( – 9.00/20.00) + 14.5 ) + ( “slope@1”   >  30 ) * 1

si noterà che l’espressione ha tre addendi, ognuno dei quali è racchiuso tra parentesi tonde: ciò significa che l’espressione all’interno restituirà  1 o 0 (vero o falso), poi la moltiplicazione farà in modo da ottenere il valore desiderato.

Ecco il risultato della riclassificazione:

slope_reclass
screenshot riclassificazione slope

come è ovvio i valori della riclassificazione avranno: il minimo 1; il massimo 10.

valori_min_max
riclassificazione slope

Vediamo ora come utilizzare il raster usosuolo; quest’ultimo è caratterizzato da #7 classi (da 1 a 7) e sono rispettivamente terre aride, acqua, transizione, edificato, agricoltura, foreste e terre umide.

usosuolo
screenshot usosuolo non riclassificato – con 7 classi

per capire meglio stilizziamo il raster utilizzando la ‘banda singola falso colore‘ ottenendo:

usosuolo_stile
screenshot usosuolo tematizzato
usosuolo_stile_1
screenshot tema usosuolo

anche in questo caso è necessario riclassificare il raster secondo la solita scala omogenea (da 1 a 10; con 1 da evitare, con 10 ottimale).

La mia scelta è la seguente:

Accorperei Acqua e Edificato associando il valore #1 in quanto sono aree dove non è possibile realizzare nuovi plessi scolastici; assocerei #3 alle Terre umide, #4 alle Foreste e #6 alle aree di Transizione, infine #9 alle Terre aride, quelle più indicate per la realizzazione di nuovi edifici.

Vediamo come riclassificare il raster usosuolo utilizzando il calcolatore Raster di QGIS (senza scomodare GRASS):

dal menù Raster => Calcolatore raster  e scrivere la seguente stringa (NB: hdr=usosuolo):

( “hdr@1” = 2 OR “hdr@1” = 4 ) * 1 + ( “hdr@1” = 7 ) * 3 + ( “hdr@1” = 6 ) * 4 + ( “hdr@1” = 3 ) * 6 + ( “hdr@1” = 5 ) * 7 + ( “hdr@1” = 1 ) * 9

usosuolo_reclass
usosuolo riclassificato
usosuolo_legenda
usosuolo_reclass legenda

Vediamo ora come utilizzare i layer vettoriali:

scuoleesistenti.shp è un layer puntuale che dobbiamo trasformare in un raster delle distanze  in modo tale che ogni pixel, attorno ai punti, contenga informazioni sulla distanza, vediamo come realizzare tale raster, carichiamo il layer:

scuoleesistenti
screenshot con layer scuoleesistenti

i punti rossi rappresentano i siti delle scuole esistenti.

Per realizzare il raster delle distanze possiamo utilizzare la funzione ‘prossimità’ che si trova su Raster=> Analisi => Prossimità (raster della distanza):

menù_prosimità
menù raster – analisi – prossimità

Questa funzione accetta, come dato di input, solo dati raster quindi occorre necessariamente trasformare il layer vettoriale (scuoleesistenti.shp) in un raster: per far ciò dobbiamo rasterizzare lo shapefile:

rasterized
rasterizzare uno shapefile
  1. Processing => Strumenti;
  2. cercare ‘v.to.rast.attribute’;
  3. selezionare il layer ‘scuoleesistenti’;
  4. lasciare ‘attr’;
  5. selezionare il campo che contenga il valore 1;
  6. definire, attraverso …, l’estensione pari ai raster precedenti;
  7. digitare la dimensione del pixel uguale agli altri raster;
  8. definire un percorso per l’output;
  9. Run;

otterremo:

rasterized_img
rasterizzazione

siamo pronti, ora, per la realizzazione del raster distanze:

prossimita_dialog
finestra dialogo Prossimità
  1. selezionare il file rasterizzato delle scuole;
  2. definire il file di output (raster_distanze_scuole);
  3. digitare 1;
  4. OK;
raster_distanze_scuole
screenshot – raster delle distanze scuole esistenti

per evidenziare meglio le distanze modifichiamo lo stile:

stile_proximity
banda singola falso colore

Riclassifico lo strato informativo in base a considerazione empiriche, quali per esempio: non costruirò mai un nuovo plesso scolastico vicino a plessi già esistenti:

legge_dist_scuole
rappresentazione grafica delle legge di variazione
legge_distanza_scuole
legge di variazioni distanza

in altri termini: per tutti i valori di ‘distanza’ minori di 500 (cioè un valore da evitare per la realizzazione di un plesso scolastico perchè troppo vicino) assoceremo il valore minimo della scala omogenea 1; per valori di ‘distanza’ superiori a 5000 (cioè un valore ottimale per la realizzazione di un plesso scolastico) assoceremo il valore massimo della scala omogenea 10; per tutti gli altri valori compresi tra 500 e 5000 utilizzeremo una variazione lineare descritta nella legge stessa (0,002*distanza) equazione facilmente ricavabile impostando il passaggio delle retta per i due punti (500,1) e (5000,10).

Vediamo come riclassificare il raster distanze utilizzando il calcolatore Raster di QGIS :

dal menù Raster => Calcolatore raster

( “raster_distanze_scuole@1” <= 500 ) * 1 + ( ( “raster_distanze_scuole@1”  >  500 )  AND  ( “raster_distanze_scuole@1” < 5000 ) )  *  ( “raster_distanze_scuole@1” *0.002 ) + ( “raster_distanze_scuole@1” >= 5000 ) * 10

Ecco il risultato della riclassificazione:

raster_distanze_scuola_reclass
raster_distanze_scuola riclassificato

Stessa procedura per i siti ricreativi ma questa volta la legge di variazione è al contrario, cioè la vicinanza ai siti ricreativi è auspicabile;

i passaggi sono:

  • carichiamo lo shapefile sitiricreativi.shp;
  • rasterizzazione dello shapefile;
  • creazione raster distanze siti ricreativi;
  • riclassificazione raster;

legge di variazione:

legge_distanza_sr

legge_distanza_sr_graf
grafico della legge di variazione

 

raster_distanza_siti_ric
raster distanza siti ricreativi

nel calcolatore raster andrà scritto:

( “raster_distanze_siti_ric@1” <= 500 ) * 10 + ( ( “raster_distanze_siti_ric@1” > 500 ) AND ( “raster_distanze_siti_ric@1” < 5000 ) ) * ( “raster_distanze_siti_ric@1” * -0.002+11 ) + ( “raster_distanze_siti_ric@1” >= 5000 ) * 1

raster_distanza_siti_ric_riclass
raster distanza siti ricreativi riclassificati

Bene.

Definiti i quattro raster  (slope_reclass, usosuolo_reclass, raster_sc_reclass e raster_sr_reclass) su cui lavorare, dobbiamo ora definire i loro ‘pesi‘ attraverso una matrice detta appunto ‘matrice dei pesi a confronto a coppie‘ con la quale è possibile definire i pesi in modo meno soggettivo possibile: per una maggiore oggettività del risultato occorrerebbe far compilare la matrice da più persone possibili e poi farne la media.

matrice_pesi_1
matrice compilata da quattro persone
matrice_pesi_2
matrice finale

i pesi saranno dunque:

  • DEM (slope) con peso w1 = 0.608;
  • Uso suolo con peso w2 = 0.185;
  • Siti Scolastici con peso w3 = 0.096;
  • Siti Ricreativi con peso w4 = 0.112;

in altri termini: per la localizzazione ottimale di un nuovo plesso scolastico il DEM (slope) ha un peso pari a circa il 61% rispetto al totale, cioè la morfologia del terreno è l’aspetto più importante rispetto a tutti gli altri.

Vediamo come usare questi pesi:

Ciascuno dei quattro raster andrà moltiplicato per il relativo peso utilizzando il calcolatore raster:

“slope_reclass@1” * 0.608 + “usosuolo_reclass@1” * 0.185 + “distanze_sc_reclass@1” * 0.096 + “distanze_sr_reclass@1” * 0.112

obiettivo
risultato ottenuto dal calcolatore raster : obiettivo
obiettivo_legenda
legenda obiettivo

I valori del raster ‘obiettivo’ variano tra 1.8650 e 9.4550 della scala omogenea utilizzata precedentemente, come si vede non esiste un sito con valore 10 (cioè la perfezione); a questo punto per determinare il miglior sito (o i migliori siti) basta applicare una soglia al raster obiettivo: utilizzeremo il valore soglia 9.45; quindi sempre utilizzando il calcolatore raster scriveremo:

“obiettivo@1” > 9.45

obiettivo_soglia
obiettivo con soglia

le aree in verde rappresentano i siti ottimali per la realizzazione di un nuovo plesso scolastico.

flowchart

flowchart – flusso lavoro


Note finali:

Questo è un esempio di come è possibile utilizzare QGIS per risolvere problemi legati alla ottimizzazione e ricerca di siti ottimali (nuovi plessi scolastici, discariche di RSU ecc…).  Tale articolo ha solo lo scopo di divulgare la conoscenza di uno strumento OPEN SOURCE e la facilità con cui è possibile risolvere problemi reali a costo zero.


 

Video dimostrativi:

  1. come creare il raster Slope partendo da un Dem;
  2. come riclassificare il raster Slope;
  3. come rasterizzare un layer puntuale e creare un raster delle distanze con Prossimità.
  4. file e progetto QGIS.

 

 

 

Pubblicità

9 pensieri su “QGIS: LOCALIZZAZIONE OTTIMALE

  1. Ciao Totò! Prima di tutto ti faccio i miei complimenti per il lavoro che fai e per la professionalità.
    Vorrei approfittare della tua competenza per chiederti una cosa:
    mi servirebbe effettuare questa operazione di riclassificazione tra slope e dem che fai sul raster calculator con SAGA o grass.
    Questo perchè sto creando un model builder per automatizzare delle operazioni però, visto che il classico calcolatore raster non c’è, vorrei migrare l’operazione su un altro plug in…come posso fare? grazie in anticipo

    Piace a 1 persona

    1. questa è l’espressione che mi servirebbe implementare :
      (( A 0.05 ) AND ( B= 25) AND ( ( B>0.05 ) AND ( B<0.1)))*2 +
      (( A = 0.1 ) AND ( B= 15) AND (A= 0.1 ) AND ( B= 35) AND ( ( B >= 0.1 ) AND ( B<0.3)))*3+
      (( A = 0.3 ) AND ( B= 25) AND ( ( B >= 0.3 ) AND ( B<0.5)))*3+
      (( A = 0.5 ) AND ( B= 15) AND (A= 0.5 ) AND ( B= 35) AND ( ( B >= 0.5 ) AND ( B<0.8)))*4+
      (( A = 0.8 )) *2+
      ((( A >= 5) AND (A= 0.8))*3+
      (( A >= 25) AND ( B >= 0.8 )) *4

      dove A e B sono due raster differenti

      Piace a 1 persona

  2. salve, sono uno studente universitario e sto facendo un lavoro di tesi utilizzando qgis. vorrei maggiori info su come visualizzare le pendenze in percentuale quando creo il mio layer slope , poiché come valori min 252487 e max 7.32213e+06 . grazie per l’attenzione

    Piace a 1 persona

    1. Ciao,
      la pendenza puo’ essere espressa in % o in gradi, dipende anche dall’algoritmo che si usa.
      Nell’esempio di questo articolo calcolo la pendenza usando un comando che non da possibilità di scelta; in processing, invece, se cerchi pendenza (GDAL) LA MASCHERA contiene l’opzione ‘pendenza espressa in %’.
      ciao

      "Mi piace"

  3. Ciao Totò, ti scrivo perchè sto cercando il modo di interpolare dei punti, che devono obbligatoriamente variare entro un certo range (0-360), in modo tale che nel risultato dell’interpolazione siano mantenuti i massimi e i minimi dei miei punti. Ho proceduto in 2 modi differenti:
    1) ho interpolato direttamente lo shape puntuale, ma il risultato dell’interpolazione mi da un range molto ridotto es 354
    2)ho provato a rasterizzare i dati puntuali e a interpolarli successivamente con bspline ma i valori ottenuti sono <>360.. Un’ulteriore complicazione a questo è che quando un dato puntuale ha valore = zero, non viene rasterizzato, tuttavia, per il mio caso il valore degli estremi è importante mantenerlo.
    Ho provato anche un “riempimento nullo” : i valori vanno meglio, ma ci sono numerose celle “no data”
    Come potrei fare per ottenere un’interpolazione in cui i miei estremi siano mantenuti (e siano effettivamente gli estremi ), o, ancora meglio, in cui siano mantenuti i valori di tutti i miei campioni?
    Lavoro con un qgis “Medeira 3,45”.
    Grazie di tutto.

    "Mi piace"

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.