Creazione poligoni con postgis

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Creazione poligoni con postgis

Pier Lorenzo Marasco
Ciao a tutti,

Ho un problemino con postgis (2.1.3) che mi sta facendo uscire pazzo;
non ho più idea dove sbattere la testa e soprattutto dove sto
sbagliando.
In una tabella ho un insieme di linee che rappresentano delle curve di
livello ed il bordo che le racchiude.
Il bordo è spezzato ad ogni intersezione tra le curve ed il bordo stesso.
Quello che sto cercando di ottenere è l'insieme di poligoni che si
trovano fra due curve di livello, quindi in linea teorica i poligoni
che si vengono a creare con due segmenti di bordo e le due curve di
livello.
Ho provato ad impiegare ST_BuildArea con St_Union ma il risultato che
ottengo è un unico enorme poligono comprendente tutta l'area racchiusa
dal bordo.
Avete idea di dove sbaglio ?
Grazie,

L.


--
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Creazione poligoni con postgis

Andrea Peri
Ho l'impressione ch la Union non vada bene.
Ma dipende da quello che ci fai.
Le linee che citi come isoipse sono una unica lina chiusa, o sono
tante linee spezzate e in contatto tra loro sui bordi ?

In ogni caso non è per niente facile il tuo compito.

Perche' in generale te non puoi dare per scontato che una isoipsa sia
circoscritta da una altra isoispa solamente.
Potrebbe non averne nessuna che la circoscrive e viceversa
circoscriverne tante di pari livello anziche' una sola.
Quindi non e' facile riassumerla in una buildarea.
Perche' non riesci a stabilire prima di costruire i poligoni quali
linee sono contenute e quali stanno fuori.

A occhio direi che devi fare in piu' passi.
prima componi i poligoni di tutte le isoispe e poi (questa e' la parte
difficile) passi a bucarli cercando intersezioni e sottraendo
geometricamente ogni poligono che e' completamente contenuto.

L'unica cosa su cui puoi contare è che il poligono di una isoipsa e'
completamente contenuto o completamente esterno a qualsiasi altro.
Per cui se e' interno va sottratto,se e' esterno va escluso.

Non so' se e' la stategia migliore, ma e' l'unica che mi viene in mente.


A.


Il 19 settembre 2014 15:49, Pier Lorenzo Marasco
<[hidden email]> ha scritto:

> Ciao a tutti,
>
> Ho un problemino con postgis (2.1.3) che mi sta facendo uscire pazzo;
> non ho più idea dove sbattere la testa e soprattutto dove sto
> sbagliando.
> In una tabella ho un insieme di linee che rappresentano delle curve di
> livello ed il bordo che le racchiude.
> Il bordo è spezzato ad ogni intersezione tra le curve ed il bordo stesso.
> Quello che sto cercando di ottenere è l'insieme di poligoni che si
> trovano fra due curve di livello, quindi in linea teorica i poligoni
> che si vengono a creare con due segmenti di bordo e le due curve di
> livello.
> Ho provato ad impiegare ST_BuildArea con St_Union ma il risultato che
> ottengo è un unico enorme poligono comprendente tutta l'area racchiusa
> dal bordo.
> Avete idea di dove sbaglio ?
> Grazie,
>
> L.
>
>
> --
> _______________________________________________
> [hidden email]
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
> 666+40 iscritti al 5.6.2014



--
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Creazione poligoni con postgis

Antonio Falciano
In reply to this post by Pier Lorenzo Marasco
Il 19/09/2014 15:49, Pier Lorenzo Marasco ha scritto:

> Ciao a tutti,
>
> Ho un problemino con postgis (2.1.3) che mi sta facendo uscire pazzo;
> non ho più idea dove sbattere la testa e soprattutto dove sto
> sbagliando.
> In una tabella ho un insieme di linee che rappresentano delle curve di
> livello ed il bordo che le racchiude.
> Il bordo Ú spezzato ad ogni intersezione tra le curve ed il bordo stesso.
> Quello che sto cercando di ottenere Ú l'insieme di poligoni che si
> trovano fra due curve di livello, quindi in linea teorica i poligoni
> che si vengono a creare con due segmenti di bordo e le due curve di
> livello.
> Ho provato ad impiegare ST_BuildArea con St_Union ma il risultato che
> ottengo Ú un unico enorme poligono comprendente tutta l'area racchiusa
> dal bordo.
> Avete idea di dove sbaglio ?

Se usi ST_Union e' normale che te li unisce tutti... Proverei invece con
ST_Polygonize dopo aver creato i nodi delle linestring con ST_Node.

ciao
Antonio

--
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Creazione poligoni con postgis

Iacopo Zetti-2
In reply to this post by Pier Lorenzo Marasco
È un problema che ho avuto non troppo tempo fa e, a parte la questione
dei bordi, il punto critico è che bucando i poligoni più grandi con
quelli contenuti, come dice Andrea, se le quote salgono non ci sono
problemi, se scendono (una dolina per esempio) sono dolori. Ovvero se
hai 20 isolinee ok, se ne hai migliaia capire cosa buca cosa senza una
ricognizione caso per caso è un bel problema che personalmente non sono
riuscito a risolvere. Se qualcuno c'è riuscito con una qualche procedura
e me lo insegna gli sarò grato almeno fino alla pensione.

Iacopo

Il giorno ven, 19/09/2014 alle 15.49 +0200, Pier Lorenzo Marasco ha
scritto:

> Ciao a tutti,
>
> Ho un problemino con postgis (2.1.3) che mi sta facendo uscire pazzo;
> non ho più idea dove sbattere la testa e soprattutto dove sto
> sbagliando.
> In una tabella ho un insieme di linee che rappresentano delle curve di
> livello ed il bordo che le racchiude.
> Il bordo è spezzato ad ogni intersezione tra le curve ed il bordo stesso.
> Quello che sto cercando di ottenere è l'insieme di poligoni che si
> trovano fra due curve di livello, quindi in linea teorica i poligoni
> che si vengono a creare con due segmenti di bordo e le due curve di
> livello.
> Ho provato ad impiegare ST_BuildArea con St_Union ma il risultato che
> ottengo è un unico enorme poligono comprendente tutta l'area racchiusa
> dal bordo.
> Avete idea di dove sbaglio ?
> Grazie,
>
> L.
>
>
> --
> _______________________________________________
> [hidden email]
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
> 666+40 iscritti al 5.6.2014



_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Creazione poligoni con postgis

Salvatore Larosa
In reply to this post by Pier Lorenzo Marasco
Ciao,
come dice Antonio, qui la funzione da usare è ST_Polygonize, ma
coadiuvata da altre funzioni
in modo da ottenere un risultato leggibile.

CREATE TABLE test_lines_polygonize AS
SELECT (ST_Dump(b.coll2poly)).geom AS geom
FROM (SELECT ST_Polygonize(geom) AS coll2poly
FROM (SELECT geom FROM test_lines) AS a) AS b;

2014-09-19 15:49 GMT+02:00 Pier Lorenzo Marasco <[hidden email]>:

> Ciao a tutti,
>
> Ho un problemino con postgis (2.1.3) che mi sta facendo uscire pazzo;
> non ho più idea dove sbattere la testa e soprattutto dove sto
> sbagliando.
> In una tabella ho un insieme di linee che rappresentano delle curve di
> livello ed il bordo che le racchiude.
> Il bordo è spezzato ad ogni intersezione tra le curve ed il bordo stesso.
> Quello che sto cercando di ottenere è l'insieme di poligoni che si
> trovano fra due curve di livello, quindi in linea teorica i poligoni
> che si vengono a creare con due segmenti di bordo e le due curve di
> livello.
> Ho provato ad impiegare ST_BuildArea con St_Union ma il risultato che
> ottengo è un unico enorme poligono comprendente tutta l'area racchiusa
> dal bordo.
> Avete idea di dove sbaglio ?
> Grazie,
>
> L.
>
>
> --
> _______________________________________________
> [hidden email]
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
> 666+40 iscritti al 5.6.2014



--
Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Creazione poligoni con postgis

Salvatore Larosa
2014-09-19 23:30 GMT+02:00 Salvatore Larosa <[hidden email]>:
> Ciao,
> come dice Antonio, qui la funzione da usare è ST_Polygonize, ma
> coadiuvata da altre funzioni
> in modo da ottenere un risultato leggibile.
>
> CREATE TABLE test_lines_polygonize AS
> SELECT (ST_Dump(b.coll2poly)).geom AS geom
> FROM (SELECT ST_Polygonize(geom) AS coll2poly
> FROM (SELECT geom FROM test_lines) AS a) AS b;

che non è altro che quella riportata nella documentazione :^)
http://postgis.refractions.net/documentation/manual-2.0/ST_Polygonize.html

Saluti (mi è scappata la mail prima!)

--
Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Creazione poligoni con postgis

pcav
Il 19/09/2014 23:38, Salvatore Larosa ha scritto:

> 2014-09-19 23:30 GMT+02:00 Salvatore Larosa <[hidden email]>:
>> Ciao,
>> come dice Antonio, qui la funzione da usare è ST_Polygonize, ma
>> coadiuvata da altre funzioni
>> in modo da ottenere un risultato leggibile.
>>
>> CREATE TABLE test_lines_polygonize AS
>> SELECT (ST_Dump(b.coll2poly)).geom AS geom
>> FROM (SELECT ST_Polygonize(geom) AS coll2poly
>> FROM (SELECT geom FROM test_lines) AS a) AS b;
>
> che non è altro che quella riportata nella documentazione :^)
> http://postgis.refractions.net/documentation/manual-2.0/ST_Polygonize.html

Per la cronaca, il problema e' evidentemente piu' elusivo di quanto parrebbe a prima
vista: un po' di tempo fa ci ho provato con GRASS, ma anche li' non sono riuscito ad
arrivare in fondo, forse per bugs. Per gli interessati, ci sono le tracce nella
mailing list internazionale di grass.
Saluti.

--
Paolo Cavallini - www.faunalia.eu
Corsi QGIS e PostGIS: http://www.faunalia.eu/training.html
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014
Reply | Threaded
Open this post in threaded view
|

Re: Creazione poligoni con postgis

Pier Lorenzo Marasco
In reply to this post by Salvatore Larosa
Ciao a tutti,

è bello rientrare a lavoro e scoprire che il problema che tu pensavi
essere piccolo è in realtà un mostro a tre teste... ora come ora sono
a cercare disperatamente un armatura ed una spada dato che tutte le
armi in mio possesso sono state divorate ferocemente dalla belva.
Vado con ordine...
Grazie Andrea per avermi illuminato che quello che sto combattendo è
un drago a due teste... grazie Antonio per avermi detto che un drago
non si combatte unendo i mattoni con la calce nel vano tentativo di
sperare che costruire un castello risolva il problema ...grazie a
Iacopo ho capito che non sono il solo ad aver a che fare con
lucertoloni un po cresciuti...ed infine grazie a Salvatore che mi ha
dato una lancia che quanto meno ha scalfito la dura corazza della
bestiolina a due teste. Sfortunatamente a sta bestia è spuntata la
terza testa...

Venendo agli aspetti prettamente tecnici e meno scherzosi,
La soluzione di Salvatore/Antonio ha si prodotto magnificamente i
poligoni che vorrei.  Quindi a futura memoria di tutti quelli che
dovranno creare poligoni da linee la soluzione di Salvatore/Antonio è
perfetta e funziona magnificamente anche con poligoni ricadenti in
altri poligoni.
Sfortunatamente nel foglio che sto analizzando in questo momento non
vi sono chissà quali isoipse con all'interno altre isoipse ma
piuttosto isoipse che si sovrappongono nella bidimensione, per tratti
più o meno lunghi, tra di loro. A questi punti devo trovare il modo di
aggregare le linee aventi la stessa quota durante la collezione e
successivamente passarle al polygonize.
Grazie di nuovo a tutti per le dritte che mi avete dato e scusate se
non vi ho risposto prima.

L.


Il 19 settembre 2014 23:38, Salvatore Larosa <[hidden email]> ha scritto:

> 2014-09-19 23:30 GMT+02:00 Salvatore Larosa <[hidden email]>:
>> Ciao,
>> come dice Antonio, qui la funzione da usare è ST_Polygonize, ma
>> coadiuvata da altre funzioni
>> in modo da ottenere un risultato leggibile.
>>
>> CREATE TABLE test_lines_polygonize AS
>> SELECT (ST_Dump(b.coll2poly)).geom AS geom
>> FROM (SELECT ST_Polygonize(geom) AS coll2poly
>> FROM (SELECT geom FROM test_lines) AS a) AS b;
>
> che non è altro che quella riportata nella documentazione :^)
> http://postgis.refractions.net/documentation/manual-2.0/ST_Polygonize.html
>
> Saluti (mi è scappata la mail prima!)
>
> --
> Salvatore Larosa
> linkedIn: http://linkedin.com/in/larosasalvatore
> twitter: @lrssvt
> skype: s.larosa
> IRC: lrssvt on freenode



--
Pier Lorenzo Marasco
Via D.Moreni,2
50135 Firenze

cell/mobile   +39 329 35 37527
Casa/home  +39 055 011 71 20
skype pl.marasco
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.
666+40 iscritti al 5.6.2014