Update transport route planner #8986

This commit is contained in:
Victor Shcherb 2020-05-17 19:46:55 +02:00
parent 9a7fcbd7b8
commit 500cd84903
2 changed files with 20 additions and 4 deletions

View file

@ -42,6 +42,7 @@ public class TransportRoutePlanner {
public List<TransportRouteResult> buildRoute(TransportRoutingContext ctx, LatLon start, LatLon end) throws IOException, InterruptedException {
ctx.startCalcTime = System.currentTimeMillis();
double totalDistance = MapUtils.getDistance(start, end);
List<TransportRouteSegment> startStops = ctx.getTransportStops(start);
List<TransportRouteSegment> endStops = ctx.getTransportStops(end);
@ -60,7 +61,14 @@ public class TransportRoutePlanner {
}
double finishTime = ctx.cfg.maxRouteTime;
double maxTravelTimeCmpToWalk = MapUtils.getDistance(start, end) / ctx.cfg.walkSpeed - ctx.cfg.changeTime / 2;
ctx.finishTimeSeconds = ctx.cfg.finishTimeSeconds;
if (totalDistance > ctx.cfg.maxRouteDistance && ctx.cfg.maxRouteIncreaseSpeed > 0) {
int increaseTime = (int) ((totalDistance - ctx.cfg.maxRouteDistance)
* 3.6 / ctx.cfg.maxRouteIncreaseSpeed);
finishTime += increaseTime;
ctx.finishTimeSeconds += increaseTime / 6;
}
double maxTravelTimeCmpToWalk = totalDistance / ctx.cfg.walkSpeed - ctx.cfg.changeTime / 2;
List<TransportRouteSegment> results = new ArrayList<TransportRouteSegment>();
initProgressBar(ctx, start, end);
while (!queue.isEmpty()) {
@ -82,7 +90,7 @@ public class TransportRoutePlanner {
if (segment.getDepth() > ctx.cfg.maxNumberOfChanges + 1) {
continue;
}
if (segment.distFromStart > finishTime + ctx.cfg.finishTimeSeconds ||
if (segment.distFromStart > finishTime + ctx.finishTimeSeconds ||
segment.distFromStart > maxTravelTimeCmpToWalk) {
break;
}
@ -114,7 +122,7 @@ public class TransportRoutePlanner {
} else {
travelTime += ctx.cfg.stopTime + segmentDist / routeTravelSpeed;
}
if(segment.distFromStart + travelTime > finishTime + ctx.cfg.finishTimeSeconds) {
if(segment.distFromStart + travelTime > finishTime + ctx.finishTimeSeconds) {
break;
}
sgms.clear();
@ -169,7 +177,7 @@ public class TransportRoutePlanner {
if (finishTime > finish.distFromStart) {
finishTime = finish.distFromStart;
}
if(finish.distFromStart < finishTime + ctx.cfg.finishTimeSeconds &&
if(finish.distFromStart < finishTime + ctx.finishTimeSeconds &&
(finish.distFromStart < maxTravelTimeCmpToWalk || results.size() == 0)) {
results.add(finish);
}
@ -732,6 +740,7 @@ public class TransportRoutePlanner {
}
public static class TransportRoutingContext {
public NativeLibrary library;
public RouteCalculationProgress calculationProgress;
public TLongObjectHashMap<TransportRouteSegment> visitedSegments = new TLongObjectHashMap<TransportRouteSegment>();
@ -746,6 +755,7 @@ public class TransportRoutePlanner {
public final Map<BinaryMapIndexReader, TIntObjectHashMap<TransportRoute>> routeMap =
new LinkedHashMap<BinaryMapIndexReader, TIntObjectHashMap<TransportRoute>>();
public int finishTimeSeconds;
// stats
public long startCalcTime;

View file

@ -23,6 +23,10 @@ public class TransportRoutingConfiguration {
public int finishTimeSeconds = 1200;
public int maxRouteTime = 60 * 60 * 10; // 10 hours
public int maxRouteDistance = 0; // distance for maxRouteTime
public int maxRouteIncreaseSpeed = 30; // speed to increase route time
public GeneralRouter router;
// cache values from router for fast access
@ -85,6 +89,8 @@ public class TransportRoutingConfiguration {
ZOOM_TO_LOAD_TILES = router.getIntAttribute("zoomToLoadTiles", ZOOM_TO_LOAD_TILES);
maxNumberOfChanges = router.getIntAttribute("maxNumberOfChanges", maxNumberOfChanges);
maxRouteTime = router.getIntAttribute("maxRouteTime", maxRouteTime);
maxRouteIncreaseSpeed = router.getIntAttribute("maxRouteIncreaseSpeed", maxRouteIncreaseSpeed);
maxRouteDistance = router.getIntAttribute("maxRouteDistance", maxRouteDistance);
finishTimeSeconds = router.getIntAttribute("delayForAlternativesRoutes", finishTimeSeconds);
String mn = params.get("max_num_changes");
maxNumberOfChanges = (int) RoutingConfiguration.parseSilentFloat(mn, maxNumberOfChanges);