Calculate and show the required speed at all points of the route
This commit is contained in:
+4
-2
@@ -61,7 +61,8 @@ interface FoundPathsFromNode {
|
||||
|
||||
interface GetFullPath {
|
||||
startNodeId: number,
|
||||
endNodeId: number
|
||||
endNodeId: number,
|
||||
dragCoefficient: number
|
||||
}
|
||||
|
||||
export interface Coordinate {
|
||||
@@ -72,7 +73,8 @@ export interface Coordinate {
|
||||
export interface PathSegment {
|
||||
start: Coordinate,
|
||||
end: Coordinate,
|
||||
speed: number
|
||||
calculatedSpeed: number,
|
||||
requiredSpeed: number
|
||||
}
|
||||
|
||||
interface ReturnFullPath {
|
||||
|
||||
+2
-1
@@ -160,7 +160,8 @@ function setUpMapHandler() {
|
||||
routeWorker.postMessage(message);
|
||||
});
|
||||
mapHandler.addClickedEndpointListener((startNodeId, endNodeId) => {
|
||||
let message: Message = {getFullPath: {startNodeId: startNodeId, endNodeId: endNodeId}};
|
||||
let settings = getSettings();
|
||||
let message: Message = {getFullPath: {startNodeId: startNodeId, endNodeId: endNodeId, dragCoefficient: settings.dragCoefficient}};
|
||||
routeWorker.postMessage(message);
|
||||
});
|
||||
mapHandler.addExclusionAreaListener(polygons => {
|
||||
|
||||
@@ -11,7 +11,7 @@ import type { Position } from 'geojson';
|
||||
import { createPalette } from 'hue-map';
|
||||
|
||||
const viridisPalette = createPalette({
|
||||
map: 'inferno',
|
||||
map: 'viridis',
|
||||
steps: 100
|
||||
});
|
||||
|
||||
@@ -312,13 +312,15 @@ class MapHandler {
|
||||
let endLeafletCoordinate: LatLngTuple = [pathSegment.end.latitude, pathSegment.end.longitude];
|
||||
let leafletCoordinates = [startLeafletCoordinate, endLeafletCoordinate];
|
||||
|
||||
let intensity = Math.round((pathSegment.speed - minimumSpeed) * 99.0 / (maximumSpeed - minimumSpeed));
|
||||
let intensity = Math.round((pathSegment.requiredSpeed - minimumSpeed) * 99.0 / (maximumSpeed - minimumSpeed));
|
||||
intensity = Math.min(Math.max(intensity, 0), 99);
|
||||
let color = viridisPalette.format('cssHex')[99-intensity];
|
||||
|
||||
let polyLine = L.polyline(leafletCoordinates, {color: color}).addTo(this.path);
|
||||
let speedKmh = pathSegment.speed * 3.6;
|
||||
polyLine.bindTooltip(Math.round(speedKmh) + '.' + (Math.round(speedKmh * 10.0) % 10) + ' km/h');
|
||||
let requiredSpeed = Math.max(minimumSpeed, pathSegment.requiredSpeed);
|
||||
let requiredSpeedKmh = requiredSpeed * 3.6;
|
||||
let requiredSpeedKmhRounded = Math.round(requiredSpeedKmh * 10.0);
|
||||
polyLine.bindTooltip('Required speed: ' + Math.floor(requiredSpeedKmhRounded / 10.0) + '.' + (requiredSpeedKmhRounded % 10) + ' km/h');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ onmessage = async (e) => {
|
||||
}
|
||||
|
||||
if (message.getFullPath != null) {
|
||||
let path = module.getPath(message.getFullPath.startNodeId, message.getFullPath.endNodeId);
|
||||
let path = module.getPath(message.getFullPath.startNodeId, message.getFullPath.endNodeId, message.getFullPath.dragCoefficient);
|
||||
if (!path) {
|
||||
sendErrorMessage('Could not get path');
|
||||
return;
|
||||
@@ -150,6 +150,7 @@ onmessage = async (e) => {
|
||||
let currentLngLat = proj4('EPSG:32633', 'EPSG:4326', currentUtm);
|
||||
|
||||
let speed = Math.max(previousPoint.currentSpeed, currentPoint.currentSpeed);
|
||||
let requiredSpeed = Math.max(previousPoint.requiredSpeed, currentPoint.requiredSpeed);
|
||||
let segment: PathSegment = {
|
||||
start: {
|
||||
latitude: previousLngLat[1],
|
||||
@@ -159,7 +160,8 @@ onmessage = async (e) => {
|
||||
latitude: currentLngLat[1],
|
||||
longitude: currentLngLat[0]
|
||||
},
|
||||
speed: speed
|
||||
calculatedSpeed: speed,
|
||||
requiredSpeed: requiredSpeed
|
||||
}
|
||||
|
||||
pathSegments.push(segment);
|
||||
|
||||
Reference in New Issue
Block a user