[postgis-users] Buffer() creates invalid polygons??
strk at refractions.net
strk at refractions.net
Tue May 24 06:30:55 PDT 2005
On Tue, May 24, 2005 at 09:28:10AM -0400, Mark Fenbers wrote:
> PostGIS 1.0.0
> GOES 2.1.1
> Proj4 4.4.9
> Mark
Would you try branch-2-1 from CVS ?
It would be GEOS 2.1.2 very soon.
Also, did you make sure yor input geometries are valid (with IsValid) ?
Finally, can you provide an sql file containing the failing query ?
--strk;
>
> 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
> >
> >
> >
> _______________________________________________
> 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