Skip to content

Commit

Permalink
Remove remains of earlier attempt at free transfer walking
Browse files Browse the repository at this point in the history
  • Loading branch information
michaz committed Jun 27, 2018
1 parent 7a29ef3 commit 9a651f6
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 15 deletions.
1 change: 0 additions & 1 deletion api/src/main/java/com/graphhopper/util/Parameters.java
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,6 @@ public static final class PT {
public static final String IGNORE_TRANSFERS = "pt.ignore_transfers";
public static final String WALK_SPEED = "pt.walk_speed";
public static final String MAX_WALK_DISTANCE_PER_LEG = "pt.max_walk_distance_per_leg";
public static final String MAX_TRANSFER_DISTANCE_PER_LEG = "pt.max_transfer_distance_per_leg";
public static final String LIMIT_SOLUTIONS = "pt.limit_solutions";
public static final String BLOCKED_ROUTE_TYPES = "pt.blocked_route_types";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ private class RequestHandler {
private final boolean ignoreTransfers;
private final double walkSpeedKmH;
private final double maxWalkDistancePerLeg;
private final double maxTransferDistancePerLeg;
private final int blockedRouteTypes;
private final GHPoint enter;
private final GHPoint exit;
Expand All @@ -128,7 +127,6 @@ private class RequestHandler {
arriveBy = request.getHints().getBool(Parameters.PT.ARRIVE_BY, false);
walkSpeedKmH = request.getHints().getDouble(Parameters.PT.WALK_SPEED, 5.0);
maxWalkDistancePerLeg = request.getHints().getDouble(Parameters.PT.MAX_WALK_DISTANCE_PER_LEG, 1000.0);
maxTransferDistancePerLeg = request.getHints().getDouble(Parameters.PT.MAX_TRANSFER_DISTANCE_PER_LEG, Double.MAX_VALUE);
blockedRouteTypes = request.getHints().getInt(Parameters.PT.BLOCKED_ROUTE_TYPES, 0);
translation = translationMap.getWithFallBack(request.getLocale());
if (request.getPoints().size() != 2) {
Expand Down Expand Up @@ -205,7 +203,7 @@ private void substitutePointWithVirtualNode(int index, boolean reverse, GHPoint

private List<Label> findStationNodes(GraphExplorer graphExplorer, int node, boolean reverse) {
GtfsStorage.EdgeType edgeType = reverse ? GtfsStorage.EdgeType.EXIT_PT : GtfsStorage.EdgeType.ENTER_PT;
MultiCriteriaLabelSetting router = new MultiCriteriaLabelSetting(graphExplorer, flagEncoder, reverse, maxWalkDistancePerLeg, maxTransferDistancePerLeg, false, false, maxVisitedNodesForRequest);
MultiCriteriaLabelSetting router = new MultiCriteriaLabelSetting(graphExplorer, flagEncoder, reverse, maxWalkDistancePerLeg, false, false, false, maxVisitedNodesForRequest);
final Stream<Label> labels = router.calcLabels(node, -1, initialTime, blockedRouteTypes);
return labels
.filter(current -> current.edge != -1 && flagEncoder.getEdgeType(graphExplorer.getEdgeIteratorState(current.edge, current.adjNode).getFlags()) == edgeType)
Expand Down Expand Up @@ -276,8 +274,8 @@ private int egressNode(Label solution) {
private List<Label> findPaths(int startNode, int destNode) {
StopWatch stopWatch = new StopWatch().start();
graphExplorer = new GraphExplorer(queryGraph, accessEgressWeighting, flagEncoder, gtfsStorage, realtimeFeed, arriveBy, extraEdges, false, walkSpeedKmH);
MultiCriteriaLabelSetting router = new MultiCriteriaLabelSetting(graphExplorer, flagEncoder, arriveBy, maxWalkDistancePerLeg, -1, !ignoreTransfers, profileQuery, maxVisitedNodesForRequest);
final Stream<Label> labels = router.calcLabels(startNode, destNode, initialTime, 0);
MultiCriteriaLabelSetting router = new MultiCriteriaLabelSetting(graphExplorer, flagEncoder, arriveBy, maxWalkDistancePerLeg, separateWalkQuery, !ignoreTransfers, profileQuery, maxVisitedNodesForRequest);
final Stream<Label> labels = router.calcLabels(startNode, destNode, initialTime, blockedRouteTypes);
List<Label> solutions = labels
.filter(current -> destNode == current.adjNode)
.limit(limitSolutions)
Expand Down Expand Up @@ -417,7 +415,7 @@ private Stream<TransferWithTime> getType0TransferWithTimes(GTFSFeed gtfsFeed) {
queryGraph.lookup(Collections.emptyList());
final GraphExplorer graphExplorer = new GraphExplorer(queryGraph, accessEgressWeighting, flagEncoder, gtfsStorage, realtimeFeed, false, Collections.emptyList(), true, 5.0);

MultiCriteriaLabelSetting router = new MultiCriteriaLabelSetting(graphExplorer, flagEncoder, false, Double.MAX_VALUE, Double.MAX_VALUE, false, false, Integer.MAX_VALUE);
MultiCriteriaLabelSetting router = new MultiCriteriaLabelSetting(graphExplorer, flagEncoder, false, Double.MAX_VALUE, false, false, false, Integer.MAX_VALUE);
final Stream<Label> labels = router.calcLabels(fromnode, tonode, Instant.ofEpochMilli(0), 0);
List<Label> solutions = labels
.filter(current -> tonode == current.adjNode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,19 @@ class MultiCriteriaLabelSetting {
private final int maxVisitedNodes;
private final boolean reverse;
private final double maxWalkDistancePerLeg;
private final double maxTransferDistancePerLeg;
private final boolean ptOnly;
private final boolean mindTransfers;
private final boolean profileQuery;
private int visitedNodes;
private final GraphExplorer explorer;

MultiCriteriaLabelSetting(GraphExplorer explorer, PtFlagEncoder flagEncoder, boolean reverse, double maxWalkDistancePerLeg, double maxTransferDistancePerLeg, boolean mindTransfers, boolean profileQuery, int maxVisitedNodes) {
MultiCriteriaLabelSetting(GraphExplorer explorer, PtFlagEncoder flagEncoder, boolean reverse, double maxWalkDistancePerLeg, boolean ptOnly, boolean mindTransfers, boolean profileQuery, int maxVisitedNodes) {
this.flagEncoder = flagEncoder;
this.maxVisitedNodes = maxVisitedNodes;
this.explorer = explorer;
this.reverse = reverse;
this.maxWalkDistancePerLeg = maxWalkDistancePerLeg;
this.maxTransferDistancePerLeg = maxTransferDistancePerLeg;
this.ptOnly = ptOnly;
this.mindTransfers = mindTransfers;
this.profileQuery = profileQuery;

Expand Down Expand Up @@ -109,9 +109,9 @@ public boolean tryAdvance(Consumer<? super Label> action) {
action.accept(label);
explorer.exploreEdgesAround(label).forEach(edge -> {
GtfsStorage.EdgeType edgeType = flagEncoder.getEdgeType(edge.getFlags());
if (edgeType == GtfsStorage.EdgeType.HIGHWAY && maxTransferDistancePerLeg <= 0.0) return;
if (edgeType == GtfsStorage.EdgeType.ENTER_PT && ((reverse?edge.getAdjNode():edge.getBaseNode()) != (reverse?to:from)) && maxTransferDistancePerLeg <= 0.0) return;
if (edgeType == GtfsStorage.EdgeType.EXIT_PT && ((reverse?edge.getBaseNode():edge.getAdjNode()) != (reverse?from:to)) && maxTransferDistancePerLeg <= 0.0) return;
if (edgeType == GtfsStorage.EdgeType.HIGHWAY && ptOnly) return;
if (edgeType == GtfsStorage.EdgeType.ENTER_PT && ((reverse?edge.getAdjNode():edge.getBaseNode()) != (reverse?to:from)) && ptOnly) return;
if (edgeType == GtfsStorage.EdgeType.EXIT_PT && ((reverse?edge.getBaseNode():edge.getAdjNode()) != (reverse?from:to)) && ptOnly) return;
if ((edgeType == GtfsStorage.EdgeType.ENTER_PT || edgeType == GtfsStorage.EdgeType.EXIT_PT) && (blockedRouteTypes & (1 << flagEncoder.getValidityId(edge.getFlags()))) != 0) return;
long nextTime;
if (reverse) {
Expand All @@ -131,10 +131,10 @@ public boolean tryAdvance(Consumer<? super Label> action) {
}
}
double walkDistanceOnCurrentLeg = (!reverse && edgeType == GtfsStorage.EdgeType.BOARD || reverse && edgeType == GtfsStorage.EdgeType.ALIGHT) ? 0 : (label.walkDistanceOnCurrentLeg + edge.getDistance());
boolean isTryingToReEnterPtAfterTransferWalking = (!reverse && edgeType == GtfsStorage.EdgeType.ENTER_PT || reverse && edgeType == GtfsStorage.EdgeType.EXIT_PT) && label.nTransfers > 0 && label.walkDistanceOnCurrentLeg > maxTransferDistancePerLeg;
boolean isTryingToReEnterPtAfterWalking = (!reverse && edgeType == GtfsStorage.EdgeType.ENTER_PT || reverse && edgeType == GtfsStorage.EdgeType.EXIT_PT) && label.nTransfers > 0;
long walkTime = label.walkTime + (edgeType == GtfsStorage.EdgeType.HIGHWAY || edgeType == GtfsStorage.EdgeType.ENTER_PT || edgeType == GtfsStorage.EdgeType.EXIT_PT ? nextTime - label.currentTime : 0);
int nWalkDistanceConstraintViolations = Math.min(1, label.nWalkDistanceConstraintViolations + (
isTryingToReEnterPtAfterTransferWalking ? 1 : (label.walkDistanceOnCurrentLeg <= maxWalkDistancePerLeg && walkDistanceOnCurrentLeg > maxWalkDistancePerLeg ? 1 : 0)));
isTryingToReEnterPtAfterWalking ? 1 : (label.walkDistanceOnCurrentLeg <= maxWalkDistancePerLeg && walkDistanceOnCurrentLeg > maxWalkDistancePerLeg ? 1 : 0)));
Collection<Label> sptEntries = fromMap.get(edge.getAdjNode());
boolean impossible = label.impossible
|| explorer.isBlocked(edge)
Expand Down

0 comments on commit 9a651f6

Please sign in to comment.