[Gfoss] problema postgis

Avevo provato a fare una domanda sul tema, ma era periodo di ponte e
la domanda era poco chiara. Ci riprovo, magari qualcuno mi sa aiutare.

Sto cercando di fare l'intersezione di 2 layer in postgis, correi
scrivere un terso layer con le geometrie risultanti dall'intersezione
e parte dei dati di entrambi.
Ho provato così:

CREATE TABLE intersezione AS
SELECT intersection(f.the_geom, c.the_geom) as the_geom, f.gid,
f.nome_campo, c.nome_campo
FROM layer1 f, layer2 c
WHERE
f.the_geom && c.the_geom
AND
Intersects(f.the_geom, c.the_geom);

Il processo parte, ma mi da come risultato un errore:

NOTICE: TopologyException: no outgoing dirEdge found
(759504,4.85573e+06,4.85573e+06)

ERROR: GEOS Intersection() threw an error!

E' capitato a qualcuno?

Grazie in anticipo.

Iacopo

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Iacopo Zetti ha scritto:

Il processo parte, ma mi da come risultato un errore:

NOTICE: TopologyException: no outgoing dirEdge found
(759504,4.85573e+06,4.85573e+06)

ERROR: GEOS Intersection() threw an error!

Assolutamente di corsa e al volo ma e' possibile che ci siano
sovrapposizioni che producono punti o linee invece di poligoni perche'
le forme si toccano appena?
Una volta a me era successo per quello.

Altra possibilita':
che tu abbia qualche poligono non valido (con qualche errore topologico)
prova

select gid, isvalid(the_geom) from nometabella order by isvalid desc;
dovrebbe dirti per ogni poligono se e' valido (prova su entrambe le
tabelle su cui lavori).

ciao
lia

- --
Emilia Venturato
email+jabber: venturato@faunalia.it
www.faunalia.it
Tel: (+39) 347-2770007 Tel+Fax: (+39) 0587-213742
Piazza Garibaldi 5 - 56025 Pontedera (PI), Italy
http://www.faunalia.it/ev
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFIIF9UOsndmJr6cvYRAszLAKCpZcP1J5qy5PbVWEWfXM2XN56pEgCdHFCy
9jlyA5YscQc0ol2h0sW66r4=
=LU7V
-----END PGP SIGNATURE-----

I poligoni sono tutti validi, la prima ipotesi invece mi pare la più
probabile, ma se è così come ne esco?
Grazie mille comunque ho almeno eliminato una ipotesi.

Iacopo

Il 6 maggio 2008 15.38, Emilia Venturato <venturato@faunalia.it> ha scritto:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Iacopo Zetti ha scritto:

>
> Il processo parte, ma mi da come risultato un errore:
>
> NOTICE: TopologyException: no outgoing dirEdge found
> (759504,4.85573e+06,4.85573e+06)
>
> ERROR: GEOS Intersection() threw an error!
>
Assolutamente di corsa e al volo ma e' possibile che ci siano
sovrapposizioni che producono punti o linee invece di poligoni perche'
le forme si toccano appena?
Una volta a me era successo per quello.

Altra possibilita':
che tu abbia qualche poligono non valido (con qualche errore topologico)
prova

select gid, isvalid(the_geom) from nometabella order by isvalid desc;
dovrebbe dirti per ogni poligono se e' valido (prova su entrambe le
tabelle su cui lavori).

ciao
lia

- --
Emilia Venturato
email+jabber: venturato@faunalia.it
www.faunalia.it
Tel: (+39) 347-2770007 Tel+Fax: (+39) 0587-213742
Piazza Garibaldi 5 - 56025 Pontedera (PI), Italy
http://www.faunalia.it/ev
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFIIF9UOsndmJr6cvYRAszLAKCpZcP1J5qy5PbVWEWfXM2XN56pEgCdHFCy
9jlyA5YscQc0ol2h0sW66r4=
=LU7V
-----END PGP SIGNATURE-----

Scusate se mi auto-rispondo, ma magari l'esperienza può essere utile ad altri.

Ho risolto semplificando i poligoni:

CREATE TABLE nomenuovolayer AS
SELECT SnapToGrid(vecchiolayer.the_geom, 0.001) AS geom, altricampi
FROM vecchiolayer

e poi rifacendo l'intersezione come prima, ma sulle nuove tabelle.

CREATE TABLE intersezione AS
SELECT intersection(f.the_geom, c.the_geom) as the_geom, f.altricampi,
c.altricampi
FROM layer1 f, layer2 c
WHERE
f.the_geom && c.the_geom
AND
Intersects(f.the_geom, c.the_geom);

Se qualcuno che ne sa più di me ha voglia di completare l'informazione
mi rimangono 2 domande:
1) si può fare lo SnapToGrid senza creare nuovi layer, ma direttamente
dentro il comando Intersects?
2) se i poligoni non sono validi si può correggere l'errore della
topologia con postgis o tocca passare per grass o altro?

Buon fine settimana a tutti.

Iacopo