From daa33e3d34e79e818e2c2e2582991c568fe74e8c Mon Sep 17 00:00:00 2001 From: afischerdev Date: Sat, 8 Jul 2023 09:56:40 +0200 Subject: [PATCH 1/3] give a second chance when wpt not found --- .../src/main/java/btools/mapaccess/NodesCache.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/brouter-mapaccess/src/main/java/btools/mapaccess/NodesCache.java b/brouter-mapaccess/src/main/java/btools/mapaccess/NodesCache.java index 2e7d0b2..f2a6316 100644 --- a/brouter-mapaccess/src/main/java/btools/mapaccess/NodesCache.java +++ b/brouter-mapaccess/src/main/java/btools/mapaccess/NodesCache.java @@ -285,7 +285,13 @@ public final class NodesCache { public void matchWaypointsToNodes(List unmatchedWaypoints, double maxDistance, OsmNodePairSet islandNodePairs) { waypointMatcher = new WaypointMatcherImpl(unmatchedWaypoints, maxDistance, islandNodePairs); for (MatchedWaypoint mwp : unmatchedWaypoints) { - preloadPosition(mwp.waypoint); + int cellsize = 12500; + preloadPosition(mwp.waypoint, cellsize); + // get a second chance + if (mwp.crosspoint == null) { + cellsize = 1000000 / 32; + preloadPosition(mwp.waypoint, cellsize); + } } if (first_file_access_failed) { @@ -309,8 +315,7 @@ public final class NodesCache { } } - private void preloadPosition(OsmNode n) { - int d = 12500; + private void preloadPosition(OsmNode n, int d) { first_file_access_failed = false; first_file_access_name = null; loadSegmentFor(n.ilon, n.ilat); From 488d37b0706dbb86843ce3f96e0ca2edceb89caf Mon Sep 17 00:00:00 2001 From: afischerdev Date: Sat, 8 Jul 2023 09:57:50 +0200 Subject: [PATCH 2/3] used greater diff value --- brouter-core/src/main/java/btools/router/RoutingEngine.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/brouter-core/src/main/java/btools/router/RoutingEngine.java b/brouter-core/src/main/java/btools/router/RoutingEngine.java index 1681387..b94eff5 100644 --- a/brouter-core/src/main/java/btools/router/RoutingEngine.java +++ b/brouter-core/src/main/java/btools/router/RoutingEngine.java @@ -1328,7 +1328,8 @@ public class RoutingEngine extends Thread { } // recheck cutoff before doing expensive stuff - if (path.cost + path.airdistance > maxTotalCost + 100) { + int addDiff = 300; + if (path.cost + path.airdistance > maxTotalCost + addDiff) { path.unregisterUpTree(routingContext); continue; } @@ -1426,7 +1427,7 @@ public class RoutingEngine extends Thread { boolean inRadius = boundary == null || boundary.isInBoundary(nextNode, bestPath.cost); - if (inRadius && (isFinalLink || bestPath.cost + bestPath.airdistance <= maxTotalCost + 100)) { + if (inRadius && (isFinalLink || bestPath.cost + bestPath.airdistance <= maxTotalCost + addDiff)) { // add only if this may beat an existing path for that link OsmLinkHolder dominator = link.getFirstLinkHolder(currentNode); while (!trafficSim && dominator != null) { From cc265269e60347c3f0915500988dde803da5e492 Mon Sep 17 00:00:00 2001 From: afischerdev Date: Sat, 8 Jul 2023 18:17:06 +0200 Subject: [PATCH 3/3] change finish route parameters --- .../src/main/java/btools/router/RoutingEngine.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/brouter-core/src/main/java/btools/router/RoutingEngine.java b/brouter-core/src/main/java/btools/router/RoutingEngine.java index b94eff5..59cb4f7 100644 --- a/brouter-core/src/main/java/btools/router/RoutingEngine.java +++ b/brouter-core/src/main/java/btools/router/RoutingEngine.java @@ -64,6 +64,8 @@ public class RoutingEngine extends Thread { protected RoutingContext routingContext; public double airDistanceCostFactor; + public double lastAirDistanceCostFactor; + private OsmTrack guideTrack; private OsmPathElement matchPath; @@ -933,6 +935,7 @@ public class RoutingEngine extends Thread { if (track == null) { for (int cfi = 0; cfi < airDistanceCostFactors.length; cfi++) { + if (cfi > 0) lastAirDistanceCostFactor = airDistanceCostFactors[cfi-1]; airDistanceCostFactor = airDistanceCostFactors[cfi]; if (airDistanceCostFactor < 0.) { @@ -986,6 +989,7 @@ public class RoutingEngine extends Thread { // final run for verbose log info and detail nodes airDistanceCostFactor = 0.; + lastAirDistanceCostFactor = 0.; guideTrack = track; startTime = System.currentTimeMillis(); // reset timeout... try { @@ -1328,7 +1332,7 @@ public class RoutingEngine extends Thread { } // recheck cutoff before doing expensive stuff - int addDiff = 300; + int addDiff = 100; if (path.cost + path.airdistance > maxTotalCost + addDiff) { path.unregisterUpTree(routingContext); continue; @@ -1427,7 +1431,7 @@ public class RoutingEngine extends Thread { boolean inRadius = boundary == null || boundary.isInBoundary(nextNode, bestPath.cost); - if (inRadius && (isFinalLink || bestPath.cost + bestPath.airdistance <= maxTotalCost + addDiff)) { + if (inRadius && (isFinalLink || bestPath.cost + bestPath.airdistance <= (lastAirDistanceCostFactor != 0. ? maxTotalCost*lastAirDistanceCostFactor : maxTotalCost) + addDiff)) { // add only if this may beat an existing path for that link OsmLinkHolder dominator = link.getFirstLinkHolder(currentNode); while (!trafficSim && dominator != null) {