
org.opentripplanner.street.model.edge.StreetEdgeReluctanceCalculator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
The newest version!
package org.opentripplanner.street.model.edge;
import org.opentripplanner.routing.api.request.preference.RoutingPreferences;
import org.opentripplanner.street.search.TraverseMode;
class StreetEdgeReluctanceCalculator {
/** Utility class, private constructor to prevent instantiation */
private StreetEdgeReluctanceCalculator() {}
/**
* Compute reluctance for a regular street section. Note! This does not apply if in a wheelchair,
* see {@link #computeWheelchairReluctance(RoutingPreferences, double, boolean, boolean)}.
*/
static double computeReluctance(
RoutingPreferences pref,
TraverseMode traverseMode,
boolean walkingBike,
boolean edgeIsStairs
) {
if (edgeIsStairs) {
return pref.walk().stairsReluctance();
} else {
return switch (traverseMode) {
case WALK -> walkingBike ? pref.bike().walking().reluctance() : pref.walk().reluctance();
case BICYCLE -> pref.bike().reluctance();
case CAR -> pref.car().reluctance();
case SCOOTER -> pref.scooter().reluctance();
default -> throw new IllegalArgumentException(
"getReluctance(): Invalid mode " + traverseMode
);
};
}
}
static double computeWheelchairReluctance(
RoutingPreferences preferences,
double maxSlope,
boolean edgeWheelchairAccessible,
boolean stairs
) {
var wheelchair = preferences.wheelchair();
// Add reluctance if street is not wheelchair accessible
double reluctance = edgeWheelchairAccessible ? 1.0 : wheelchair.inaccessibleStreetReluctance();
reluctance *= preferences.walk().reluctance();
// Add reluctance for stairs
if (stairs) {
reluctance *= wheelchair.stairsReluctance();
}
// Add reluctance for exceeding the max slope
double slopeExceededBy = Math.abs(maxSlope) - wheelchair.maxSlope();
if (slopeExceededBy > 0.0) {
double slopeExceededReluctance = wheelchair.slopeExceededReluctance();
if (slopeExceededReluctance > 0.0) {
// if we exceed the max slope the cost increases multiplied by how much you go over the maxSlope
reluctance *= 1.0 + (100.0 * slopeExceededBy) * slopeExceededReluctance;
}
}
return reluctance;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy