[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