Skip to content

Commit

Permalink
Merge pull request #753 from rkflx/PR/adapt-voicehints-to-brouter-cha…
Browse files Browse the repository at this point in the history
…nges

Adapt voice hints and exporting to changes in BRouter 1.7.X
  • Loading branch information
nrenner committed Jul 22, 2023
2 parents b64b3c6 + 8809fa9 commit 5905bfc
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 5 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,3 +148,5 @@ Copyright (c) 2018 Norbert Renner and [contributors](https://github.com/nrenner/
Copyright (c) 2012 davidshimjs [The MIT License](https://github.com/llyys/qrcodejs/blob/master/LICENSE)
- [Bootstrap Icons](https://github.com/twbs/icons)
Copyright (c) 2019-2023 The Bootstrap Authors [The MIT License](https://github.com/twbs/icons/blob/main/LICENSE)
- [compare-versions](https://github.com/omichelsen/compare-versions)
Copyright (c) 2015-2021 Ole Michelsen [The MIT License](https://github.com/omichelsen/compare-versions/blob/main/LICENSE)
26 changes: 21 additions & 5 deletions js/format/VoiceHints.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@
// from BRouter btools.router.VoiceHint
VoiceHints.commands = (function () {
return {
// Command(name, locus, orux, symbol, fit, message)
1: new Command('C', 1, 1002, 'Straight', 'straight', 'straight'),
2: new Command('TL', 4, 1000, 'Left', 'left', 'left'),
3: new Command('TSLL', 3, 1017, 'TSLL', 'slight_left', 'slight left'),
Expand All @@ -125,11 +126,19 @@
7: new Command('TSHR', 8, 1018, 'TSHR', 'sharp_right', 'sharp right'),
8: new Command('KL', 9, 1015, 'TSLL', 'left_fork', 'keep left'),
9: new Command('KR', 10, 1014, 'TSLR', 'right_fork', 'keep right'),
10: new Command('TU', 13, 1003, 'TU', 'u_turn', 'u-turn'),
// According to getCommandString() in BRouter, Command.name==TU for index TLU
// "should be changed to TLU when osmand uses new voice hint constants"
// According to getMessageString() in BRouter, Command.message==u-turn for index TLU
// "should be changed to u-turn-left when osmand uses new voice hint constants"
10: new Command('TU', 13, 1003, 'TU', 'u_turn', 'u-turn'), // Left U-turn
// According to getMessageString() in BRouter, Command.message==u-turn for index TRU
// "should be changed to u-turn-right when osmand uses new voice hint constants"
11: new Command('TRU', 14, 1003, 'TU', 'u_turn', 'u-turn'), // Right U-turn
12: new Command('OFFR', undefined, undefined, undefined, 'danger', undefined), // Off route
12: new Command('OFFR', undefined, undefined, 'OFFR', 'danger', undefined), // Off route
13: new Command('RNDB', 26, 1008, 'RNDB', 'generic', 'Take exit '), // Roundabout
14: new Command('RNLB', 26, 1008, 'RNLB', 'generic', 'Take exit '), // Roundabout left
15: new Command('TU', 12, 1003, 'TU', 'u_turn', 'u-turn'), // 180 degree u-turn
16: new Command('BL', undefined, undefined, 'BL', 'danger', undefined), // Beeline
};
})();

Expand Down Expand Up @@ -170,7 +179,7 @@

class GpsiesVoiceHints extends WaypointVoiceHints {
_getWpt(hint, cmd, coord) {
return { name: cmd.message, sym: cmd.symbol.toLowerCase(), type: cmd.symbol };
return { name: cmd.message, sym: cmd.symbol?.toLowerCase(), type: cmd.symbol };
}
}

Expand All @@ -194,7 +203,7 @@
}
}

class LocusVoiceHints extends WaypointVoiceHints {
class LocusOldVoiceHints extends WaypointVoiceHints {
_addToTransform(transform) {
transform.gpx = function (gpx, features) {
// hack to insert attribute after the other `xmlns`s
Expand Down Expand Up @@ -355,7 +364,10 @@
BR.voiceHints = function (geoJson, turnInstructionMode, transportMode) {
switch (turnInstructionMode) {
case 2:
return new LocusVoiceHints(geoJson, turnInstructionMode, transportMode);
// TODO:
// Use locus-old-style voice hints for now (same style as returned by BRouter 1.6.3
// for turnInstructionMode=2), implementation for new-style locus still missing.
return new LocusOldVoiceHints(geoJson, turnInstructionMode, transportMode);
case 3:
return new OsmAndVoiceHints(geoJson, turnInstructionMode, transportMode);
case 4:
Expand All @@ -364,6 +376,10 @@
return new GpsiesVoiceHints(geoJson, turnInstructionMode, transportMode);
case 6:
return new OruxVoiceHints(geoJson, turnInstructionMode, transportMode);
case 7:
return new LocusOldVoiceHints(geoJson, turnInstructionMode, transportMode);
case 8: // Cruiser export, not exposed in the web UI through profiles yet
case 9: // BRouter internal export, not exposed in the web UI through profiles yet
default:
console.error('unhandled turnInstructionMode: ' + turnInstructionMode);
return new VoiceHints(geoJson, turnInstructionMode, transportMode);
Expand Down
27 changes: 27 additions & 0 deletions js/router/BRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ L.BRouter = L.Class.extend({
GROUP_SEPARATOR: '|',
ABORTED_ERROR: 'aborted',
CUSTOM_PREFIX: 'custom_',
SUPPORTED_BROUTER_VERSIONS: '< 1.7.0 || >=1.7.2', // compatibility string should be in npm package versioning format
isCustomProfile: function (profileName) {
return profileName && profileName.substring(0, 7) === L.BRouter.CUSTOM_PREFIX;
},
Expand Down Expand Up @@ -178,6 +179,7 @@ L.BRouter = L.Class.extend({
try {
geojson = JSON.parse(xhr.responseText);
layer = this._assignFeatures(L.geoJSON(geojson).getLayers()[0]);
this.checkBRouterVersion(layer.feature.properties.creator);

return cb(null, layer);
} catch (e) {
Expand All @@ -189,6 +191,31 @@ L.BRouter = L.Class.extend({
}
},

versionCheckDone: false,
checkBRouterVersion: function (creator) {
if (this.versionCheckDone) {
return;
}
this.versionCheckDone = true;

try {
const actualBRouterVersion = creator.replace(/^BRouter-/, '');
if (!compareVersions.satisfies(actualBRouterVersion, L.BRouter.SUPPORTED_BROUTER_VERSIONS)) {
console.warn(
'BRouter-Web ' +
BR.version +
' requires BRouter versions ' +
L.BRouter.SUPPORTED_BROUTER_VERSIONS +
', but only ' +
creator +
' was found.'
);
}
} catch (e) {
console.error(e);
}
},

getRouteSegment: function (l1, l2, cb) {
this.queue.push({ segment: [l1, l2] }, cb);
},
Expand Down
6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"bootstrap-select": "1.13.18",
"bootstrap-slider": "11.0.2",
"codemirror": "5.65.13",
"compare-versions": "^6.0.0",
"core-js-bundle": "3.29.1",
"datatables": "1.10.18",
"fit-file-writer": "tbsmark86/fit-file-writer#3eebe13",
Expand Down Expand Up @@ -309,6 +310,11 @@
"index.js"
]
},
"compare-versions": {
"main": [
"lib/umd/index.js"
]
},
"@mapbox/maki": {
"main": [
"icons/art-gallery.svg",
Expand Down
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4197,6 +4197,11 @@ commander@^9.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==

compare-versions@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.0.0.tgz#a3edb527e4487bfab9a8b62ffe70cebc9b87675b"
integrity sha512-s2MzYxfRsE9f/ow8hjn7ysa7pod1xhHdQMsgiJtKx6XSNf4x2N1KG4fjrkUmXcP/e9Y2ZX4zB6sHIso0Lm6evQ==

component-emitter@^1.2.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
Expand Down

0 comments on commit 5905bfc

Please sign in to comment.