[prev in list] [next in list] [prev in thread] [next in thread] 

List:       postgis-users
Subject:    Re: [postgis-users] what to do about TopologyExceptions
From:       David Kaplan <david.kaplan () ird ! fr>
Date:       2010-12-23 12:26:13
Message-ID: 20101223122615.0A97CAA4F70 () fx405 ! security-mail ! net
[Download RAW message or body]

Hi,

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.

Cheers,
David


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): \
> http://2010.foss4g.org/presentations_show.php?id=3369. 
> Peter Hopfgartner
> 
> R3 GIS Srl - GmbH
> http://www.r3-gis.com
> 
> 
> --------David Kaplan <david.kaplan@ird.fr> wrote--------
> Subject: [postgis-users] what to do about TopologyExceptions
> Date: 20.12.2010 09:54
> 
> > Hi,
> > 
> > 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.
> > 
> > Cheers,
> > David
> > 
> > -- 
> > **********************************
> > 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
> > France
> > 
> > Phone: +33 (0)4 99 57 32 27
> > Fax: +33 (0)4 99 57 32 95
> > 
> > http://www.ur097.ird.fr/team/dkaplan/index.html
> > http://www.amped.ird.fr/
> > **********************************
> > 
> > 
> > _______________________________________________
> > postgis-users mailing list
> > postgis-users@postgis.refractions.net
> > http://postgis.refractions.net/mailman/listinfo/postgis-users
> > 
> 

-- 
**********************************
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
France

Phone: +33 (0)4 99 57 32 27
Fax: +33 (0)4 99 57 32 95

http://www.ur097.ird.fr/team/dkaplan/index.html
http://www.amped.ird.fr/
**********************************


["linestring.union.prob.png" (image/png)]

_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic