From d22774ec512b101f8e35ac9ebd54de464384731a Mon Sep 17 00:00:00 2001 From: Christian Pesch Date: Mon, 9 Sep 2024 14:29:56 +0200 Subject: [PATCH] trying to fix GraphHopper routing for 9.1 --- .../navigation/graphhopper/GraphHopper.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/graphhopper/src/main/java/slash/navigation/graphhopper/GraphHopper.java b/graphhopper/src/main/java/slash/navigation/graphhopper/GraphHopper.java index 3cec7766a..d7c921011 100644 --- a/graphhopper/src/main/java/slash/navigation/graphhopper/GraphHopper.java +++ b/graphhopper/src/main/java/slash/navigation/graphhopper/GraphHopper.java @@ -23,7 +23,6 @@ import com.graphhopper.GHResponse; import com.graphhopper.ResponsePath; import com.graphhopper.config.Profile; -import com.graphhopper.json.Statement; import com.graphhopper.util.CustomModel; import com.graphhopper.util.PointList; import com.graphhopper.util.exceptions.DetailedIllegalArgumentException; @@ -44,7 +43,11 @@ import java.util.*; import java.util.logging.Logger; import java.util.prefs.Preferences; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import static com.graphhopper.json.Statement.If; +import static com.graphhopper.json.Statement.Op.LIMIT; import static com.graphhopper.json.Statement.Op.MULTIPLY; import static java.lang.String.format; import static java.lang.System.currentTimeMillis; @@ -159,15 +162,15 @@ protected void second(int second) { request.setProfile(travelMode.getName()); CustomModel customModel = new CustomModel(); if (travelRestrictions.isAvoidBridges()) - customModel.addToPriority(Statement.If("road_environment == BRIDGE", MULTIPLY, "0")); + customModel.addToPriority(If("road_environment == BRIDGE", MULTIPLY, "0")); if (travelRestrictions.isAvoidFerries()) - customModel.addToPriority(Statement.If("road_environment == FERRY", MULTIPLY, "0")); + customModel.addToPriority(If("road_environment == FERRY", MULTIPLY, "0")); if (travelRestrictions.isAvoidMotorways()) - customModel.addToPriority(Statement.If("road_class == MOTORWAY", MULTIPLY, "0")); + customModel.addToPriority(If("road_class == MOTORWAY", MULTIPLY, "0")); // if (travelRestrictions.isAvoidToll()) // customModel.addToPriority(Statement.If("toll == all", MULTIPLY, "0")); if (travelRestrictions.isAvoidTunnels()) - customModel.addToPriority(Statement.If("road_environment == TUNNEL", MULTIPLY, "0")); + customModel.addToPriority(If("road_environment == TUNNEL", MULTIPLY, "0")); request.setCustomModel(customModel); GHResponse response = hopper.route(request); if (response.hasErrors()) { @@ -265,11 +268,18 @@ private com.graphhopper.GraphHopper createHopper() { List profiles = getAvailableTravelModes().stream() .map(mode -> new Profile(mode.getName()) .setName(mode.getName()) - // could set .setTurnCosts(true) + .setCustomModel(new CustomModel() + .addToPriority(If("!" + mode.getName() + "_access", MULTIPLY, "0")) + .addToSpeed(If("true", LIMIT, mode.getName() + "_average_speed"))) ) .toList(); + String modePriorityAndSpeed = getAvailableTravelModes().stream() + .flatMap(mode -> Stream.of(mode.getName() + "_access", mode.getName() + "_average_speed")) + .collect(Collectors.joining(",")); + return new com.graphhopper.GraphHopper() + .setEncodedValuesString("road_class,road_environment,toll," + modePriorityAndSpeed) .setProfiles(profiles); }