[geos-devel] bad input data or robustness issue?
mbdavis at refractions.net
Mon Mar 3 16:16:51 EST 2008
As you've noticed, the predicates are not necessarily consistent with
the overlay operations. This is because the predicates are exact,
whereas the overlay operations are approximate (which is unavoidable,
since they operated in a finite-precision model).
So, don't rely on this in your code. If you determine that two polygons
overlap, you still have to check for an empty intersection and handle it
appropriately. This should only happen when the area of overlap is so
small as to be negligible, in any case.
Also, try using a limited-precision model. Round of the numbers in your
input, and use an explicit PrecisionModel to control the precision of
the computed output. This should increase stability.
It might also help if you checked the area of intersections and
differences and eliminated ones with very small areas (since these
should be below the accuracy of your input data in any case).
HTH - Martin
Russell Strong wrote:
> Hi all,
> I'm trying to dissect up a bunch of nearly round overlapping polygons,
> ie.. trying to find areas of overlapping radar coverage given a set of
> radar locations and ranges.
> However, trying this with a few polygons, testing each case I can
> think of works very well. Add a few more and I get all sorts of
> errors including:
> * side location conflict
> * stuck in endless loop ( due to intersect and difference operations
> that produce the same polygons as we started with )
> * non-noded intersection
> * no outgoing dirEdge found
> I've included some test code that shows all of these, ( uncomment
> various tests in main ). If anyone has some time to run these and
> comment I'd appreciate it. I've spent 5 solid days on it and I'm out
> of ideas.
> it basically works like this:
> I keep a link list of "areas" which contain a geometry. I then
> compare each geometry against each other ( except for self ). If it
> intersects, I add the intersection and the 2 differences to the list
> (if they exist) and remove the source areas. I keep going until I've
> compared every area against every other area and found no non-empty
> One other thing that I found was the Overlaps can return true but the
> intersection of the two polygons returns true for isEmpty?!?!? (I was
> using overlaps instead of intersects in the split_areas comparison)
> geos-devel mailing list
> geos-devel at lists.osgeo.org
Senior Technical Architect
Refractions Research, Inc.
More information about the geos-devel