Buongiorno a tutti,
sollevo una questione che mi sta interessando per lavoro da qualche giorno.
Faccio un esempio per spiegarmi meglio.
Mettiamo di avere una serie di poligoni, più o meno regolari, assimilabili
alla superficie coperta da ogni chioma di ciascun albero di un bosco. A
causa della diversa altezza di ciascun albero e della vicinanza tra i
fusti, tali poligoni si sovrapporranno parzialmente tra loro in modo
irregolare. A ciascun albero ho dato in ID numerico e ciascun poligono ha
la sua area.
Esiste in QGIS o GRASS il modo di analizzare le relazioni di
sovrapposizione tra le aree di chioma? Avrei cioè bisogno di sapere ciascun
poligono con quale altro si sovrappone e quanta è la superficie in comune.
Grazie 1000, un saluto
--
Maurizio Marchi, Ph.D. student
Florence, Italy
ID skype: maurizioxyz
Ubuntu 14.04 LTS
linux user 552742
Assumiamo, per semplicità, che la tabella attributi del tuo shapefile di
poligoni abbia il solo campo (colonna) ID con assegnata la sequenza
1,2,3,...n.
Vai in Barra dei menù --> Vettore --> Unione e lancia la funzione, chiamando
"unione.shp" il nuovo shapefile che si creerà.
Nella tabella attributi dello shapefile "unione" ora ci saranno due campi,
uno ID e l'altro ID_2, nei quali potrai leggere quale chioma si interseca
con quali altre chiome (una o più di una).
Se togli il riempimento con colore solido dei poligoni dello shapefile
"unione" e selezioni le varie righe (record) della tabella attributi, nella
Mappa della Vista potrai apprezzare il risultato anche graficamente (se
invece tenti di selezionare con il cursore del mouse non ci riesci perchè
quando clicchi sulle zone di intersezione ti si evidenziano sia le
intersezioni che le chiome intersecanti).
A questo punto, sempre nella tabella attributi dello shapefile "unione", con
lo strumento "seleziona elementi usando un'espressione" scrivi questa stinga
di selezione:
"ID" = "ID_2"
e lancia la selezione.
Ti si evidenzieranno le chiome intersecanti.
Rendi modificabile il layer e cancellale.
Una volta cancellate le chiome intersecanti, nello shapefile "unione" ti
resteranno i soli poligoni derivanti dalle intersezioni e nella relativa
tabella attributi, per ogni record, potrai capire da quale chioma si origina
ogni singola intersezione.
A questo punto, per concludere, vi in Vettore --> Strumenti di geometria -->
aggiungi colonne geometriche e nella tabella attributi ti si crea una
colonna con la superficie di ogni poligono intersezione.
....Nella tabella attributi dello shapefile "unione" ora ci saranno due
campi, uno ID e l'altro ID_2, nei quali potrai leggere quale chioma si
interseca con quali altre chiome (una o più di una).
Ho notato ora che in realtà non è proprio così perchè il comando unione (o
anche il comando intersezione) ti restituisce, in tabella, per ogni record
che crea, solo dati relativi a poligoni che scaturiscono dall'unione al max
di due chiome, mentre ignora del tutto i poligoni che scaturiscono
dall'unione (o dall'intersezione) di più di due chiome.
Peccato. Il suggerimento che ti ho dato funziona a metà.
P.S. hai avuto modo di provare il suggerimento dato da Stefano Campus (cioè
di usare SAGA 2.1.2)? Funziona?
Il giorno Thu, 4 Sep 2014 08:26:46 -0700 (PDT)
Marco <spaziani.marco@gmail.com> ha scritto:
Assumiamo, per semplicità, che la tabella attributi ....
mi lancio senza ... paracadute, tanto per me è un gioco
con le soluzioni prospettate da Stefano e Marco, che mi sembrano
centrare il tuo quesito, ottieni l'intersezione delle proiezioni, _non_
l'intersezione degli oggetti; la chioma 1 potrebbe essere ad una quota
tale da non intersecare la chioma 2, anche se in pianta potrebbe
sembrarlo;
per un controllo un pò più reale(*) dovresti:
a) individuare il centroide del poligono
b) individuare la quota
c) individuare il raggio del cerchio circoscritto al poligono
d) se la distanza fra i due centroidi è maggiore della somma dei raggi
non c'è intersezione delle chiome, altrimenti sì;
e) i metodi di S. e M. detti sopra possono essere utili per fare una
prima selezione dei casi da esaminare (forse può bastare anche un
semplice controllo dei boundingbox);
ovviamente si tratta di valutare ancora una volta se il gioco vale la
candela
spero di essere atterrato senza tanti danni
ciao,
giuliano
(*) i realtà il metodo presuppone l'identificazione delle chiome con
sfere, i cipressi forse rientrerebbero a fatica.....
P.S. hai avuto modo di provare il suggerimento dato da Stefano Campus
(cioè di usare SAGA 2.1.2)? Funziona?
funziona!
restituisce uno shape con tante geometrie quante sono le intersezioni e come
attributo l'id dei poligoni originali da cui deriva.
ovviamente le parti di poligoni che non si intersecano hanno come nuovo id
solo quello originale.
essendo in saga, si deve inserire entro i moduli disponibili di processing
aggiungerlo e' facile, basta guardare un comando simile esistente e fare una pull
request.
in ogni caso, e' opportuno aprire un ticket con una feature request.
saluti.
funziona!
restituisce uno shape con tante geometrie quante sono le intersezioni e
come attributo l'id dei poligoni originali da cui deriva.
ovviamente le parti di poligoni che non si intersecano hanno come nuovo id
solo quello originale.
Ottimo! ...il buon SAGA sa come farsi valere quando il gioco si fa duro.
Cercando un modo per risolvere il problema col solo Qgis, avrei escogitato la
seguente tecnica:
1] VETTORE => STRUMENTI DI GESTIONE DATI => DIVIDI VETTORE
che crea N sotto-shape figlie a partire dal padre
2] VETTORE => STRUMENTI DI GEOPROCESSING => INTERSEZIONE
che estrapola le parti in comune, a due a due.
A titolo di prova, ho preso le regioni Istat, le ho semplificate e bufferate
in modo che si sovrapponessero reciprocamente, ottenendo questi 20
micro-file:
Ora, se esistesse un metodo "loop" per eseguire il punto 2 confrontando
automaticamente la shape N-esima con le restanti (N-1), si otterrebbe il
risultato di Saga.
Ve lo lascio come simpatico enigma in vista dell'imminente weekend (altro
che Sudoku...)