turf icon indicating copy to clipboard operation
turf copied to clipboard

Round corners of LineString/Polygon

Open asindl opened this issue 3 years ago • 5 comments

Hi there, I am looking for an easy to use way to round corners of linestrings or polygons. Similar to the bezierSpline function, one could apply the "roundCorner" function to a linestring or polygon with a defined radius in the options which would then return the linestring/polygon with rounded corners.

Is that a meaningful feature for turf?

asindl avatar Oct 18 '22 15:10 asindl

Hi @asindl

You might want to take a look at the @turf/polygonSmooth module.

It currently doesn't work with LineString's but from memory the underlying algorithm could be extended to support that.

And there is probably other algorithms out there for smoothing which might output slightly different shapes - as there isn't really one 'correct' output, it just depends a bit on what you're expecting.

Hope that helps

rowanwins avatar Nov 07 '22 05:11 rowanwins

Thanks, @rowanwins. The polygonSmooth isn't exactly doing, what I am looking for (defined curve radius to smooth corners), but thanks for the suggestion to look at the source code and adapting it to my needs.

asindl avatar Nov 07 '22 10:11 asindl

It is possible to achieve this with multiple buffer operations.

const feature: Feature = …
const cornerRadius = 8;

// 1. increase geometry by radius without smoothing
feature.geometry = turf.buffer(feature.geometry, cornerRadius, { steps: 0 }).geometry;

// 2. decrease it by doubled radius with smoothing
feature.geometry = turf.buffer(feature.geometry, -(cornerRadius * 2), { steps: 8 }).geometry;

// 3. finally increase geometry again by radius with smoothing
feature.geometry = turf.buffer(feature.geometry, cornerRadius, { steps: 8 }).geometry;

Logical Steps

Maybe this logic could get wraped into a default function.

deflectn avatar Oct 16 '24 10:10 deflectn

@deflectn this might be enough justification for us to start a "tips and techniques" section on the website.

smallsaucepan avatar Oct 16 '24 12:10 smallsaucepan

Or perhaps @deflectn would you like to put together a PR for a new roundCorners module?

smallsaucepan avatar Oct 17 '24 22:10 smallsaucepan

Probably I could schedule it for Christmas time. 😉

deflectn avatar Oct 22 '24 06:10 deflectn