[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