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

Mark Fenbers Mark.Fenbers at noaa.gov
Tue May 24 06:28:10 PDT 2005


PostGIS 1.0.0
GOES 2.1.1
Proj4 4.4.9
Mark

strk at refractions.net wrote:

>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
>>    
>>
>
>_______________________________________________
>postgis-users mailing list
>postgis-users at postgis.refractions.net
>http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>  
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Mark.Fenbers.vcf
Type: text/x-vcard
Size: 283 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20050524/4e446396/attachment.vcf>


More information about the postgis-users mailing list