TopologyException in GEOS ST_Union function

I'm writting a function using the plpgsql language in PostgreSQL.
This function operate with geometries and I do something like this:

-- Open a cursor for a table

OPEN veget_cursor FOR
        SELECT gid, wkb_geometry as the_geom
        FROM table_v;
LOOP
        FETCH veget_cursor INTO _gid, veget_geom;

        -- Validate the geometry of the table table_v

        IF ST_isvalid(veget_geom) THEN

-- Open a cursor for a selection. The selection only contains the geometries that intersects
                -- with the current geometry of the cursor veget_cursor.

                OPEN floor_cursor FOR
                        SELECT gid, wkb_geometry as the_geom
                                FROM table_f
                                WHERE ST_Intersects(wkb_geometry, veget_geom);
                        LOOP
                                FETCH floor_cursor INTO f3, floor_geom;

                                -- Validate the geometry of the other table 
(table_f)

                                IF ST_isvalid(floor_geom) THEN

                                        -- Intersects the geometries of the two 
cursors

                                        geom := ST_Intersection(floor_geom, 
veget_geom);

                                        -- Validate the resultant geometry of 
the intersection operation

                                        IF (ST_Isvalid(geom)) THEN

                                        -- Here join the geometry of geom into 
union_geom

                                                        IF union_geom IS NULL 
THEN
                                                                union_geom := 
geom;
                                                        ELSE
                                                                union_geom := 
st_union(union_geom, geom);
                                                        END IF;
                                        END IF;

                                END IF;
                        END LOOP;
                CLOSE floor_cursor;
END LOOP;
CLOSE veget_cursor;

This code throw a topology exception:
TopologyException: found non-noded intersection between -83.5325 22.7268, -83.5327 22.7271 and -83.5327 22.7269, -83.5325 22.7268 -83.5325 22.7268
ERROR:  GEOS union() threw an error!

The questions are:
- Why does it throw an exception if I'm validating all geometries?
- What does the exception mean?
- What can I do?

Best regards, Salas

_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to