[postgis-users] what to do about TopologyExceptions
david.kaplan at ird.fr
Thu Dec 23 04:26:13 PST 2010
I thought I had everything figured out with respect to my problems
unioning and differencing polygons, but I am running into more
TopologyExceptions that have me confused.
After looking at Paul Ramsey's FOSS4G presentation, I realized that what
I really wanted to do was an "ArcGIS Union Operation" - i.e. reducing a
set of overlapping polygons into all possible combinations of overlaps.
My table consists of a set of MULTIPOLYGONs that sometimes overlap. I
used ST_Buffer(0) to force them to be valid polygons (and checked this
worked correctly). Then I did the following to reduce every polygon to
just the LINESTRINGs that define them:
SELECT ST_ExteriorRing((ST_DumpRings((ST_Dump(wkb_geometry)).geom)).geom) AS geom
INTO TEMP TABLE ht1 FROM my_geo_table;
Note that I added ST_ExteriorRing to ST_DumpRings to reduce polygons to
linestrings. Is this correct?
Then I wanted to union these linestrings to assure that they have all
the nodes at overlaps, but I keep getting a TopologyException:
SELECT ST_Union(geom) AS geom INTO TEMP TABLE ht2 FROM ht1;
NOTICE: TopologyException: found non-noded intersection between LINESTRING (-165.443 23.1836, -165.443 23.1836) and LINESTRING (-165.443 23.1836, -165.464 23.2079) at -165.443 23.1836
ERROR: GEOS union() threw an error!
Presuming the coordinates given are actual geographic coordinates, it
appears that this problem occurs at a location that two different
linestrings just barely overlap (see attached image). Is this a
postgis / GEOS problem or is there something that I am doing that is
conceptually wrong? In either case, is there a way to move forward?
The next steps in the process would be to use ST_Polygonize to get back
a bunch of polygons, ST_PointOnSurface to find interior points and
ST_Intersects to find the original polygons these points belonged to.
Thanks again for the help.
On Mon, 2010-12-20 at 17:49 +0100, Peter Hopfgartner wrote:
> AFAIK there are slightly different definitions of valid polygon between shape files and PostGIS/Simple Features.
> Paul Ramsey had a talk on a number of tricks to correct those problems (and some more):
> Peter Hopfgartner
> R3 GIS Srl - GmbH
> --------David Kaplan <david.kaplan at ird.fr> wrote--------
> Subject: [postgis-users] what to do about TopologyExceptions
> Date: 20.12.2010 09:54
> >I am working with a GIS table that is derived from importing a fairly
> >complex shapefile. I want to do a number of union and difference
> >operations, but I am encountering TopologyException problems and am
> >wondering how much attention I need to pay to these exceptions and what
> >is the best way to deal with these problems.
> >For example, upon doing a simple union operation, I have:
> >CREATE TABLE by_country_iucn AS
> >SELECT min(ogc_fid) AS ogc_fid, country, iucn_cat,
> > ST_Multi( ST_Union( wkb_geometry ) ) AS wkb_geometry
> >FROM pol_2010
> >GROUP BY country, iucn_cat
> >ORDER BY country, iucn_cat;
> >I get the following exception at the end:
> >NOTICE: TopologyException: side location conflict at 29.1972 0.251105
> >However, I am not sure what to do with this for two reasons:
> >1) The point indicated in the exception (presuming this is a 2D point
> >location) is located in the middle of nowhere and none of my polygons
> >come anywhere near it (the nearest is >1000 km away).
> >2) Looking at the result of the union, I don't see any obvious problems.
> >Do these exceptions mean I am missing some part of the desired union?
> >For the union, this returns a result no problem, but for the difference
> >operations that follow it, the query fails with no result after a
> >similar exception.
> >I saw in a previous thread that I should use ST_IsValid to test for
> >problems. I applied this to my shapefile and it found lots of results.
> >Looking at the "bad" polygons, many look fine to the naked eye, but some
> >do have strange things like internal lines. Is there a good way to fix
> >these? ST_SimplifyPreserveTopology? Will doing this help the other
> >union and difference manipulations?
> >Thanks for the help.
> >David M. Kaplan
> >Charge de Recherche 1
> >Institut de Recherche pour le Developpement
> >Centre de Recherche Halieutique Mediterraneenne et Tropicale
> >av. Jean Monnet
> >B.P. 171
> >34203 Sete cedex
> >Phone: +33 (0)4 99 57 32 27
> >Fax: +33 (0)4 99 57 32 95
> >postgis-users mailing list
> >postgis-users at postgis.refractions.net
David M. Kaplan
Charge de Recherche 1
Institut de Recherche pour le Developpement
Centre de Recherche Halieutique Mediterraneenne et Tropicale
av. Jean Monnet
34203 Sete cedex
Phone: +33 (0)4 99 57 32 27
Fax: +33 (0)4 99 57 32 95
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 14379 bytes
Desc: not available
More information about the postgis-users