Step5_01_MapRouteToTesselatedCenter = (route) => {
const route_line_orig = route;
const route_triangles_overlap = [];
for (const triangle of Step4_01_CleanedTesselations.features) {
if (
_Imports.Geospatial.turf.lineIntersect(route_line_orig, triangle).features
.length > 0
) {
route_triangles_overlap.push(triangle);
}
}
const route_line_densified = _Imports.Geospatial.turf.lineChunk(
route_line_orig,
0.001,
{ units: "kilometers" }
);
const exploded_line_points = [];
for (const seg of route_line_densified.features) {
exploded_line_points.push(
...seg.geometry.coordinates
);
}
const exploded_line_points_cleaned = _Imports.Geospatial.turf.cleanCoords(
_Imports.Geospatial.turf.lineString(exploded_line_points)
).geometry.coordinates;
const new_line_points = [];
for (const point of exploded_line_points_cleaned) {
for (const triangle of route_triangles_overlap) {
if (_Imports.Geospatial.turf.booleanPointInPolygon(point, triangle)) {
new_line_points.push(triangle.properties.centerOfMass);
break;
}
}
}
const output_linestring = _Imports.Geospatial.turf.cleanCoords(
_Imports.Geospatial.turf.lineString(new_line_points)
);
return output_linestring;
}