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,
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
<pl.marasco@gmail.com> 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.
--
_______________________________________________
Gfoss@lists.gfoss.it 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 àèìòù
-----------------
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.
È 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.
--
_______________________________________________
Gfoss@lists.gfoss.it 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
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 <pl.marasco@gmail.com>:
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.
--
_______________________________________________
Gfoss@lists.gfoss.it 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
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;
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;
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.
è 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 <lrssvtml@gmail.com> ha scritto:
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;