Skip to content

Commit a5f9ab3

Browse files
Merge pull request #6686 from leonardehrenfried/vertex-linker
Remove circular dependency between graph and vertex linker
2 parents 42b5334 + 690ea50 commit a5f9ab3

File tree

52 files changed

+409
-215
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+409
-215
lines changed

application/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.opentripplanner.routing.graphfinder.DirectGraphFinder;
1717
import org.opentripplanner.routing.graphfinder.NearbyStop;
1818
import org.opentripplanner.routing.graphfinder.StreetGraphFinder;
19+
import org.opentripplanner.routing.linking.VertexLinker;
1920
import org.opentripplanner.street.model.vertex.TransitStopVertex;
2021
import org.opentripplanner.transit.model.site.RegularStop;
2122
import org.opentripplanner.transit.service.TimetableRepository;
@@ -41,17 +42,20 @@ public class DirectTransferAnalyzer implements GraphBuilderModule {
4142
private static final Logger LOG = LoggerFactory.getLogger(DirectTransferAnalyzer.class);
4243

4344
private final Graph graph;
45+
private final VertexLinker linker;
4446
private final TimetableRepository timetableRepository;
4547
private final DataImportIssueStore issueStore;
4648
private final double radiusMeters;
4749

4850
public DirectTransferAnalyzer(
4951
Graph graph,
52+
VertexLinker linker,
5053
TimetableRepository timetableRepository,
5154
DataImportIssueStore issueStore,
5255
double radiusMeters
5356
) {
5457
this.graph = graph;
58+
this.linker = linker;
5559
this.timetableRepository = timetableRepository;
5660
this.issueStore = issueStore;
5761
this.radiusMeters = radiusMeters;
@@ -70,7 +74,7 @@ public void buildGraph() {
7074
DirectGraphFinder nearbyStopFinderEuclidian = new DirectGraphFinder(
7175
timetableRepository.getSiteRepository()::findRegularStops
7276
);
73-
StreetGraphFinder nearbyStopFinderStreets = new StreetGraphFinder(graph);
77+
StreetGraphFinder nearbyStopFinderStreets = new StreetGraphFinder(graph, linker);
7478

7579
int stopsAnalyzed = 0;
7680

application/src/main/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModule.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,20 @@ public class OsmBoardingLocationsModule implements GraphBuilderModule {
7373
@Inject
7474
public OsmBoardingLocationsModule(
7575
Graph graph,
76+
VertexLinker linker,
7677
OsmInfoGraphBuildService osmInfoGraphBuildService
7778
) {
7879
this.graph = graph;
7980
this.osmInfoGraphBuildService = osmInfoGraphBuildService;
8081
this.vertexFactory = new VertexFactory(graph);
82+
this.linker = linker;
8183
}
8284

8385
@Override
8486
public void buildGraph() {
8587
LOG.info("Improving boarding locations by checking OSM entities...");
8688

87-
this.linker = graph.getLinkerSafe();
89+
graph.index();
8890
int successes = 0;
8991

9092
for (TransitStopVertex ts : graph.getVerticesOfType(TransitStopVertex.class)) {

application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java

Lines changed: 79 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.opentripplanner.graph_builder.issues.ParkAndRideEntranceRemoved;
1111
import org.opentripplanner.graph_builder.model.GraphBuilderModule;
1212
import org.opentripplanner.routing.graph.Graph;
13+
import org.opentripplanner.routing.linking.VertexLinker;
1314
import org.opentripplanner.service.vehicleparking.VehicleParkingRepository;
1415
import org.opentripplanner.service.vehicleparking.model.VehicleParking;
1516
import org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper;
@@ -52,30 +53,26 @@ public class StreetLinkerModule implements GraphBuilderModule {
5253
private final VehicleParkingRepository parkingRepository;
5354
private final TimetableRepository timetableRepository;
5455
private final DataImportIssueStore issueStore;
55-
private final boolean areaVisibility;
56-
private final int maxAreaNodes;
56+
private final VertexLinker vertexLinker;
5757

5858
public StreetLinkerModule(
5959
Graph graph,
60+
VertexLinker linker,
6061
VehicleParkingRepository parkingRepository,
6162
TimetableRepository timetableRepository,
62-
DataImportIssueStore issueStore,
63-
boolean areaVisibility,
64-
int maxAreaNodes
63+
DataImportIssueStore issueStore
6564
) {
6665
this.graph = graph;
6766
this.parkingRepository = parkingRepository;
6867
this.timetableRepository = timetableRepository;
6968
this.issueStore = issueStore;
70-
this.areaVisibility = areaVisibility;
71-
this.maxAreaNodes = maxAreaNodes;
69+
this.vertexLinker = linker;
7270
}
7371

7472
@Override
7573
public void buildGraph() {
7674
timetableRepository.index();
77-
graph.getLinkerSafe().setAreaVisibility(this.areaVisibility);
78-
graph.getLinkerSafe().setMaxAreaNodes(this.maxAreaNodes);
75+
graph.requestIndex();
7976

8077
if (graph.hasStreets) {
8178
linkTransitStops(graph, timetableRepository);
@@ -158,22 +155,20 @@ private static boolean isAlreadyLinked(
158155
* edge. This may lead to several links being created.
159156
*/
160157
private void linkStopToStreetNetwork(TransitStopVertex tStop, StopLinkType linkType) {
161-
graph
162-
.getLinker()
163-
.linkVertexPermanently(
164-
tStop,
165-
WALK_ONLY,
166-
LinkingDirection.BIDIRECTIONAL,
167-
(transitVertex, streetVertex) -> {
168-
var linkEdges = createStopLinkEdges((TransitStopVertex) transitVertex, streetVertex);
169-
170-
if (linkType == StopLinkType.WALK_AND_CAR && !streetVertex.isConnectedToDriveableEdge()) {
171-
linkToDriveableEdge(tStop);
172-
}
173-
174-
return linkEdges;
158+
vertexLinker.linkVertexPermanently(
159+
tStop,
160+
WALK_ONLY,
161+
LinkingDirection.BIDIRECTIONAL,
162+
(transitVertex, streetVertex) -> {
163+
var linkEdges = createStopLinkEdges((TransitStopVertex) transitVertex, streetVertex);
164+
165+
if (linkType == StopLinkType.WALK_AND_CAR && !streetVertex.isConnectedToDriveableEdge()) {
166+
linkToDriveableEdge(tStop);
175167
}
176-
);
168+
169+
return linkEdges;
170+
}
171+
);
177172
}
178173

179174
/**
@@ -185,15 +180,13 @@ private void linkStopToStreetNetwork(TransitStopVertex tStop, StopLinkType linkT
185180
* @see https://github.com/opentripplanner/OpenTripPlanner/issues/5498
186181
*/
187182
private void linkToDriveableEdge(TransitStopVertex tStop) {
188-
graph
189-
.getLinker()
190-
.linkVertexPermanently(
191-
tStop,
192-
CAR_ONLY,
193-
LinkingDirection.BIDIRECTIONAL,
194-
(transitVertex, streetVertex) ->
195-
createStopLinkEdges((TransitStopVertex) transitVertex, streetVertex)
196-
);
183+
vertexLinker.linkVertexPermanently(
184+
tStop,
185+
CAR_ONLY,
186+
LinkingDirection.BIDIRECTIONAL,
187+
(transitVertex, streetVertex) ->
188+
createStopLinkEdges((TransitStopVertex) transitVertex, streetVertex)
189+
);
197190
}
198191

199192
private static List<Edge> createStopLinkEdges(
@@ -206,74 +199,65 @@ private static List<Edge> createStopLinkEdges(
206199
);
207200
}
208201

209-
private static void linkVehicleParkingWithLinker(
210-
Graph graph,
211-
VehicleParkingEntranceVertex vehicleParkingVertex
212-
) {
202+
private void linkVehicleParkingWithLinker(VehicleParkingEntranceVertex vehicleParkingVertex) {
213203
if (vehicleParkingVertex.isWalkAccessible()) {
214-
graph
215-
.getLinker()
216-
.linkVertexPermanently(
217-
vehicleParkingVertex,
218-
new TraverseModeSet(TraverseMode.WALK),
219-
LinkingDirection.BIDIRECTIONAL,
220-
(vertex, streetVertex) ->
221-
List.of(
222-
StreetVehicleParkingLink.createStreetVehicleParkingLink(
223-
(VehicleParkingEntranceVertex) vertex,
224-
streetVertex
225-
),
226-
StreetVehicleParkingLink.createStreetVehicleParkingLink(
227-
streetVertex,
228-
(VehicleParkingEntranceVertex) vertex
229-
)
204+
vertexLinker.linkVertexPermanently(
205+
vehicleParkingVertex,
206+
new TraverseModeSet(TraverseMode.WALK),
207+
LinkingDirection.BIDIRECTIONAL,
208+
(vertex, streetVertex) ->
209+
List.of(
210+
StreetVehicleParkingLink.createStreetVehicleParkingLink(
211+
(VehicleParkingEntranceVertex) vertex,
212+
streetVertex
213+
),
214+
StreetVehicleParkingLink.createStreetVehicleParkingLink(
215+
streetVertex,
216+
(VehicleParkingEntranceVertex) vertex
230217
)
231-
);
218+
)
219+
);
232220
}
233221

234222
if (vehicleParkingVertex.isCarAccessible()) {
235-
graph
236-
.getLinker()
237-
.linkVertexPermanently(
238-
vehicleParkingVertex,
239-
new TraverseModeSet(TraverseMode.CAR),
240-
LinkingDirection.BIDIRECTIONAL,
241-
(vertex, streetVertex) ->
242-
List.of(
243-
StreetVehicleParkingLink.createStreetVehicleParkingLink(
244-
(VehicleParkingEntranceVertex) vertex,
245-
streetVertex
246-
),
247-
StreetVehicleParkingLink.createStreetVehicleParkingLink(
248-
streetVertex,
249-
(VehicleParkingEntranceVertex) vertex
250-
)
223+
vertexLinker.linkVertexPermanently(
224+
vehicleParkingVertex,
225+
new TraverseModeSet(TraverseMode.CAR),
226+
LinkingDirection.BIDIRECTIONAL,
227+
(vertex, streetVertex) ->
228+
List.of(
229+
StreetVehicleParkingLink.createStreetVehicleParkingLink(
230+
(VehicleParkingEntranceVertex) vertex,
231+
streetVertex
232+
),
233+
StreetVehicleParkingLink.createStreetVehicleParkingLink(
234+
streetVertex,
235+
(VehicleParkingEntranceVertex) vertex
251236
)
252-
);
237+
)
238+
);
253239
}
254240
}
255241

256242
private void linkTransitEntrances(Graph graph) {
257243
LOG.info("Linking transit entrances to graph...");
258244
for (TransitEntranceVertex tEntrance : graph.getVerticesOfType(TransitEntranceVertex.class)) {
259-
graph
260-
.getLinker()
261-
.linkVertexPermanently(
262-
tEntrance,
263-
new TraverseModeSet(TraverseMode.WALK),
264-
LinkingDirection.BIDIRECTIONAL,
265-
(vertex, streetVertex) ->
266-
List.of(
267-
StreetTransitEntranceLink.createStreetTransitEntranceLink(
268-
(TransitEntranceVertex) vertex,
269-
streetVertex
270-
),
271-
StreetTransitEntranceLink.createStreetTransitEntranceLink(
272-
streetVertex,
273-
(TransitEntranceVertex) vertex
274-
)
245+
vertexLinker.linkVertexPermanently(
246+
tEntrance,
247+
new TraverseModeSet(TraverseMode.WALK),
248+
LinkingDirection.BIDIRECTIONAL,
249+
(vertex, streetVertex) ->
250+
List.of(
251+
StreetTransitEntranceLink.createStreetTransitEntranceLink(
252+
(TransitEntranceVertex) vertex,
253+
streetVertex
254+
),
255+
StreetTransitEntranceLink.createStreetTransitEntranceLink(
256+
streetVertex,
257+
(TransitEntranceVertex) vertex
275258
)
276-
);
259+
)
260+
);
277261
}
278262
}
279263

@@ -294,14 +278,12 @@ private void linkStationCentroids(Graph graph) {
294278
);
295279

296280
for (StationCentroidVertex station : graph.getVerticesOfType(StationCentroidVertex.class)) {
297-
graph
298-
.getLinker()
299-
.linkVertexPermanently(
300-
station,
301-
new TraverseModeSet(TraverseMode.WALK),
302-
LinkingDirection.BIDIRECTIONAL,
303-
stationAndStreetVertexLinker
304-
);
281+
vertexLinker.linkVertexPermanently(
282+
station,
283+
new TraverseModeSet(TraverseMode.WALK),
284+
LinkingDirection.BIDIRECTIONAL,
285+
stationAndStreetVertexLinker
286+
);
305287
}
306288
}
307289

@@ -316,7 +298,7 @@ private void linkVehicleParks(Graph graph, DataImportIssueStore issueStore) {
316298
}
317299

318300
if (vehicleParkingEntranceVertex.getParkingEntrance().getVertex() == null) {
319-
linkVehicleParkingWithLinker(graph, vehicleParkingEntranceVertex);
301+
linkVehicleParkingWithLinker(vehicleParkingEntranceVertex);
320302
continue;
321303
}
322304

application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.opentripplanner.netex.NetexModule;
3434
import org.opentripplanner.routing.fares.FareServiceFactory;
3535
import org.opentripplanner.routing.graph.Graph;
36+
import org.opentripplanner.routing.linking.VertexLinker;
37+
import org.opentripplanner.routing.linking.configure.VertexLinkerGraphBuildingModule;
3638
import org.opentripplanner.service.osminfo.OsmInfoGraphBuildRepository;
3739
import org.opentripplanner.service.osminfo.configure.OsmInfoGraphBuildServiceModule;
3840
import org.opentripplanner.service.vehicleparking.VehicleParkingRepository;
@@ -47,6 +49,7 @@
4749
GraphBuilderModules.class,
4850
OsmInfoGraphBuildServiceModule.class,
4951
EmissionGraphBuilderModule.class,
52+
VertexLinkerGraphBuildingModule.class,
5053
}
5154
)
5255
public interface GraphBuilderFactory {
@@ -83,6 +86,8 @@ public interface GraphBuilderFactory {
8386

8487
FareServiceFactory fareServiceFactory();
8588

89+
VertexLinker vertexLinker();
90+
8691
@Component.Builder
8792
interface Builder {
8893
@BindsInstance

0 commit comments

Comments
 (0)