[Gfoss] Trovare il numero di intersezioni tra poligoni

Ciao a tutti,
ho una serie di punti sui quali genero delle buffer, e ogni buffer ha un valore x. Ora vorrei trovare la somma del valore x in base alle intersezioni delle buffer.

Se ho tre buffer con valore 1, e 2 delle buffer si intersecano, vorrei avere come risultato nel poligono di intersezione delle due buffer intersecate il valore 2 (ovvero la somma di x = 1 assegnato ad ogni buffer)

Nel concreto è perchè ho aree di rispetto archeologico con un certo valore. Dove queste si intersecano tra di loro, il valore di rispetto archeologico si va a sommare e vorrei trovarne il suo centroide.

Fino ad un intersect tra le geometrie di un medesimo layer ci arrivo, ma perdo i valori dei campi risultanti dalle geometrie sovrapposte.

Qualche indizio su cosa cercare?

Grazie a tutti.

Luca

Ciao Luca,

credo si debba fare in due passaggi:

1. Partendo dal layer originale con i buffer che si sovrappongono,
ottieni un layer con le intersezioni dei buffer. L'hai già fatto mi
pare, se si come? Hai usato GRASS e v.clean?

2. Effettui un join geometrico tra il layer delle intersezioni e quello
dei buffer, raggruppando per id intersezione, e facendo sum(x) per i
buffer. Ad esempio in PostGIS potrebbe essere:

select intersezioni.id, sum(buffers.x) from intersezioni inner join
buffers on st_contains(buffers.geom, intersezioni.geom) group by
intersezioni.id

Questa query può essere usata per trasferire sum(x) nella tabella delle
intersezioni.

Facci sapere

Sig

Il giorno gio, 02/06/2011 alle 21.19 +0200, Luca Mandolesi ha scritto:

Ciao a tutti,
ho una serie di punti sui quali genero delle buffer, e ogni buffer ha
un valore x. Ora vorrei trovare la somma del valore x in base alle
intersezioni delle buffer.

2011/6/3 Luca Sigfrido Percich <sigfrido@tiscali.it>

Ciao Luca,

credo si debba fare in due passaggi:

  1. Partendo dal layer originale con i buffer che si sovrappongono,
    ottieni un layer con le intersezioni dei buffer. L’hai già fatto mi
    pare, se si come? Hai usato GRASS e v.clean?

Ho usato gli ftools in python di Qgis perchè dovrei fare un pezzo di plugin in python.

Ok, molto bene, primo passettino andato.

Se faccio intersect con gli ftools mi ritorna solo le intersezioni dei poligoni a 2 a 2. Quindi non ottengo poligoni dalle intersezioni di 3 o più buffer.

Cosa che invece ottengo importando in grass il layer, anche se accade una cosa che non comprendo:

il layer ha tre buffer che si intersecano in un punto [1].

Lo shape di partenza ha 3 poligoni, mentre doop l’importazione in grass (sto lavorando da dentro Qgis), il layer grass ha 11 geometrie, di cui 11 sono tutte in buffer_polygon 1, mentre altre 4, che sono il risultato delle intersezioni, sono in buffer polygon2.

In pratica non ho più le mie tre geometrie di partenza…e non so come caricare i tre poligoni originali in grass e quindi non posso fare una somma di campi tra geometrie che cadono nel medesimo punto.

Ora, l’unica cosa che ho saputo fare è stato risputare in shapefile i singoli poligoni ricavati dalle intersezioni delle buffer e fare una unione attributi per posizione, ma niente, la somma è globale per tutte le geometrie, quindi anche dove ne ho una sola, ricavo il valore totale che dovrei avere solo nel punto centrale.

Provo a passare un po’ per python e le classi di pyqgis…vediamo un po’

[1]
https://picasaweb.google.com/mandoluca/Qgis#5613940766796339682

Ciao Luca,

se passi il layer coi buffer (parzialmente) sovrapposti in un GIS
topologico, ottieni un layer di poligoni senza sovrapposizioni, in cui
ritrovi i poligoni originali solo quando questi non intersecavano ad
altri poligoni. In un layer poligonale topologico non possono esistere
sovrapposizioni. Dai tuoi 3 buffer in figura dovresti ottenere 7
poligoni.

Purtroppo conosco pochissimo GRASS e non so darti istruzioni precise. So
che v.clean ha una opzione per intersecare gli archi in ingresso.
Concettualmente ti basta importare i linearring dei poligoni anche come
archi, intersecarli e creare i poligoni.

Una volta costruita la topologia poligonale, dovresti esportare il layer
ottenuto in PostGIS (v.out.ogr), dove puoi trasferire gli attributi
attraverso il join geometrico come già suggerito. Anche questa
operazione credo si possa fare in GRASS, ovviamente dopo aver importato
il layer dei buffer.

Buon lavoro

Sig

Il giorno ven, 03/06/2011 alle 12.47 +0200, Luca Mandolesi ha scritto:

Ok, molto bene, primo passettino andato.

Se faccio intersect con gli ftools mi ritorna solo le intersezioni dei
poligoni a 2 a 2. Quindi non ottengo poligoni dalle intersezioni di 3
o più buffer.

Cosa che invece ottengo importando in grass il layer, anche se accade
una cosa che non comprendo:

il layer ha tre buffer che si intersecano in un punto [1].

Lo shape di partenza ha 3 poligoni, mentre doop l'importazione in
grass (sto lavorando da dentro Qgis), il layer grass ha 11 geometrie,
di cui 11 sono tutte in buffer_polygon 1, mentre altre 4, che sono il
risultato delle intersezioni, sono in buffer polygon2.

In pratica non ho più le mie tre geometrie di partenza.....e non so
come caricare i tre poligoni originali in grass e quindi non posso
fare una somma di campi tra geometrie che cadono nel medesimo punto.

Ora, l'unica cosa che ho saputo fare è stato risputare in shapefile i
singoli poligoni ricavati dalle intersezioni delle buffer e fare una
unione attributi per posizione, ma niente, la somma è globale per
tutte le geometrie, quindi anche dove ne ho una sola, ricavo il valore
totale che dovrei avere solo nel punto centrale.

Provo a passare un po' per python e le classi di pyqgis...vediamo un
po'

[1]
https://picasaweb.google.com/mandoluca/Qgis#5613940766796339682

_____________
PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).

PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).

2011/6/3 Luca Sigfrido Percich <sigfrido@tiscali.it>:

Ciao Luca,

se passi il layer coi buffer (parzialmente) sovrapposti in un GIS
topologico, ottieni un layer di poligoni senza sovrapposizioni, in cui
ritrovi i poligoni originali solo quando questi non intersecavano ad
altri poligoni. In un layer poligonale topologico non possono esistere
sovrapposizioni. Dai tuoi 3 buffer in figura dovresti ottenere 7
poligoni.

Purtroppo conosco pochissimo GRASS e non so darti istruzioni precise.

In GRASS, con poligoni che sono topologicamente corretti non ci
sono intersezioni.

Altrimenti (ho chiesto a Markus Metz):
1. Creazione polylines: v.build.polylines
2. Convertire boundaries in linie (v.type)
3. v.clean tool=break error=intersections
4. statistica

Spero che sia un aiuto,
Markus

Non mi pare la strada giusta. Nel mio caso io devo poter avere l’intersezione tra le buffer e sommare il valore di un campo nel punto in cui le buffer si intersecano,

in modo che se tre buffer si incontrano al cento e hanno valori 3, 5, 6, il poligono che risulta dall’incrocio abbia valore 14.

Altra cosa:

come mai il comando buffer degli ftools genera tre buffer sovrapposte, mentre in grass si ottiene un unico poligono fuso?

E’ possibile in grass disabilitare la topologia?

2011/6/3 Markus Neteler <neteler@osgeo.org>

2011/6/3 Luca Sigfrido Percich <sigfrido@tiscali.it>:

Ciao Luca,

se passi il layer coi buffer (parzialmente) sovrapposti in un GIS
topologico, ottieni un layer di poligoni senza sovrapposizioni, in cui
ritrovi i poligoni originali solo quando questi non intersecavano ad
altri poligoni. In un layer poligonale topologico non possono esistere
sovrapposizioni. Dai tuoi 3 buffer in figura dovresti ottenere 7
poligoni.

Purtroppo conosco pochissimo GRASS e non so darti istruzioni precise.

In GRASS, con poligoni che sono topologicamente corretti non ci
sono intersezioni.

Altrimenti (ho chiesto a Markus Metz):

  1. Creazione polylines: v.build.polylines
  2. Convertire boundaries in linie (v.type)
  3. v.clean tool=break error=intersections
  4. statistica

Spero che sia un aiuto,
Markus

2011/6/3 Luca Mandolesi <mandoluca@gmail.com>:
..

Altra cosa:
come mai il comando buffer degli ftools genera tre buffer sovrapposte,
mentre in grass si ottiene un unico poligono fuso?

FTOOLS è "Simple Features" mentre GRASS è topologico.

E' possibile in grass disabilitare la topologia?

Sì, durante import per esempio.

Markus

Sì, durante import per esempio.

Markus

Grazie Markus! Sto lavorando dentro qgis e guardando le opzioni di v.in.ogr.qgis e letto il manuale, ma non capisco come disabilitare la topologia.

Luca

2011/6/3 Luca Mandolesi <mandoluca@gmail.com>:

Sì, durante import per esempio.
Markus

Grazie Markus! Sto lavorando dentro qgis e guardando le opzioni di
v.in.ogr.qgis e letto il manuale, ma non capisco come disabilitare la
topologia.

Vero, esiste in altri import tools.
In teoria potresti cancellare i file della topologia ma non ha molto
senso cercare di analizzare topologia senza topologia.

Markus

Mi sa che l’unica è importare le buffer che si intersecano in grass in modo che le spezzi.

Tra l’altro importando uno shape di tre buffer che si intersecano al centro, ottengo non sette, ma 11 poligoni. [1]

Infatti ne ho 2 sovrapposti dove 2 buffer si incrociano e 3 dove 3 buffer si incrociano. Peccato che i nuovi poligoni non tengano per ognuno i valori delle buffer di partenza, ma prendano tutte un valore comune.

Quindi ora proverò così:

generare le buffer con ftools
importarle in grass
estrarre i centroidi
con uno script in python trovare dove un centroide cade in una buffer, prendere il valore che mi interessa e sommarli in quel punto.

Vi farò sapere!!!

Grazie intanto.

luca

[1]
https://picasaweb.google.com/mandoluca/Qgis#5613940766796339682

2011/6/3 Markus Neteler <neteler@osgeo.org>

2011/6/3 Luca Mandolesi <mandoluca@gmail.com>:

Sì, durante import per esempio.
Markus

Grazie Markus! Sto lavorando dentro qgis e guardando le opzioni di
v.in.ogr.qgis e letto il manuale, ma non capisco come disabilitare la
topologia.

Vero, esiste in altri import tools.
In teoria potresti cancellare i file della topologia ma non ha molto
senso cercare di analizzare topologia senza topologia.

Markus

Peccato che i nuovi poligoni non tengano per ognuno i valori delle buffer di partenza, ma prendano tutte un valore comune.

Scusate! Non è vero. I poligoni nati dalle intersezioni tengono ognuno il valore della buffer da cui provengono.

Quindi ora rimane solo da sommare i valori dei poligoni che si sovrappongono!!!

scusate, sarà l’ora tarda!

luca