Skip to content

Commit caf3bc2

Browse files
committed
Remove special treatment of distances
1 parent 7bc95e4 commit caf3bc2

File tree

3 files changed

+25
-37
lines changed

3 files changed

+25
-37
lines changed

reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GraphExplorer.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -163,19 +163,6 @@ int calcNTransfers(EdgeIteratorState edge) {
163163
return flagEncoder.getTransfers(edge.getFlags());
164164
}
165165

166-
double getWalkDistance(EdgeIteratorState edge) {
167-
GtfsStorage.EdgeType edgeType = flagEncoder.getEdgeType(edge.getFlags());
168-
switch (edgeType) {
169-
case HIGHWAY:
170-
return edge.getDistance();
171-
case ENTER_PT:
172-
case EXIT_PT:
173-
return 10.0;
174-
default:
175-
return 0.0;
176-
}
177-
}
178-
179166
EdgeIteratorState getEdgeIteratorState(int edgeId, int adjNode) {
180167
if (edgeId == -1) {
181168
throw new RuntimeException();

reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/GtfsReader.java

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ void wireUpStops() {
223223

224224
EdgeIteratorState exitEdge = graph.edge(stopExitNode, streetNode);
225225
exitEdge.setFlags(encoder.setAccess(exitEdge.getFlags(), true, false));
226-
setEdgeType(exitEdge, GtfsStorage.EdgeType.EXIT_PT);
226+
setEdgeTypeAndClearDistance(exitEdge, GtfsStorage.EdgeType.EXIT_PT);
227227
exitEdge.setFlags(encoder.setValidityId(exitEdge.getFlags(), route.route_type));
228228
exitEdge.setName(stop.stop_name);
229229
gtfsStorage.getRoutes().put(exitEdge.getEdge(), routeId);
@@ -245,7 +245,7 @@ void wireUpStops() {
245245

246246
EdgeIteratorState entryEdge = graph.edge(streetNode, stopEnterNode);
247247
entryEdge.setFlags(encoder.setAccess(entryEdge.getFlags(), true, false));
248-
setEdgeType(entryEdge, GtfsStorage.EdgeType.ENTER_PT);
248+
setEdgeTypeAndClearDistance(entryEdge, GtfsStorage.EdgeType.ENTER_PT);
249249
entryEdge.setFlags(encoder.setValidityId(entryEdge.getFlags(), route.route_type));
250250
entryEdge.setName(stop.stop_name);
251251
gtfsStorage.getRoutes().put(entryEdge.getEdge(), routeId);
@@ -275,15 +275,15 @@ void wireUpAdditionalDepartures(ZoneId zoneId) {
275275
Fun.Tuple2<Integer, Integer> before = headSet.last();
276276
EdgeIteratorState edge = graph.edge(before.b, timelineNode.b);
277277
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
278-
setEdgeType(edge, GtfsStorage.EdgeType.WAIT);
278+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.WAIT);
279279
edge.setFlags(encoder.setTime(edge.getFlags(), timelineNode.a-before.a));
280280
}
281281
SortedSet<Fun.Tuple2<Integer, Integer>> tailSet = staticTimelineNodesForRoute.tailSet(timelineNode);
282282
if (!tailSet.isEmpty()) {
283283
Fun.Tuple2<Integer, Integer> after = tailSet.first();
284284
EdgeIteratorState edge = graph.edge(timelineNode.b, after.b);
285285
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
286-
setEdgeType(edge, GtfsStorage.EdgeType.WAIT);
286+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.WAIT);
287287
edge.setFlags(encoder.setTime(edge.getFlags(), after.a-timelineNode.a));
288288

289289
// System.out.println(" "+ after);
@@ -298,7 +298,7 @@ void wireUpAdditionalDepartures(ZoneId zoneId) {
298298

299299
EdgeIteratorState edge = graph.edge(platformNode, timelineNode.b);
300300
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
301-
setEdgeType(edge, GtfsStorage.EdgeType.ENTER_TIME_EXPANDED_NETWORK);
301+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.ENTER_TIME_EXPANDED_NETWORK);
302302
edge.setFlags(encoder.setTime(edge.getFlags(), timelineNode.a));
303303
setFeedIdWithTimezone(edge, new GtfsStorage.FeedIdWithTimezone(id, zoneId));
304304
});
@@ -308,7 +308,7 @@ void wireUpAdditionalDepartures(ZoneId zoneId) {
308308
nodeAccess.setAdditionalNodeField(stopEnterNode, NodeType.STOP_ENTER_NODE.ordinal());
309309
EdgeIteratorState entryEdge = graph.edge(stationNode, stopEnterNode);
310310
entryEdge.setFlags(encoder.setAccess(entryEdge.getFlags(), true, false));
311-
setEdgeType(entryEdge, GtfsStorage.EdgeType.ENTER_PT);
311+
setEdgeTypeAndClearDistance(entryEdge, GtfsStorage.EdgeType.ENTER_PT);
312312
entryEdge.setName(stop.stop_name);
313313
NavigableSet<Fun.Tuple2<Integer, Integer>> timeNodes = sorted(timelineNodesWithTripId);
314314
wireUpAndAndConnectDepartureTimeline(stop, routeId,stopEnterNode, timeNodes);
@@ -324,7 +324,7 @@ void wireUpAdditionalDepartures(ZoneId zoneId) {
324324
realtimeTimelineIterator.forEachRemaining(timelineNode -> {
325325
EdgeIteratorState edge = graph.edge(timelineNode.b, platformNode);
326326
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
327-
setEdgeType(edge, GtfsStorage.EdgeType.LEAVE_TIME_EXPANDED_NETWORK);
327+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.LEAVE_TIME_EXPANDED_NETWORK);
328328
edge.setFlags(encoder.setTime(edge.getFlags(), timelineNode.a));
329329
setFeedIdWithTimezone(edge, new GtfsStorage.FeedIdWithTimezone(id, zoneId));
330330
});
@@ -334,7 +334,7 @@ void wireUpAdditionalDepartures(ZoneId zoneId) {
334334
nodeAccess.setAdditionalNodeField(stopExitNode, NodeType.STOP_EXIT_NODE.ordinal());
335335
EdgeIteratorState exitEdge = graph.edge(stopExitNode, stationNode);
336336
exitEdge.setFlags(encoder.setAccess(exitEdge.getFlags(), true, false));
337-
setEdgeType(exitEdge, GtfsStorage.EdgeType.EXIT_PT);
337+
setEdgeTypeAndClearDistance(exitEdge, GtfsStorage.EdgeType.EXIT_PT);
338338
exitEdge.setName(stop.stop_name);
339339
wireUpAndAndConnectArrivalTimeline(stop, routeId,stopExitNode, timeNodes);
340340
}
@@ -460,7 +460,7 @@ void addTrip(ZoneId zoneId, int time, List<TripWithStopTimeAndArrivalNode> arriv
460460
edge.setDistance(distance);
461461
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
462462
edge.setName(stop.stop_name);
463-
setEdgeType(edge, GtfsStorage.EdgeType.HOP);
463+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.HOP);
464464
edge.setFlags(encoder.setTime(edge.getFlags(), stopTime.arrival_time - prev.departure_time));
465465
gtfsStorage.getStopSequences().put(edge.getEdge(), stopTime.stop_sequence);
466466
}
@@ -491,7 +491,7 @@ void addTrip(ZoneId zoneId, int time, List<TripWithStopTimeAndArrivalNode> arriv
491491
EdgeIteratorState boardEdge = graph.edge(departureTimelineNode, departureNode);
492492
boardEdge.setFlags(encoder.setAccess(boardEdge.getFlags(), true, false));
493493
boardEdge.setName(getRouteName(feed, trip.trip));
494-
setEdgeType(boardEdge, GtfsStorage.EdgeType.BOARD);
494+
setEdgeTypeAndClearDistance(boardEdge, GtfsStorage.EdgeType.BOARD);
495495
while (boardEdges.size() < stopTime.stop_sequence) {
496496
boardEdges.add(-1); // Padding, so that index == stop_sequence
497497
}
@@ -504,7 +504,7 @@ void addTrip(ZoneId zoneId, int time, List<TripWithStopTimeAndArrivalNode> arriv
504504
EdgeIteratorState alightEdge = graph.edge(arrivalNode, arrivalTimelineNode);
505505
alightEdge.setFlags(encoder.setAccess(alightEdge.getFlags(), true, false));
506506
alightEdge.setName(getRouteName(feed, trip.trip));
507-
setEdgeType(alightEdge, GtfsStorage.EdgeType.ALIGHT);
507+
setEdgeTypeAndClearDistance(alightEdge, GtfsStorage.EdgeType.ALIGHT);
508508
while (alightEdges.size() < stopTime.stop_sequence) {
509509
alightEdges.add(-1);
510510
}
@@ -518,7 +518,7 @@ void addTrip(ZoneId zoneId, int time, List<TripWithStopTimeAndArrivalNode> arriv
518518
EdgeIteratorState dwellEdge = graph.edge(arrivalNode, departureNode);
519519
dwellEdge.setFlags(encoder.setAccess(dwellEdge.getFlags(), true, false));
520520
dwellEdge.setName(getRouteName(feed, trip.trip));
521-
setEdgeType(dwellEdge, GtfsStorage.EdgeType.DWELL);
521+
setEdgeTypeAndClearDistance(dwellEdge, GtfsStorage.EdgeType.DWELL);
522522
dwellEdge.setFlags(encoder.setTime(dwellEdge.getFlags(), stopTime.departure_time - stopTime.arrival_time));
523523
if (prev == null) {
524524
insertInboundBlockTransfers(arrivalNodes, tripDescriptor, departureNode, stopTime, stop, validOn, zoneId);
@@ -556,7 +556,7 @@ int addDelayedBoardEdge(ZoneId zoneId, GtfsRealtime.TripDescriptor tripDescripto
556556
EdgeIteratorState boardEdge = graph.edge(departureTimelineNode, departureNode);
557557
boardEdge.setFlags(encoder.setAccess(boardEdge.getFlags(), true, false));
558558
boardEdge.setName(getRouteName(feed, trip));
559-
setEdgeType(boardEdge, GtfsStorage.EdgeType.BOARD);
559+
setEdgeTypeAndClearDistance(boardEdge, GtfsStorage.EdgeType.BOARD);
560560
gtfsStorage.getStopSequences().put(boardEdge.getEdge(), stopSequence);
561561
gtfsStorage.getTripDescriptors().put(boardEdge.getEdge(), tripDescriptor.toByteArray());
562562
boardEdge.setFlags(encoder.setValidityId(boardEdge.getFlags(), validityId));
@@ -571,14 +571,14 @@ private void wireUpAndAndConnectArrivalTimeline(Stop toStop, String routeId, int
571571
for (Fun.Tuple2<Integer, Integer> e : timeNodes.descendingSet()) {
572572
EdgeIteratorState leaveTimeExpandedNetworkEdge = graph.edge(e.b, stopExitNode);
573573
leaveTimeExpandedNetworkEdge.setFlags(encoder.setAccess(leaveTimeExpandedNetworkEdge.getFlags(), true, false));
574-
setEdgeType(leaveTimeExpandedNetworkEdge, GtfsStorage.EdgeType.LEAVE_TIME_EXPANDED_NETWORK);
574+
setEdgeTypeAndClearDistance(leaveTimeExpandedNetworkEdge, GtfsStorage.EdgeType.LEAVE_TIME_EXPANDED_NETWORK);
575575
int arrivalTime = e.a;
576576
leaveTimeExpandedNetworkEdge.setFlags(encoder.setTime(leaveTimeExpandedNetworkEdge.getFlags(), arrivalTime));
577577
setFeedIdWithTimezone(leaveTimeExpandedNetworkEdge, new GtfsStorage.FeedIdWithTimezone(id, zoneId));
578578
if (prev != -1) {
579579
EdgeIteratorState edge = graph.edge(e.b, prev);
580580
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
581-
setEdgeType(edge, GtfsStorage.EdgeType.WAIT_ARRIVAL);
581+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.WAIT_ARRIVAL);
582582
edge.setName(toStop.stop_name);
583583
edge.setFlags(encoder.setTime(edge.getFlags(), time-e.a));
584584
}
@@ -606,13 +606,13 @@ private void wireUpAndAndConnectDepartureTimeline(Stop toStop, String toRouteId,
606606
EdgeIteratorState enterTimeExpandedNetworkEdge = graph.edge(stopEnterNode, e.b);
607607
enterTimeExpandedNetworkEdge.setFlags(encoder.setAccess(enterTimeExpandedNetworkEdge.getFlags(), true, false));
608608
enterTimeExpandedNetworkEdge.setName(toStop.stop_name);
609-
setEdgeType(enterTimeExpandedNetworkEdge, GtfsStorage.EdgeType.ENTER_TIME_EXPANDED_NETWORK);
609+
setEdgeTypeAndClearDistance(enterTimeExpandedNetworkEdge, GtfsStorage.EdgeType.ENTER_TIME_EXPANDED_NETWORK);
610610
enterTimeExpandedNetworkEdge.setFlags(encoder.setTime(enterTimeExpandedNetworkEdge.getFlags(), e.a));
611611
setFeedIdWithTimezone(enterTimeExpandedNetworkEdge, new GtfsStorage.FeedIdWithTimezone(id, zoneId));
612612
if (prev != -1) {
613613
EdgeIteratorState edge = graph.edge(e.b, prev);
614614
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
615-
setEdgeType(edge, GtfsStorage.EdgeType.WAIT);
615+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.WAIT);
616616
edge.setName(toStop.stop_name);
617617
edge.setFlags(encoder.setTime(edge.getFlags(), time-e.a));
618618
}
@@ -623,7 +623,7 @@ private void wireUpAndAndConnectDepartureTimeline(Stop toStop, String toRouteId,
623623
EdgeIteratorState edge = graph.edge(timeNodes.last().b, timeNodes.first().b);
624624
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
625625
int rolloverTime = 24 * 60 * 60 - timeNodes.last().a + timeNodes.first().a;
626-
setEdgeType(edge, GtfsStorage.EdgeType.OVERNIGHT);
626+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.OVERNIGHT);
627627
edge.setName(toStop.stop_name);
628628
edge.setFlags(encoder.setTime(edge.getFlags(), rolloverTime));
629629
}
@@ -652,11 +652,11 @@ private void insertInboundBlockTransfers(List<TripWithStopTimeAndArrivalNode> ar
652652
nodeAccess.setAdditionalNodeField(i-1, NodeType.INTERNAL_PT.ordinal());
653653
EdgeIteratorState transferEdge = graph.edge(lastTrip.arrivalNode,i-1);
654654
transferEdge.setFlags(encoder.setAccess(transferEdge.getFlags(), true, false));
655-
setEdgeType(transferEdge, GtfsStorage.EdgeType.TRANSFER);
655+
setEdgeTypeAndClearDistance(transferEdge, GtfsStorage.EdgeType.TRANSFER);
656656
transferEdge.setFlags(encoder.setTime(transferEdge.getFlags(), dwellTime));
657657
EdgeIteratorState boardEdge = graph.edge(i-1, departureNode);
658658
boardEdge.setFlags(encoder.setAccess(boardEdge.getFlags(), true, false));
659-
setEdgeType(boardEdge, GtfsStorage.EdgeType.BOARD);
659+
setEdgeTypeAndClearDistance(boardEdge, GtfsStorage.EdgeType.BOARD);
660660
boardEdge.setFlags(encoder.setValidityId(boardEdge.getFlags(), blockTransferValidityId));
661661
gtfsStorage.getStopSequences().put(boardEdge.getEdge(), stopTime.stop_sequence);
662662
gtfsStorage.getTripDescriptors().put(boardEdge.getEdge(), tripDescriptor.toByteArray());
@@ -691,7 +691,7 @@ private void insertInboundTransfers(String fromStopId, String from_route_id, int
691691
Fun.Tuple2<Integer, Integer> e = tailSet.first();
692692
EdgeIteratorState edge = graph.edge(j.getAdjNode(), e.b);
693693
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
694-
setEdgeType(edge, GtfsStorage.EdgeType.TRANSFER);
694+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.TRANSFER);
695695
edge.setFlags(encoder.setTime(edge.getFlags(), e.a - arrivalTime));
696696
}
697697
}
@@ -720,7 +720,7 @@ private void insertOutboundTransfers(String toStopId, String toRouteId, int mini
720720
}
721721
EdgeIteratorState edge = graph.edge(e.b, j.getAdjNode());
722722
edge.setFlags(encoder.setAccess(edge.getFlags(), true, false));
723-
setEdgeType(edge, GtfsStorage.EdgeType.TRANSFER);
723+
setEdgeTypeAndClearDistance(edge, GtfsStorage.EdgeType.TRANSFER);
724724
edge.setFlags(encoder.setTime(edge.getFlags(), departureTime - e.a));
725725
break;
726726
}
@@ -736,7 +736,8 @@ private String getRouteName(GTFSFeed feed, Trip trip) {
736736
return (route.route_long_name != null ? route.route_long_name : route.route_short_name) + " " + trip.trip_headsign;
737737
}
738738

739-
private void setEdgeType(EdgeIteratorState edge, GtfsStorage.EdgeType edgeType) {
739+
private void setEdgeTypeAndClearDistance(EdgeIteratorState edge, GtfsStorage.EdgeType edgeType) {
740+
edge.setDistance(0.0);
740741
edge.setFlags(encoder.setEdgeType(edge.getFlags(), edgeType));
741742
}
742743

reader-gtfs/src/main/java/com/graphhopper/reader/gtfs/MultiCriteriaLabelSetting.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public boolean tryAdvance(Consumer<? super Label> action) {
130130
firstPtDepartureTime = nextTime - label.walkTime;
131131
}
132132
}
133-
double walkDistanceOnCurrentLeg = (!reverse && edgeType == GtfsStorage.EdgeType.BOARD || reverse && edgeType == GtfsStorage.EdgeType.ALIGHT) ? 0 : (label.walkDistanceOnCurrentLeg + explorer.getWalkDistance(edge));
133+
double walkDistanceOnCurrentLeg = (!reverse && edgeType == GtfsStorage.EdgeType.BOARD || reverse && edgeType == GtfsStorage.EdgeType.ALIGHT) ? 0 : (label.walkDistanceOnCurrentLeg + edge.getDistance());
134134
boolean isTryingToReEnterPtAfterTransferWalking = (!reverse && edgeType == GtfsStorage.EdgeType.ENTER_PT || reverse && edgeType == GtfsStorage.EdgeType.EXIT_PT) && label.nTransfers > 0 && label.walkDistanceOnCurrentLeg > maxTransferDistancePerLeg;
135135
long walkTime = label.walkTime + (edgeType == GtfsStorage.EdgeType.HIGHWAY || edgeType == GtfsStorage.EdgeType.ENTER_PT || edgeType == GtfsStorage.EdgeType.EXIT_PT ? nextTime - label.currentTime : 0);
136136
int nWalkDistanceConstraintViolations = Math.min(1, label.nWalkDistanceConstraintViolations + (

0 commit comments

Comments
 (0)