From b9b0e21cb6b4f93ebddebd92ea235da8d9956451 Mon Sep 17 00:00:00 2001 From: afischerdev Date: Thu, 12 Dec 2024 13:52:35 +0100 Subject: [PATCH] repair vh END problems --- .../src/main/java/btools/router/OsmTrack.java | 11 +++++++++++ .../btools/router/VoiceHintProcessor.java | 19 +++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/brouter-core/src/main/java/btools/router/OsmTrack.java b/brouter-core/src/main/java/btools/router/OsmTrack.java index ff13498..ccc232a 100644 --- a/brouter-core/src/main/java/btools/router/OsmTrack.java +++ b/brouter-core/src/main/java/btools/router/OsmTrack.java @@ -469,6 +469,17 @@ public final class OsmTrack { List inputs = new ArrayList<>(); while (node != null) { if (node.origin != null) { + if (nodeNr == nodes.size() - 1) { + VoiceHint input = new VoiceHint(); + inputs.add(0, input); + input.ilat = node.getILat(); + input.ilon = node.getILon(); + input.selev = node.getSElev(); + input.goodWay = node.message; + input.oldWay = node.message; + input.indexInTrack = nodes.size() - 1; + input.cmd = VoiceHint.END; + } VoiceHint input = new VoiceHint(); inputs.add(input); input.ilat = node.origin.getILat(); diff --git a/brouter-core/src/main/java/btools/router/VoiceHintProcessor.java b/brouter-core/src/main/java/btools/router/VoiceHintProcessor.java index b44e525..5df8a67 100644 --- a/brouter-core/src/main/java/btools/router/VoiceHintProcessor.java +++ b/brouter-core/src/main/java/btools/router/VoiceHintProcessor.java @@ -29,7 +29,7 @@ public final class VoiceHintProcessor { float angle = 0.f; while (offset >= 0 && distance < range) { VoiceHint input = inputs.get(offset--); - if (input.turnAngleConsumed) { + if (input.turnAngleConsumed || input.cmd == VoiceHint.BL || input.cmd == VoiceHint.END) { break; } angle += input.goodWay.turnangle; @@ -72,15 +72,10 @@ public final class VoiceHintProcessor { results.add(input); continue; } - if (hintIdx == 0) { - input.cmd = VoiceHint.END; - input.distanceToNext = input.goodWay.linkdist; - results.add(input); - continue; - } float turnAngle = input.goodWay.turnangle; - distance += input.goodWay.linkdist; + if (hintIdx != 0) distance += input.goodWay.linkdist; + // System.out.println("range " + distance); int currentPrio = input.goodWay.getPrio(); int oldPrio = input.oldWay.getPrio(); int minPrio = Math.min(oldPrio, currentPrio); @@ -260,6 +255,10 @@ public final class VoiceHintProcessor { if (hint.cmd == 0) { hint.calcCommand(); } + if (hint.cmd == VoiceHint.END) { + results2.add(hint); + continue; + } if (!(hint.needsRealTurn && (hint.cmd == VoiceHint.C || hint.cmd == VoiceHint.BL))) { double dist = hint.distanceToNext; // sum up other hints within the catching range (e.g. 40m) @@ -455,6 +454,10 @@ public final class VoiceHintProcessor { } inputLast = input; } + if (results.size() > 0) { + // don't use END tag + if (results.get(results.size()-1).cmd == VoiceHint.END) results.remove(results.size()-1); + } return results; }