[postgis-users] Odd st_buffer behaviour

James David Smith james.david.smith at gmail.com
Tue Nov 26 03:17:52 PST 2013


Thanks for the suggestions and feedback everyone.

On 26 November 2013 08:49, Rémi Cura <remi.cura at gmail.com> wrote:
> About sharp turns : you could use a small buffer then errosion or straight
> skeleton (out of the box with sfcgal).
>
> For the flat encapt I suggest you to use st_split afterward.
>
> Cheers,
>
> Rémi-C
>
>
> 2013/11/26 Mike Toews <mwtoews at gmail.com>
>>
>> On 26 November 2013 06:04, James David Smith
>> <james.david.smith at gmail.com> wrote:
>> > 2) Now I buffer it:
>> >
>> > SELECT ST_Buffer(
>> >  ST_GeomFromText(
>> >   'LINESTRING(555936.152 200920.582000002,555938.312000002
>> > 200908.102000002,555943.112000001 200883.142000001,555953.192000001
>> > 200839.702,555964.471999999 200798.181999998,555974.312
>> > 200764.342000002,555983.912 200744.182000002,555990.554
>> > 200733.721000003,555993.512 200729.062000005,555995.778000002
>> > 200726.756000001,556006.952000001 200715.382000001,556024.232
>> > 200698.822000002,556036.597999999 200687.931,556050.392000001
>> > 200675.782000002,556055.914 200671.265000002,556071.512
>> > 200658.502000002,556094.915000001 200640.537000002,556095.451000001
>> > 200640.152000001,556113.992000001 200628.742000001,556138.472000001
>> > 200616.502000004,556159.112000002 200605.942000002,556180.232000001
>> > 200589.862000002,556207.592 200568.022000002,556217.912000002
>> > 200558.182,556228.472000001 200545.702,556240.472
>> > 200527.702000003,556251.992000001 200509.221999999,556253.237000001
>> > 200506.732000003,556258.952 200495.302000001,556268.000000001
>> > 200478.000000002,556279.592 200458.582000002,556300
>> > 200431.000000002,556351.000000002 200364,556349.253
>> > 200366.234000001)'), 1000, 'endcap=flat join=round');
>>
>> Hi James,
>>
>> I just had a spin with this geometry in JTS TestBuilder, in Buffer >
>> BufferWithParams. This graphical tool has similar controls as
>> ST_Buffer, but is slightly more interactive. I get pretty much the
>> same result, with anomalies on both ends of the linestring. GEOS (used
>> by PostGIS) is a C++ port of JTS, so this is no surprise to see the
>> same results. Only buffers less than 200 look normal.
>>
>> The oddness at the bottom is explained by a small J-shaped kink at the
>> end of the linestring, which has a short and very sharp angle (nearly
>> 360 degrees or 0 degrees), which makes the last segment go upwards and
>> nearly parallel to the second-to-last segment of the linestring.
>> Removing the last coordinate fixes things on the lower part. This is
>> most likely a digitization error.
>>
>> If you have heaps of these geometries that need cleaning up, you could
>> write a function to return the maximum vertex angle in a linestring,
>> and filter out the sharp ones, e.g. > 350 degrees or < 10 degrees,
>> then check and fix these up manually.
>>
>> On the upper-right part of the buffer, the polygon is clearly buffered
>> by the correct distance from the middle of the line, but the clip from
>> the top cap carves it a bit funny. I've seen this before too, and I'm
>> not sure if anything can be done about this part.
>>
>> -Mike
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at lists.osgeo.org
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users


More information about the postgis-users mailing list