From: Marwin Hochfelsner <50826859+hlfan@users.noreply.github.com>
Date: Sun, 6 Apr 2025 16:40:26 +0000 (+0200)
Subject: Split off OSRM getInstructionText function
X-Git-Tag: live~67^2~4
X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/c3ff4dcf5984f877424c300938ea2dc5ac1bb438?hp=-c
Split off OSRM getInstructionText function
---
c3ff4dcf5984f877424c300938ea2dc5ac1bb438
diff --git a/app/assets/javascripts/index/directions/fossgis_osrm.js b/app/assets/javascripts/index/directions/fossgis_osrm.js
index b8001f1d2..bf5ef2547 100644
--- a/app/assets/javascripts/index/directions/fossgis_osrm.js
+++ b/app/assets/javascripts/index/directions/fossgis_osrm.js
@@ -5,7 +5,7 @@
function FOSSGISOSRMEngine(modeId, vehicleType) {
let cachedHints = [];
- function _processDirections(leg) {
+ function getInstructionText(step, maneuver_id) {
const INSTRUCTION_TEMPLATE = {
"continue": "continue",
"merge right": "merge_right",
@@ -33,36 +33,57 @@
"depart": "start",
"arrive": "destination"
};
- const ICON_MAP = {
- "continue": "straight",
- "merge right": "merge-right",
- "merge left": "merge-left",
- "off ramp right": "exit-right",
- "off ramp left": "exit-left",
- "on ramp right": "right",
- "on ramp left": "left",
- "fork right": "fork-right",
- "fork left": "fork-left",
- "end of road right": "end-of-road-right",
- "end of road left": "end-of-road-left",
- "turn straight": "straight",
- "turn slight right": "slight-right",
- "turn right": "right",
- "turn sharp right": "sharp-right",
- "turn uturn": "u-turn-left",
- "turn slight left": "slight-left",
- "turn left": "left",
- "turn sharp left": "sharp-left",
- "roundabout": "roundabout",
- "rotary": "roundabout",
- "exit roundabout": "roundabout",
- "exit rotary": "roundabout",
- "depart": "start",
- "arrive": "destination"
- };
function numToWord(num) {
return ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth"][num - 1];
}
+
+ const instrPrefix = "javascripts.directions.instructions.";
+ let template = instrPrefix + INSTRUCTION_TEMPLATE[maneuver_id];
+
+ let instText;
+ const destinations = "" + step.destinations + "";
+ let namedRoad = true;
+ let name;
+
+ if (step.name && step.ref) {
+ name = "" + step.name + " (" + step.ref + ")";
+ } else if (step.name) {
+ name = "" + step.name + "";
+ } else if (step.ref) {
+ name = "" + step.ref + "";
+ } else {
+ name = OSM.i18n.t(instrPrefix + "unnamed");
+ namedRoad = false;
+ }
+
+ if (step.maneuver.type.match(/^exit (rotary|roundabout)$/)) {
+ instText = OSM.i18n.t(template, { name: name });
+ } else if (step.maneuver.type.match(/^(rotary|roundabout)$/)) {
+ if (step.maneuver.exit) {
+ if (step.maneuver.exit <= 10) {
+ instText = OSM.i18n.t(template + "_with_exit_ordinal", { exit: OSM.i18n.t(instrPrefix + "exit_counts." + numToWord(step.maneuver.exit)), name: name });
+ } else {
+ instText = OSM.i18n.t(template + "_with_exit", { exit: step.maneuver.exit, name: name });
+ }
+ } else {
+ instText = OSM.i18n.t(template + "_without_exit", { name: name });
+ }
+ } else if (step.maneuver.type.match(/^(on ramp|off ramp)$/)) {
+ const params = {};
+ if (step.exits && step.maneuver.type.match(/^(off ramp)$/)) params.exit = step.exits;
+ if (step.destinations) params.directions = destinations;
+ if (namedRoad) params.directions = name;
+ if (Object.keys(params).length > 0) {
+ template = template + "_with_" + Object.keys(params).join("_");
+ }
+ instText = OSM.i18n.t(template, params);
+ } else {
+ instText = OSM.i18n.t(template + "_without_exit", { name: name });
+ }
+ return instText;
+ }
+
+ function _processDirections(leg) {
function getManeuverId(maneuver) {
// special case handling
switch (maneuver.type) {
@@ -87,56 +108,45 @@
return "turn " + maneuver.modifier;
}
}
+ const ICON_MAP = {
+ "continue": "straight",
+ "merge right": "merge-right",
+ "merge left": "merge-left",
+ "off ramp right": "exit-right",
+ "off ramp left": "exit-left",
+ "on ramp right": "right",
+ "on ramp left": "left",
+ "fork right": "fork-right",
+ "fork left": "fork-left",
+ "end of road right": "end-of-road-right",
+ "end of road left": "end-of-road-left",
+ "turn straight": "straight",
+ "turn slight right": "slight-right",
+ "turn right": "right",
+ "turn sharp right": "sharp-right",
+ "turn uturn": "u-turn-left",
+ "turn slight left": "slight-left",
+ "turn left": "left",
+ "turn sharp left": "sharp-left",
+ "roundabout": "roundabout",
+ "rotary": "roundabout",
+ "exit roundabout": "roundabout",
+ "exit rotary": "roundabout",
+ "depart": "start",
+ "arrive": "destination"
+ };
const steps = leg.steps.map(function (step) {
const maneuver_id = getManeuverId(step.maneuver);
-
- const instrPrefix = "javascripts.directions.instructions.";
- let template = instrPrefix + INSTRUCTION_TEMPLATE[maneuver_id];
-
const step_geometry = L.PolylineUtil.decode(step.geometry, { precision: 5 });
-
- let instText;
- const destinations = "" + step.destinations + "";
- let namedRoad = true;
- let name;
-
- if (step.name && step.ref) {
- name = "" + step.name + " (" + step.ref + ")";
- } else if (step.name) {
- name = "" + step.name + "";
- } else if (step.ref) {
- name = "" + step.ref + "";
- } else {
- name = OSM.i18n.t(instrPrefix + "unnamed");
- namedRoad = false;
- }
-
- if (step.maneuver.type.match(/^exit (rotary|roundabout)$/)) {
- instText = OSM.i18n.t(template, { name: name });
- } else if (step.maneuver.type.match(/^(rotary|roundabout)$/)) {
- if (step.maneuver.exit) {
- if (step.maneuver.exit <= 10) {
- instText = OSM.i18n.t(template + "_with_exit_ordinal", { exit: OSM.i18n.t(instrPrefix + "exit_counts." + numToWord(step.maneuver.exit)), name: name });
- } else {
- instText = OSM.i18n.t(template + "_with_exit", { exit: step.maneuver.exit, name: name });
- }
- } else {
- instText = OSM.i18n.t(template + "_without_exit", { name: name });
- }
- } else if (step.maneuver.type.match(/^(on ramp|off ramp)$/)) {
- const params = {};
- if (step.exits && step.maneuver.type.match(/^(off ramp)$/)) params.exit = step.exits;
- if (step.destinations) params.directions = destinations;
- if (namedRoad) params.directions = name;
- if (Object.keys(params).length > 0) {
- template = template + "_with_" + Object.keys(params).join("_");
- }
- instText = OSM.i18n.t(template, params);
- } else {
- instText = OSM.i18n.t(template + "_without_exit", { name: name });
- }
- return [[step.maneuver.location[1], step.maneuver.location[0]], ICON_MAP[maneuver_id], instText, step.distance, step_geometry];
+ const instText = getInstructionText(step, maneuver_id);
+ return [
+ [step.maneuver.location[1], step.maneuver.location[0]],
+ ICON_MAP[maneuver_id],
+ instText,
+ step.distance,
+ step_geometry
+ ];
});
return {