Skip to content

Commit 0eaf205

Browse files
committed
Really insert missing data for realtime inter-feed transfers
1 parent 43ae73f commit 0eaf205

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.time.Instant;
2424
import java.util.ArrayList;
2525
import java.util.Collections;
26-
import java.util.EnumSet;
2726
import java.util.List;
2827

2928
public class Label {
@@ -99,7 +98,7 @@ public String toString() {
9998
return adjNode + " " + (departureTime != null ? Instant.ofEpochMilli(departureTime) : "---") + "\t" + nTransfers + "\t" + Instant.ofEpochMilli(currentTime);
10099
}
101100

102-
static List<Label.Transition> getTransitions(Label _label, boolean arriveBy, PtEncodedValues encoder, Graph queryGraph, GtfsStorage gtfsStorage) {
101+
static List<Label.Transition> getTransitions(Label _label, boolean arriveBy, PtEncodedValues encoder, Graph queryGraph, RealtimeFeed realtimeFeed) {
103102
Label label = _label;
104103
boolean reverseEdgeFlags = !arriveBy;
105104
List<Label.Transition> result = new ArrayList<>();
@@ -117,9 +116,9 @@ static List<Label.Transition> getTransitions(Label _label, boolean arriveBy, PtE
117116

118117
Label.Transition transition;
119118
if (reverseEdgeFlags) {
120-
transition = new Label.Transition(label, edgeIteratorState != null ? Label.getEdgeLabel(edgeIteratorState, encoder, gtfsStorage) : null);
119+
transition = new Label.Transition(label, edgeIteratorState != null ? Label.getEdgeLabel(edgeIteratorState, encoder, realtimeFeed) : null);
121120
} else {
122-
transition = new Label.Transition(label.parent, edgeIteratorState != null ? Label.getEdgeLabel(edgeIteratorState, encoder, gtfsStorage) : null);
121+
transition = new Label.Transition(label.parent, edgeIteratorState != null ? Label.getEdgeLabel(edgeIteratorState, encoder, realtimeFeed) : null);
123122
}
124123
label = label.parent;
125124
result.add(transition);
@@ -131,11 +130,11 @@ static List<Label.Transition> getTransitions(Label _label, boolean arriveBy, PtE
131130
return result;
132131
}
133132

134-
public static EdgeLabel getEdgeLabel(EdgeIteratorState edgeIteratorState, PtEncodedValues flagEncoder, GtfsStorage gtfsStorage) {
133+
public static EdgeLabel getEdgeLabel(EdgeIteratorState edgeIteratorState, PtEncodedValues flagEncoder, RealtimeFeed realtimeFeed) {
135134
GtfsStorage.EdgeType edgeType = edgeIteratorState.get(flagEncoder.getTypeEnc());
136135
String feedId;
137136
if (edgeType == GtfsStorage.EdgeType.ENTER_PT || edgeType == GtfsStorage.EdgeType.TRANSFER) {
138-
GtfsStorageI.PlatformDescriptor platformDescriptor = gtfsStorage.getPlatformDescriptorByEdge().get(edgeIteratorState.getEdge());
137+
GtfsStorageI.PlatformDescriptor platformDescriptor = realtimeFeed.getPlatformDescriptorByEdge().get(edgeIteratorState.getEdge());
139138
feedId = platformDescriptor.feed_id;
140139
} else {
141140
feedId = null;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -350,9 +350,9 @@ private List<List<Label.Transition>> findPaths(int startNode, int destNode) {
350350
List<List<Label.Transition>> paths = new ArrayList<>();
351351
for (Label discoveredSolution : discoveredSolutions) {
352352
Label originalSolution = originalSolutions.get(discoveredSolution);
353-
List<Label.Transition> pathToDestinationStop = Label.getTransitions(originalSolution, arriveBy, ptEncodedValues, queryGraph, gtfsStorage);
353+
List<Label.Transition> pathToDestinationStop = Label.getTransitions(originalSolution, arriveBy, ptEncodedValues, queryGraph, realtimeFeed);
354354
if (arriveBy) {
355-
List<Label.Transition> pathFromStation = Label.getTransitions(reverseSettledSet.get(pathToDestinationStop.get(0).label.adjNode), false, ptEncodedValues, queryGraph, gtfsStorage);
355+
List<Label.Transition> pathFromStation = Label.getTransitions(reverseSettledSet.get(pathToDestinationStop.get(0).label.adjNode), false, ptEncodedValues, queryGraph, realtimeFeed);
356356
long diff = pathToDestinationStop.get(0).label.currentTime - pathFromStation.get(pathFromStation.size() - 1).label.currentTime;
357357
List<Label.Transition> patchedPathFromStation = pathFromStation.stream().map(t -> {
358358
return new Label.Transition(new Label(t.label.currentTime + diff, t.label.edge, t.label.adjNode, t.label.nTransfers, t.label.walkDistanceOnCurrentLeg, t.label.departureTime, t.label.walkTime, t.label.residualDelay, t.label.impossible, null), t.edge);
@@ -361,7 +361,7 @@ private List<List<Label.Transition>> findPaths(int startNode, int destNode) {
361361
pp.addAll(0, patchedPathFromStation);
362362
paths.add(pp);
363363
} else {
364-
List<Label.Transition> pathFromStation = Label.getTransitions(reverseSettledSet.get(pathToDestinationStop.get(pathToDestinationStop.size() - 1).label.adjNode), true, ptEncodedValues, queryGraph, gtfsStorage);
364+
List<Label.Transition> pathFromStation = Label.getTransitions(reverseSettledSet.get(pathToDestinationStop.get(pathToDestinationStop.size() - 1).label.adjNode), true, ptEncodedValues, queryGraph, realtimeFeed);
365365
long diff = pathToDestinationStop.get(pathToDestinationStop.size() - 1).label.currentTime - pathFromStation.get(0).label.currentTime;
366366
List<Label.Transition> patchedPathFromStation = pathFromStation.stream().map(t -> {
367367
return new Label.Transition(new Label(t.label.currentTime + diff, t.label.edge, t.label.adjNode, t.label.nTransfers, t.label.walkDistanceOnCurrentLeg, t.label.departureTime, t.label.walkTime, t.label.residualDelay, t.label.impossible, null), t.edge);

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,10 @@ public class RealtimeFeed {
6969
private final Map<Integer, byte[]> additionalTripDescriptors;
7070
private final Map<Integer, Integer> stopSequences;
7171
private final Map<Integer, GtfsStorage.Validity> validities;
72+
private final Map<Integer, GtfsStorageI.PlatformDescriptor> platformDescriptorByEdge;
7273

7374
private RealtimeFeed(GtfsStorage staticGtfs, Map<String, GtfsRealtime.FeedMessage> feedMessages, IntHashSet blockedEdges,
74-
IntLongHashMap delaysForBoardEdges, IntLongHashMap delaysForAlightEdges, List<VirtualEdgeIteratorState> additionalEdges, Map<Integer, byte[]> tripDescriptors, Map<Integer, Integer> stopSequences, Map<GtfsStorage.Validity, Integer> operatingDayPatterns, Map<GtfsStorage.FeedIdWithTimezone, Integer> writableTimeZones) {
75+
IntLongHashMap delaysForBoardEdges, IntLongHashMap delaysForAlightEdges, List<VirtualEdgeIteratorState> additionalEdges, Map<Integer, byte[]> tripDescriptors, Map<Integer, Integer> stopSequences, Map<GtfsStorage.Validity, Integer> operatingDayPatterns, Map<GtfsStorage.FeedIdWithTimezone, Integer> writableTimeZones, Map<Integer, GtfsStorageI.PlatformDescriptor> platformDescriptorByEdge) {
7576
this.staticGtfs = staticGtfs;
7677
this.feedMessages = feedMessages;
7778
this.blockedEdges = blockedEdges;
@@ -85,10 +86,11 @@ private RealtimeFeed(GtfsStorage staticGtfs, Map<String, GtfsRealtime.FeedMessag
8586
reverseOperatingDayPatterns.put(entry.getValue(), entry.getKey());
8687
}
8788
this.validities = Collections.unmodifiableMap(reverseOperatingDayPatterns);
89+
this.platformDescriptorByEdge = platformDescriptorByEdge;
8890
}
8991

9092
public static RealtimeFeed empty(GtfsStorage staticGtfs) {
91-
return new RealtimeFeed(staticGtfs, Collections.emptyMap(), new IntHashSet(), new IntLongHashMap(), new IntLongHashMap(), Collections.emptyList(), Collections.emptyMap(), Collections.emptyMap(), staticGtfs.getOperatingDayPatterns(), staticGtfs.getWritableTimeZones());
93+
return new RealtimeFeed(staticGtfs, Collections.emptyMap(), new IntHashSet(), new IntLongHashMap(), new IntLongHashMap(), Collections.emptyList(), Collections.emptyMap(), Collections.emptyMap(), staticGtfs.getOperatingDayPatterns(), staticGtfs.getWritableTimeZones(), staticGtfs.getPlatformDescriptorByEdge());
9294
}
9395

9496
public static RealtimeFeed fromProtobuf(GraphHopperStorage graphHopperStorage, GtfsStorage staticGtfs, Map<String, GtfsRealtime.FeedMessage> feedMessages) {
@@ -266,7 +268,7 @@ public boolean isAdjacentToNode(int edge, int node) {
266268
Map<String, int[]> boardEdgesForTrip = new HashMap<>();
267269
Map<String, int[]> alightEdgesForTrip = new HashMap<>();
268270
Map<GtfsStorage.FeedIdWithTimezone, Integer> writableTimeZones = new HashMap<>(staticGtfs.getWritableTimeZones());
269-
271+
Map<Integer, GtfsStorageI.PlatformDescriptor> platformDescriptorByEdge = new HashMap<>(staticGtfs.getPlatformDescriptorByEdge());
270272

271273
feedMessages.forEach((feedKey, feedMessage) -> {
272274
GTFSFeed feed = staticGtfs.getGtfsFeeds().get(feedKey);
@@ -331,7 +333,7 @@ public Map<GtfsStorage.FeedIdWithStopId, Integer> getStationNodes() {
331333

332334
@Override
333335
public Map<Integer, PlatformDescriptor> getPlatformDescriptorByEdge() {
334-
return staticGtfs.getPlatformDescriptorByEdge();
336+
return platformDescriptorByEdge;
335337
}
336338
};
337339
final GtfsReader gtfsReader = new GtfsReader(feedKey, overlayGraph, graphHopperStorage.getEncodingManager(), gtfsStorage, null);
@@ -406,7 +408,7 @@ public Map<Integer, PlatformDescriptor> getPlatformDescriptorByEdge() {
406408
gtfsReader.wireUpAdditionalDeparturesAndArrivals(timezone);
407409
});
408410

409-
return new RealtimeFeed(staticGtfs, feedMessages, blockedEdges, delaysForBoardEdges, delaysForAlightEdges, additionalEdges, tripDescriptors, stopSequences, operatingDayPatterns, writableTimeZones);
411+
return new RealtimeFeed(staticGtfs, feedMessages, blockedEdges, delaysForBoardEdges, delaysForAlightEdges, additionalEdges, tripDescriptors, stopSequences, operatingDayPatterns, writableTimeZones, platformDescriptorByEdge);
410412
}
411413

412414
boolean isBlocked(int edgeId) {
@@ -597,4 +599,8 @@ public GtfsStorage.Validity getValidity(int validityId) {
597599
return validities.get(validityId);
598600
}
599601

602+
public Map<Integer, GtfsStorageI.PlatformDescriptor> getPlatformDescriptorByEdge() {
603+
return platformDescriptorByEdge;
604+
}
605+
600606
}

0 commit comments

Comments
 (0)