From 7e4bcebd3c5ec6ed9dd7a6fc4d51986d5fb554e5 Mon Sep 17 00:00:00 2001 From: Arndt Brenschede Date: Sat, 27 Jun 2020 12:37:15 +0200 Subject: [PATCH] fixed problem for same-segment searches with exact node matches --- .../src/main/java/btools/router/RoutingEngine.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/brouter-core/src/main/java/btools/router/RoutingEngine.java b/brouter-core/src/main/java/btools/router/RoutingEngine.java index 4dcc23a..bc50346 100644 --- a/brouter-core/src/main/java/btools/router/RoutingEngine.java +++ b/brouter-core/src/main/java/btools/router/RoutingEngine.java @@ -590,11 +590,18 @@ public class RoutingEngine extends Thread OsmPath p = getStartPath( n1, n2, new OsmNodeNamed( mwp.waypoint ), endPos ); // special case: start+end on same segment - if ( sameSegmentSearch ) + if ( p.cost >= 0 && sameSegmentSearch ) { + OsmPath path2end = getStartPath( n1, n2, endPos, endPos ); + boolean isDirect = path2end.cost >= p.cost; + OsmPath pe = getEndPath( n1, p.getLink(), endPos ); OsmPath pt = getEndPath( n1, p.getLink(), null ); int costdelta = pt.cost - p.cost; + if ( isDirect && pe.cost < costdelta ) + { + costdelta = pe.cost; + } if ( pe.cost >= costdelta ) { pe.cost -= costdelta;