From 8fb636a7fef2046fe7be85c60c7a204bc1e7b007 Mon Sep 17 00:00:00 2001 From: aoles Date: Wed, 23 Oct 2024 22:08:54 +0200 Subject: [PATCH 1/2] fix: logic to pass time to td routing algorithms --- .../org/heigit/ors/routing/RoutingProfile.java | 11 ++++++++--- .../org/heigit/ors/routing/RoutingRequest.java | 18 +++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ors-engine/src/main/java/org/heigit/ors/routing/RoutingProfile.java b/ors-engine/src/main/java/org/heigit/ors/routing/RoutingProfile.java index 9aaf53dbf3..3ef2018c98 100644 --- a/ors-engine/src/main/java/org/heigit/ors/routing/RoutingProfile.java +++ b/ors-engine/src/main/java/org/heigit/ors/routing/RoutingProfile.java @@ -643,14 +643,19 @@ public void setSpeedups(GHRequest req, boolean useCH, boolean useCore, boolean u } } - boolean requiresTimeDependentWeighting(RouteSearchParameters searchParams, RouteSearchContext searchCntx) { + boolean requiresTimeDependentAlgorithm(RouteSearchParameters searchParams, RouteSearchContext searchCntx) { if (!searchParams.isTimeDependent()) return false; FlagEncoder flagEncoder = searchCntx.getEncoder(); - return flagEncoder.hasEncodedValue(EncodingManager.getKey(flagEncoder, ConditionalEdges.ACCESS)) - || flagEncoder.hasEncodedValue(EncodingManager.getKey(flagEncoder, ConditionalEdges.SPEED)) + if (flagEncoder.hasEncodedValue(EncodingManager.getKey(flagEncoder, ConditionalEdges.ACCESS))) + return true; + + if (WeightingMethod.SHORTEST==searchParams.getWeightingMethod()) + return false; + + return flagEncoder.hasEncodedValue(EncodingManager.getKey(flagEncoder, ConditionalEdges.SPEED)) || mGraphHopper.isTrafficEnabled(); } diff --git a/ors-engine/src/main/java/org/heigit/ors/routing/RoutingRequest.java b/ors-engine/src/main/java/org/heigit/ors/routing/RoutingRequest.java index d2fb840131..11d02f8670 100644 --- a/ors-engine/src/main/java/org/heigit/ors/routing/RoutingRequest.java +++ b/ors-engine/src/main/java/org/heigit/ors/routing/RoutingRequest.java @@ -390,10 +390,8 @@ else if (bearings[1] == null) if (TemporaryUtilShelter.supportWeightingMethod(profileType)) { ProfileTools.setWeightingMethod(req.getHints(), weightingMethod, profileType, TemporaryUtilShelter.hasTimeDependentSpeed(searchParams, searchCntx)); - if (routingProfile.requiresTimeDependentWeighting(searchParams, searchCntx)) { - req.setAlgorithm(Parameters.Algorithms.TD_ASTAR); + if (routingProfile.requiresTimeDependentAlgorithm(searchParams, searchCntx)) flexibleMode = ProfileTools.KEY_FLEX_PREPROCESSED; - } flexibleMode = TemporaryUtilShelter.getFlexibilityMode(flexibleMode, searchParams, profileType); } else throw new IllegalArgumentException("Unsupported weighting " + weightingMethod + " for profile + " + profileType); @@ -413,16 +411,22 @@ else if (bearings[1] == null) if (searchParams.isTimeDependent()) { String key; - LocalDateTime time; + LocalDateTime dateTime; if (searchParams.hasDeparture()) { key = RouteRequestParameterNames.PARAM_DEPARTURE; - time = searchParams.getDeparture(); + dateTime = searchParams.getDeparture(); } else { key = RouteRequestParameterNames.PARAM_ARRIVAL; - time = searchParams.getArrival(); + dateTime = searchParams.getArrival(); } - req.getHints().putObject(key, time.atZone(ZoneId.of("Europe/Berlin")).toInstant()); + Instant time = dateTime.atZone(ZoneId.of("Europe/Berlin")).toInstant(); + req.getHints().putObject(key, time); + + if (routingProfile.requiresTimeDependentAlgorithm(searchParams, searchCntx)) { + req.getHints().putObject("time", time.toEpochMilli()); + req.setAlgorithm(Parameters.Algorithms.TD_ASTAR); + } } if (routingProfile.getAstarEpsilon() != null) From c3822cc6278516d9bc0c79f0544eb1a3cc22a2a8 Mon Sep 17 00:00:00 2001 From: aoles Date: Wed, 23 Oct 2024 22:31:01 +0200 Subject: [PATCH 2/2] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e22a32d78..3400f677c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ RELEASING: ## [unreleased] ### Fixed - do not enforce a time-dependent routing algorithm unless the weighting requires it ([#1865](https://github.com/GIScience/openrouteservice/pull/1865)) +- failing queries that combined departure/arrival parameters with avoid areas ([#1870](https://github.com/GIScience/openrouteservice/pull/1870)) ## [8.2.0] - 2024-10-09 ### Added