[postgis-users] Buffer() creates invalid polygons??

strk at refractions.net strk at refractions.net
Tue May 24 05:28:09 PDT 2005


What GEOS version ?
--strk;

On Tue, May 24, 2005 at 07:52:40AM -0400, Mark Fenbers wrote:
> I use the Buffer() function on a point to get a circular polygon 
> (hereafter just called "circle").  I then later subtract away a 
> rectangle (which partially overlaps the circle) using the Difference() 
> function.  This fails for about 20% (4 of 20) of the circles I compute.  
> The error I get is:
> 
> NOTICE:  TopologyException: no outgoing dirEdge found 
> (-103879.654,348793.58)
> ERROR:  GEOS difference() threw an error
> 
> I have found by accident that if I adjust the third argument to the 
> Buffer() function, the error goes away for some circles, yet appears for 
> others.  For the 80% (16 of 20) of successes with the Difference() 
> function, I used circles computed from "Buffer(the_geom, 231500.0, 
> 90)".  If I use 91 instead of 90, then I can get 2 or 3 (of the four 
> that failed) to work without failing in the Difference() function, but 
> then 2 or three others fail that had worked when the third Buffer() arg 
> was set to 90.
> 
> Eventually, I got all 20 of the circles to work using the Difference() 
> function, but I had to run the query one circle at a time, and play with 
> the value of Buffer()'s third arg until I found a value that worked for 
> that particular circle.  I shouldn't have to do this and suspect the 
> problem is a bug.  If needed, I can produce the SQL and the table 
> containing the points.
> 
> I am positive the problem is with the circles, and not the rectangles 
> I'm subtracting from them, because when the Difference() function fails 
> for a particular circle, it fails no matter what rectangle I use, and 
> when I "fix" the circle by adjusting Buffer()'s third arg, it works for 
> any rectangle I throw at it...
> 
> Oh, I almost forgot to mention what the subject line refers to... Even 
> when the Difference() function fails (and other functions like 
> Intersection, GeomUnion, and SymDifference() fail also), the IsValid() 
> function reports that the polygon *IS* a valid geometry.  I've made sure 
> that both the circle and the rectangle pass the IsValid() test before 
> feeding them to the Difference() function, but for some circles, 
> Difference() still fails.  I don't mean to pick on the Difference() 
> function as I think the problem exists in the Buffer() function 
> instead.  But I'll leave this for experts to determine...
> 
> Mark


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




More information about the postgis-users mailing list