function getPointsAlongPolyline(polyline, count) {
const distances = polyline.map((p, i) => {
return distanceBetween(p, polyline[i + 1] || polyline[0]);
});
const totalLength = d3.sum(distances);
const stepsize = totalLength / count;
let traversed = 0;
let next = stepsize / 2;
const done = polyline.reduce((arr, currentPoint, i) => {
const distanceBetweenCurrentPoints = distances[i];
while (next < traversed + distanceBetweenCurrentPoints) {
let nextPoint = polyline[i + 1] || polyline[0];
let percent = (next - traversed) / distanceBetweenCurrentPoints;
arr.push([
currentPoint[0] + (nextPoint[0] - currentPoint[0]) * percent,
currentPoint[1] + (nextPoint[1] - currentPoint[1]) * percent
]);
next += stepsize;
}
traversed += distanceBetweenCurrentPoints;
return arr;
}, []);
return done;
}