Skip to content

Commit 9a396c7

Browse files
authored
Merge pull request opentripplanner#7079 from HSLdevcom/fix-elevator-vertices
Refactor `ElevatorProcessor` and add tests for elevators
2 parents a3ab67c + 2a3eeee commit 9a396c7

39 files changed

Lines changed: 862 additions & 383 deletions

application/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import org.opentripplanner.street.model.edge.StreetVehicleParkingLink;
3535
import org.opentripplanner.street.model.edge.TemporaryFreeEdge;
3636
import org.opentripplanner.street.model.edge.TemporaryPartialStreetEdge;
37-
import org.opentripplanner.street.model.vertex.ElevatorVertex;
37+
import org.opentripplanner.street.model.vertex.ElevatorHopVertex;
3838
import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex;
3939
import org.opentripplanner.utils.collection.ListUtils;
4040

@@ -280,7 +280,7 @@ private static List<StyleBuilder> elevators(VectorSourceLayer edges, VectorSourc
280280
.group(ELEVATORS_GROUP)
281281
.typeCircle()
282282
.vectorSourceLayer(vertices)
283-
.vertexFilter(ElevatorVertex.class)
283+
.vertexFilter(ElevatorHopVertex.class)
284284
.circleStroke(BLACK, CIRCLE_STROKE)
285285
.circleRadius(
286286
new ZoomDependentNumber(List.of(new ZoomStop(15, 1), new ZoomStop(MAX_ZOOM, 7)))
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.opentripplanner.graph_builder.issues;
2+
3+
import org.opentripplanner.graph_builder.issue.api.DataImportIssue;
4+
import org.opentripplanner.osm.model.OsmNode;
5+
6+
public record AllWaysOfElevatorNodeOnSameLevel(OsmNode node) implements DataImportIssue {
7+
private static final String FMT =
8+
"All ways connected to elevator node %s are on the same level. " +
9+
"Level information is parsed from the level or layer tag and defaults to 0 without tag data. " +
10+
"Please check whether the node is correctly modeled.";
11+
12+
private static final String HTMLFMT =
13+
"All ways connected to <a href='%s'>elevator node %s</a> are on the same level. " +
14+
"Level information is parsed from the level or layer tag and defaults to 0 without tag data. " +
15+
"Please check whether the node is correctly modeled.";
16+
17+
@Override
18+
public String getMessage() {
19+
return String.format(FMT, node.getId());
20+
}
21+
22+
@Override
23+
public String getHTMLMessage() {
24+
return String.format(HTMLFMT, node.url(), node.getId());
25+
}
26+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.opentripplanner.graph_builder.issues;
2+
3+
import org.opentripplanner.graph_builder.issue.api.DataImportIssue;
4+
import org.opentripplanner.osm.model.OsmNode;
5+
6+
public record OnlyOneConnectionToElevatorNode(OsmNode node) implements DataImportIssue {
7+
private static final String FMT =
8+
"Elevator node %s has only one routable connection. " +
9+
"This makes the elevator unusable. " +
10+
"Please check whether the node is correctly modeled.";
11+
12+
private static final String HTMLFMT =
13+
"<a href='%s'>Elevator node %s</a> has only one routable connection. " +
14+
"This makes the elevator unusable. " +
15+
"Please check whether the node is correctly modeled.";
16+
17+
@Override
18+
public String getMessage() {
19+
return String.format(FMT, node.getId());
20+
}
21+
22+
@Override
23+
public String getHTMLMessage() {
24+
return String.format(HTMLFMT, node.url(), node.getId());
25+
}
26+
}

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import org.opentripplanner.street.model.edge.ElevatorBoardEdge;
1818
import org.opentripplanner.street.model.edge.ElevatorHopEdge;
1919
import org.opentripplanner.street.model.edge.PathwayEdge;
20-
import org.opentripplanner.street.model.vertex.ElevatorVertex;
20+
import org.opentripplanner.street.model.vertex.ElevatorHopVertex;
2121
import org.opentripplanner.street.model.vertex.StationElementVertex;
2222
import org.opentripplanner.street.model.vertex.TransitBoardingAreaVertex;
2323
import org.opentripplanner.street.model.vertex.TransitEntranceVertex;
@@ -211,7 +211,7 @@ private void createPathwayEdgesAndAddThemToGraph() {
211211

212212
/**
213213
* Create elevator edges from pathways. As pathway based elevators are not vertices, but edges in
214-
* the pathway model, we have to model each possible movement as an ElevatorVertex-StationElementVertex pair,
214+
* the pathway model, we have to model each possible movement as an ElevatorHopVertex-StationElementVertex pair,
215215
* instead of having only one set of vertices per level and edges between them.
216216
*/
217217
private void createElevatorEdgesAndAddThemToGraph(
@@ -227,15 +227,13 @@ private void createElevatorEdgesAndAddThemToGraph(
227227
levels = Math.abs(fromLevel.index() - toLevel.index());
228228
}
229229

230-
ElevatorVertex fromOnboardVertex = vertexFactory.elevator(
230+
ElevatorHopVertex fromOnboardVertex = vertexFactory.elevator(
231231
fromVertex,
232-
getElevatorLabel(fromVertex, pathway),
233-
fromLevel.index()
232+
getElevatorLabel(fromVertex, pathway)
234233
);
235-
ElevatorVertex toOnboardVertex = vertexFactory.elevator(
234+
ElevatorHopVertex toOnboardVertex = vertexFactory.elevator(
236235
toVertex,
237-
getElevatorLabel(toVertex, pathway),
238-
toLevel.index()
236+
getElevatorLabel(toVertex, pathway)
239237
);
240238

241239
ElevatorBoardEdge.createElevatorBoardEdge(fromVertex, fromOnboardVertex);

0 commit comments

Comments
 (0)