[postgis-users] negative buffer

Picavet Vincent Vincent.Picavet at mediapost.fr
Wed Jan 21 03:31:33 PST 2009

> Vincent, thank you for the suggestion!
You're welcome.

> So 3 question remain:
> What does st_buffer(geom,0) - just optimising the segments of 
> the polygone?

It builds a buffer around a geometry with a radius of 0. Seems to be
useless, but from the way the buffer is built, it is a method to
transform a non-valid geometry into a valid one.

> Before I dropped the constraint it prevented the insert of 
> the buffer geometry because it complained to be violated. 
> Dropping it st_isvalid()however gives TRUE. This is a bit 
> confusing to me. Do I mix something here? And are invalid 
> geometries now likely to produced by postgis functions in 
> some cases due to dropping the geometry check?

The geometry constraints check dimention, SRID and the type of geometry
inserted, not its validity.
If you had problems with the constraints, it is probably because the
negative buffer yields a point or a linestring instead of a polygon. The
geometry is probably valid, but it is not the right type, thus the
constraint violation.
You probably want to discard those geometries with a test on
st_geometrytype, taking only polygons into account.

Hope this helps.

> Thank you, Torsten
> >>I have polygons with sometimes very peculiar shapes 
> representing the 
> >>distribution limits of specific types of sediments (e.g. 
> channel-like 
> >>branching, fluvial fans...).
> >>When I try to create positive and negative buffers of that polygons 
> >>using the combined (st_buffer(st_simply(geom,i)j)-method I succeed 
> >>only in positive direction. In negative direction it very fastly 
> >>violates enforce_geotype_geom-check. When I look on the 
> last results I 
> >>see, it is related to the channel-like branches.
> >>Using the buffer-method in ArcGIS it works as expected. Is there a 
> >>clever method getting it work in PostGIS too?
> >>    
> >>
> >
> >As for getting negative buffers to be valid geometries, I 
> generally use 
> >the 0-buffer trick as in :
> >st_buffer(st_buffer(geom, -i), 0). Not 100% sure it will work but it 
> >generally fixes a lot of problems.
> >
> >Let us know of the results if you try that with your data.
> >
> >Vincent
> >  
> >
> _______________________________________________
> 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