[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