[Gfoss] Qgis - fallita esportazione poligoni da postgres su shapefile

Trovo le geometrie errate.

A questo punto qual'è la strada migliore per correggere gli errori?

Le devo riguardare una a una, per trovare tipo nodi sovrapposti,
intersezioni su se stesso, ecc?

La scelta dipende da una serie di fattori.

Per prima cosa occorre sapere che versione di postgis hai, cosi' si capisce che strumenti hai a disposizione.
Poi quante sono le geometrie da correggere, perhce' se sono poche comunque conviene farlo a mano, se tale soluzione e' ammissibile.
Infine valutare che margine di correzione si ha. Infatti, correggendo le geometrie spesso si spostano vertici, se ne creano di nuovi o si rimuovono
alcuni dei vertici esistenti.
Questo pero' comporta degli spostamenti che potrebbero inficiare certe esigenze (eventuali) di precisione oppure di coerenza topologica, di completa copertura del territorio,
e cosi' via...

Se fosse possibile farsi un dump della tabella con le geometrie incriminate (non e' detto che postgis lo consenta essendoci geometrie invalide).
Io proverei a fare cosi':

Io mi installarei in pochi minuti una istanza di pg con sopra la postgis 2.0.0 (trovi un compilato della 2.0.0 per windows nella sezione sperimentale del sito postgis).
Ci caricherei sopra la tabella via dump.

poi lancerei il comando

create table geom_corrette as
select
  st_makevalid(geom) as geom_new
from tabella
where
  st_isvalid(geom)=false
;

e dovrei aver finito.

infatti tale comando trasformerebbe i self-intersection in multipolygons e li butterebbe in tale tabella.
Mi esporto la tabella (che ora e' buona) con qhis e il gioco e' fatto.

2010/9/29 Andrea Peri 2007 <aperi2007@gmail.com>

Trovo le geometrie errate.

A questo punto qual’è la strada migliore per correggere gli errori?

Le devo riguardare una a una, per trovare tipo nodi sovrapposti,
intersezioni su se stesso, ecc?

La scelta dipende da una serie di fattori.

Per prima cosa occorre sapere che versione di postgis hai, cosi’ si capisce che strumenti hai a disposizione.

Sono su un server Linux installatomi da terzi, come anche postgres 8.4. A memoria ho postgis 1.4.

Poi quante sono le geometrie da correggere, perhce’ se sono poche comunque conviene farlo a mano, se tale soluzione e’ ammissibile.
Infine valutare che margine di correzione si ha. Infatti, correggendo le geometrie spesso si spostano vertici, se ne creano di nuovi o si rimuovono
alcuni dei vertici esistenti.
Questo pero’ comporta degli spostamenti che potrebbero inficiare certe esigenze (eventuali) di precisione oppure di coerenza topologica, di completa copertura del territorio,

Dunque, le mie geometrie sono poligoni che riprendono strati archeologici, quindi sono muri, buche, pavimenti, strati di terra, ecc., che si sovrappongono ovviamente tra di loro. Qui le geometrie non valide sono circa 60, quindi me la cavo bene.
Un altro invece contiene caratterizzazioni degli strati, ciottoli, grumetti di calce, piccoli carboni, che essendo per lo più simboli convenzionali, vengono copiati e incollati, sparpagliando eventuali errori della geometria. Infatti qua ho qualcosa come 900 poligoni errati.

e cosi’ via…

Se fosse possibile farsi un dump della tabella con le geometrie incriminate (non e’ detto che postgis lo consenta essendoci geometrie invalide).
Io proverei a fare cosi’:

Io mi installarei in pochi minuti una istanza di pg con sopra la postgis 2.0.0 (trovi un compilato della 2.0.0 per windows nella sezione sperimentale del sito postgis).
Ci caricherei sopra la tabella via dump.

Siccome il backup della tabella si ferma appena trova le geometrie errate, ho notato che posso incollare tutto il mio livello su uno shape e salvarlo tranquillamente. A questo punto basta che ricarichi con spit lo shape in pg e fare le prove che mi consigli tu con postgis 2.0.0 su un PC.

poi lancerei il comando

create table geom_corrette as
select
st_makevalid(geom) as geom_new
from tabella
where
st_isvalid(geom)=false
;

e dovrei aver finito.

infatti tale comando trasformerebbe i self-intersection in multipolygons e li butterebbe in tale tabella.
Mi esporto la tabella (che ora e’ buona) con qhis e il gioco e’ fatto.

Ok, nei prossimi giorni proverò e vedo cosa ricavo; ovviamente posterò qua i risultati. Avere un metodo in lista (ma anche nel wiki) per correzioni future potrebbe fare comodo ad altri dummy come me.

Ciao e grazie!

Io per correggere errori del tuo tipo ho usato questa funzione sql [1],
mi sembra che funzioni bene! Puoi fare una prova.

Ciao,
giovanni

[1] http://www.sogis1.so.ch/sogis/dl/postgis/cleanGeometry.sql

Il giorno Wed, 29 Sep 2010 23:07:59 +0200
Luca Mandolesi <mandoluca@gmail.com> ha scritto:

2010/9/29 Andrea Peri 2007 <aperi2007@gmail.com>

>
>
> Trovo le geometrie errate.
>>
>>
>> A questo punto qual'è la strada migliore per correggere gli errori?
>>
>> Le devo riguardare una a una, per trovare tipo nodi sovrapposti,
>> intersezioni su se stesso, ecc?
>>
>
> La scelta dipende da una serie di fattori.
>
> Per prima cosa occorre sapere che versione di postgis hai, cosi' si
> capisce che strumenti hai a disposizione.
>

Sono su un server Linux installatomi da terzi, come anche postgres
8.4. A memoria ho postgis 1.4.

Poi quante sono le geometrie da correggere, perhce' se sono poche
comunque
> conviene farlo a mano, se tale soluzione e' ammissibile.
> Infine valutare che margine di correzione si ha. Infatti,
> correggendo le geometrie spesso si spostano vertici, se ne creano
> di nuovi o si rimuovono alcuni dei vertici esistenti.
> Questo pero' comporta degli spostamenti che potrebbero inficiare
> certe esigenze (eventuali) di precisione oppure di coerenza
> topologica, di completa copertura del territorio,
>

Dunque, le mie geometrie sono poligoni che riprendono strati
archeologici, quindi sono muri, buche, pavimenti, strati di terra,
ecc., che si sovrappongono ovviamente tra di loro. Qui le geometrie
non valide sono circa 60, quindi me la cavo bene.
Un altro invece contiene caratterizzazioni degli strati, ciottoli,
grumetti di calce, piccoli carboni, che essendo per lo più simboli
convenzionali, vengono copiati e incollati, sparpagliando eventuali
errori della geometria. Infatti qua ho qualcosa come 900 poligoni
errati.

> e cosi' via...
>
> Se fosse possibile farsi un dump della tabella con le geometrie
> incriminate (non e' detto che postgis lo consenta essendoci
> geometrie invalide). Io proverei a fare cosi':
>
> Io mi installarei in pochi minuti una istanza di pg con sopra la
> postgis 2.0.0 (trovi un compilato della 2.0.0 per windows nella
> sezione sperimentale del sito postgis).
> Ci caricherei sopra la tabella via dump.

Siccome il backup della tabella si ferma appena trova le geometrie
errate, ho notato che posso incollare tutto il mio livello su uno
shape e salvarlo tranquillamente. A questo punto basta che ricarichi
con spit lo shape in pg e fare le prove che mi consigli tu con
postgis 2.0.0 su un PC.

poi lancerei il comando

> create table geom_corrette as
> select
> st_makevalid(geom) as geom_new
> from tabella
> where
> st_isvalid(geom)=false
> ;
>
> e dovrei aver finito.
>
> infatti tale comando trasformerebbe i self-intersection in
> multipolygons e li butterebbe in tale tabella.
> Mi esporto la tabella (che ora e' buona) con qhis e il gioco e'
> fatto.
>

Ok, nei prossimi giorni proverò e vedo cosa ricavo; ovviamente
posterò qua i risultati. Avere un metodo in lista (ma anche nel wiki)
per correzioni future potrebbe fare comodo ad altri dummy come me.

Ciao e grazie!

--
dott. Giovanni Pasini - biologo
Centro Ricerche Ecologiche e Naturalistiche - C.R.E.N. Soc. Coop. r.l.
V.le Pascoli, 46 - 47900 RIMINI
tel/fax: 0541.392935
mobile: +39 3458360538
e-mail: cren@cren.it