morgan herlocker

about twitter github posts rss

Creating Concave Hulls in Javascript

turf (a general purpose gis processing engine written in node.js) makes it easy to create concave polygons from a set of points.

var t = require('turf')
var maxEdge = 2.5

t.load('../test/testIn/concaveIn.geojson', function(err, points){
  t.concave(points, maxEdge, function(err, hull){
    if(err) throw err

The above code will create a concave polygon for you with just one call, but I also want to give a brief look into how the algorithm actually works for my fellow gis engine tinkerers.

We start with some points:

From these points, we can create a TIN, which is a convex triangular mesh of polygons using the tin function:

Based on the max edge parameter, we throw out any parts of the mesh that reach too far; measured using the distance function:

Next we buffer the triangles slightly and merge the results using the buffer and merge functions:

If we want a bit more detail, we can lower the maxEdge:

For an extra smooth result, we can also add a bit of a rounded buffer to the result via the buffer function: