-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
h3-polyfill.js
37 lines (28 loc) · 1.04 KB
/
h3-polyfill.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const h3 = require('h3-js');
const helpers = require('@turf/helpers');
const normalize = require('@mapbox/geojson-normalize');
const fillPolygon = (coordinates, resolution) => {
const hexagons = h3.polyfill(coordinates, resolution, true);
const polygons = hexagons.map((h3Index) => {
const boundaryCoordinates = h3.h3ToGeoBoundary(h3Index, true);
return helpers.polygon([boundaryCoordinates]);
});
return polygons;
};
const polyfill = (polygon, resolution) => {
const fc = normalize(polygon);
const featureGeometry = fc.features[0].geometry;
if (!['Polygon', 'MultiPolygon'].includes(featureGeometry.type)) {
throw new Error(`Unsupported geometry type ${featureGeometry.type}`);
}
const polygonCoordinates =
featureGeometry.type === 'MultiPolygon'
? featureGeometry.coordinates
: [featureGeometry.coordinates];
const hexes = polygonCoordinates.reduce(
(acc, coordinates) => acc.concat(fillPolygon(coordinates, resolution)),
[]
);
return helpers.featureCollection(hexes);
};
module.exports = polyfill;