Public
Edited
Nov 8, 2024
3 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
/**
* Construct a FeatureCollection of cells covering a given GeoJSON geometry, `geom`,
* with cells having an approximate edge length of `edgeLength`.
*/
makeGeojsonCells = (geom, edgeLength) => {
const level = getS2LevelFromCellSize(edgeLength)
const coverer = new s2js.geojson.RegionCoverer({ minLevel: level, maxLevel: level })
const ids = coverer.covering(geom);

return {
type: 'FeatureCollection',
features: ids.map((u) => ({
type: 'Feature',
geometry: s2js.geojson.toGeoJSON(s2js.s2.Cell.fromCellID(u)),
properties: { cellID: u },
})),
};
}
Insert cell
/**
* Compute the closest S2 level given a desired cell edge length.
*/
getS2LevelFromCellSize = (targetCellWidthMeter) => {
let closestResolution = 0;
let minDiff = Infinity;

for (let res = 0; res < levelCellEdgeSize.length; res++) {
const diff = Math.abs(levelCellEdgeSize[res][5] - targetCellWidthMeter);
if (diff < minDiff) {
minDiff = diff;
closestResolution = res;
}
}

return closestResolution;
}

Insert cell
levelCellEdgeSize = [
// Extracted from http://s2geometry.io/resources/s2cell_statistics
// Level, Random cell 1 (UK) min edge length, Random cell 1 (UK) max edge length, Random cell 1 (US) min edge length, Random cell 1 (US) max edge length, Average edge length (computed from the 4 previous values)
[0,7842000,7842000,7842000,7842000,7842000],
[1,3921000,5004000,3921000,5004000,4462500],
[2,1825000,2489000,1825000,2489000,2157000],
[3,840000,1167000,1130000,1310000,1111750],
[4,432000,609000,579000,636000,564000],
[5,210000,298000,287000,315000,277500],
[6,108000,151000,143000,156000,139500],
[7,54000,76000,72000,78000,70000],
[8,27000,38000,36000,39000,35000],
[9,14000,19000,18000,20000,17750],
[10,7000,9000,9000,10000,8750],
[11,3000,5000,4000,5000,4250],
[12,1699,2000,2000,2000,1924.75],
[13,850,1185,1123,1225,1095.75],
[14,425,593,562,613,548.25],
[15,212,296,281,306,273.75],
[16,106,148,140,153,136.75],
[17,53,74,70,77,68.5],
[18,27,37,35,38,34.25],
[19,13,19,18,19,17.25],
[20,7,9,9,10,8.75],
[21,3,5,4,5,4.25],
[22,1.66,2,2,2,1.915],
[23,0.83,1.16,1.1,1.2,1.0725],
[24,0.41,0.58,0.55,0.6,0.535],
[25,0.21,0.29,0.27,0.3,0.2675],
[26,0.1,0.14,0.14,0.15,0.1325],
[27,0.05,0.07,0.07,0.07,0.065],
[28,0.02,0.04,0.03,0.04,0.0325],
[29,0.012,0.018,0.017,0.018,0.01625],
[30,0.006,0.009,0.008,0.009,0.008],
]
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more