a = {
let gridPoints = await rawPoints
.map((point, i) => {
let contained_s = circles.map(circle => {
let distance = d3.geoDistance(circle.geometry.coordinates, point);
let radius = miliseconds_to_radius(Math.min(...circle.rtts));
let geoCircle = d3
.geoCircle()
.center(circle.geometry.coordinates)
.radius(radius)();
let contained = d3.geoContains(geoCircle, point);
return { contained: contained, distance: distance };
});
return {
centroid: projection(point),
data: sum_array(
contained_s.map(
contained => (contained.contained ? 1.0 / contained.distance : 0)
)
)
};
})
.filter(d => d.centroid !== null && d.data !== null);
console.log('grid', gridPoints);
let contour_data = await gridPoints.reduce((acc, climdiv) => {
const num_points = Math.floor(Math.abs(climdiv.data));
const array = new Array(num_points).fill(climdiv.centroid, 0, num_points);
return [...acc, ...array];
}, []);
console.log('contour_data', contour_data);
let contour = d3
.contourDensity()
.x(d => d[0])
.y(d => d[1])
.size([width, width * (9 / 16)])
.cellSize(2);
let contours = await contour(contour_data);
let colors = [
"#023858",
"#045a8d",
"#0570b0",
"#3690c0",
"#74a9cf",
"#a6bddb",
"#d0d1e6",
"#fff",
"#fed976",
"#feb24c",
"#fd8d3c",
"#fc4e2a",
"#e31a1c",
"#bd0026",
"#800026"
];
let density_thresholds = await contours.map(
d => Math.floor(d.value * 100000) / 100000
);
let linearColorScale = d3
.scaleLinear()
.domain(d3.range(0, 1, 1 / colors.length))
.range(colors)
.interpolate(d3.interpolateLab);
let quantz = d3.quantize(linearColorScale, density_thresholds.length * 2);
return {
quantz: quantz,
density_thresholds: density_thresholds,
contours: contours,
contour_data: contour_data,
gridPoints: gridPoints
};
}