Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.opentripplanner.street.model.edge.StreetVehicleParkingLink;
import org.opentripplanner.street.model.edge.TemporaryFreeEdge;
import org.opentripplanner.street.model.edge.TemporaryPartialStreetEdge;
import org.opentripplanner.street.model.vertex.ElevatorVertex;
import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex;
import org.opentripplanner.utils.collection.ListUtils;

Expand Down Expand Up @@ -118,6 +119,7 @@ public class DebugStyleSpec {
private static final String RENTAL_GROUP = "Rental";
private static final String PERMISSIONS_GROUP = "Permissions";
private static final String NO_THRU_TRAFFIC_GROUP = "No-thru traffic";
private static final String ELEVATORS_GROUP = "Elevators";

private static final StreetTraversalPermission[] streetModes = new StreetTraversalPermission[] {
StreetTraversalPermission.PEDESTRIAN,
Expand Down Expand Up @@ -173,6 +175,7 @@ static StyleSpec build(
traversalPermissions(edges),
edges(edges),
elevation(edges, vertices),
elevators(edges, vertices),
vertices(vertices),
stops(regularStops, areaStops, groupStops)
)
Expand Down Expand Up @@ -260,6 +263,35 @@ private static List<StyleBuilder> vertices(VectorSourceLayer vertices) {
);
}

private static List<StyleBuilder> elevators(VectorSourceLayer edges, VectorSourceLayer vertices) {
return List.of(
StyleBuilder.ofId("elevator-hop-edge")
.group(ELEVATORS_GROUP)
.typeLine()
.vectorSourceLayer(edges)
.edgeFilter(ElevatorHopEdge.class)
.lineColor(ORANGE)
.lineWidth(LINE_WIDTH)
.lineOffset(LINE_OFFSET)
.minZoom(6)
.maxZoom(MAX_ZOOM)
.intiallyHidden(),
StyleBuilder.ofId("elevator-vertex")
.group(ELEVATORS_GROUP)
.typeCircle()
.vectorSourceLayer(vertices)
.vertexFilter(ElevatorVertex.class)
.circleStroke(BLACK, CIRCLE_STROKE)
.circleRadius(
new ZoomDependentNumber(List.of(new ZoomStop(15, 1), new ZoomStop(MAX_ZOOM, 7)))
)
.circleColor(ORANGE)
.minZoom(15)
.maxZoom(MAX_ZOOM)
.intiallyHidden()
);
}

private static List<StyleBuilder> rental(
VectorSourceLayer rentalLayer,
VectorSourceLayer geofencingZones
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ protected List<Geometry> getGeometries(Envelope query) {
return graph
.findEdges(query)
.stream()
.filter(e -> e.getGeometry() != null)
.filter(e -> e.getDebugGeometry() != null)
.map(edge -> {
Geometry geometry = edge.getGeometry();
Geometry geometry = edge.getDebugGeometry();
geometry.setUserData(edge);
return geometry;
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import static org.opentripplanner.utils.lang.DoubleUtils.roundTo2Decimals;

import com.google.common.collect.Lists;
import java.time.Duration;
import java.util.Collection;
import java.util.List;
import org.opentripplanner.apis.support.mapping.PropertyMapper;
import org.opentripplanner.inspector.vector.KeyValue;
import org.opentripplanner.street.model.StreetTraversalPermission;
import org.opentripplanner.street.model.edge.Edge;
import org.opentripplanner.street.model.edge.ElevatorHopEdge;
import org.opentripplanner.street.model.edge.EscalatorEdge;
import org.opentripplanner.street.model.edge.StreetEdge;
import org.opentripplanner.utils.collection.ListUtils;
Expand All @@ -24,7 +26,13 @@ protected Collection<KeyValue> map(Edge input) {
case StreetEdge e -> mapStreetEdge(e);
case EscalatorEdge e -> List.of(
kv("distance", e.getDistanceMeters()),
kv("duration", e.getDuration().map(d -> d.toString()).orElse(null))
kv("duration", e.getDuration().map(Duration::toString).orElse(null))
);
case ElevatorHopEdge e -> List.of(
kv("permission", e.getPermission()),
kv("levels", e.getLevels()),
kv("wheelchairAccessible", e.isWheelchairAccessible()),
kv("travelTime", e.getTravelTime().map(Duration::toString).orElse(null))
);
default -> List.of();
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex;
import org.opentripplanner.street.model.edge.StreetEdge;
import org.opentripplanner.street.model.vertex.BarrierVertex;
import org.opentripplanner.street.model.vertex.ElevatorVertex;
import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex;
import org.opentripplanner.street.model.vertex.Vertex;
import org.opentripplanner.street.search.TraverseMode;
Expand All @@ -39,6 +40,7 @@ protected Collection<KeyValue> map(Vertex input) {
kColl("spacesFor", spacesFor(v.getVehicleParking())),
kColl("traversalPermission", traversalPermissions(v.getParkingEntrance()))
);
case ElevatorVertex v -> List.of(kv("level", v.getLevel()));
default -> List.of();
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,13 @@ public LineString getGeometry() {
return null;
}

/**
* Returns a geometry to be drawn on the Debug UI
*/
public LineString getDebugGeometry() {
return this.getGeometry();
}

public boolean hasGeometry() {
return getGeometry() != null;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
package org.opentripplanner.street.model.edge;

import java.time.Duration;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.LineString;
import org.opentripplanner.framework.geometry.GeometryUtils;
import org.opentripplanner.framework.i18n.I18NString;
import org.opentripplanner.routing.api.request.preference.RoutingPreferences;
import org.opentripplanner.street.model.StreetTraversalPermission;
Expand Down Expand Up @@ -98,8 +105,35 @@ public StreetTraversalPermission getPermission() {
return permission;
}

public int getTravelTime() {
return travelTime;
/**
* Returns a Debug UI specific geometry which allows visualization
* of these edges on the map layer
*/
@Override
public LineString getDebugGeometry() {
// If coordinates are equal, move the other one slightly to make the edge visible
if (fromv.getCoordinate().equals(tov.getCoordinate())) {
Coordinate newTo = tov.getCoordinate().copy();
newTo.setX(tov.getX() + 0.000001);
return GeometryUtils.makeLineString(Arrays.asList(fromv.getCoordinate(), newTo));
}
List<Coordinate> segmentCoordinates = Arrays.asList(fromv.getCoordinate(), tov.getCoordinate());
return GeometryUtils.makeLineString(segmentCoordinates);
}

/**
* The number of levels that the elevator travels
*/
public double getLevels() {
return levels;
}

/**
* Returns the travel time of the elevator.
* If travelTime is 0, returns an empty Optional.
*/
public Optional<Duration> getTravelTime() {
return travelTime > 0 ? Optional.of(Duration.ofSeconds(travelTime)) : Optional.empty();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ public ElevatorVertex(Vertex sourceVertex, String label, @Nullable String level)
this.label = label;
}

/**
* OSM level name or "{elevatorWay osm id} / {node index}"
*/
public String getLevel() {
return level;
}

@Override
public VertexLabel getLabel() {
return VertexLabel.string(LABEL_TEMPLATE.formatted(label, level));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.opentripplanner.graph_builder.module.osm.moduletests;

import static com.google.common.truth.Truth.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.opentripplanner.graph_builder.module.osm.moduletests._support.NodeBuilder.node;

import java.time.Duration;
import org.junit.jupiter.api.Test;
import org.opentripplanner.framework.geometry.WgsCoordinate;
import org.opentripplanner.graph_builder.module.osm.OsmModule;
Expand Down Expand Up @@ -33,7 +33,7 @@ void testDuration() {
var edges = graph.getEdgesOfType(ElevatorHopEdge.class);
assertThat(edges).hasSize(2);
for (var edge : edges) {
assertEquals(62, edge.getTravelTime());
assertThat(edge.getTravelTime()).hasValue(Duration.ofSeconds(62));
}
}

Expand All @@ -60,7 +60,7 @@ void testMultilevelNodeDuration() {
var edges = graph.getEdgesOfType(ElevatorHopEdge.class);
assertThat(edges).hasSize(2);
for (var edge : edges) {
assertEquals(62, edge.getTravelTime());
assertThat(edge.getTravelTime()).hasValue(Duration.ofSeconds(62));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1586,6 +1586,104 @@
"group" : "Elevation"
}
},
{
"id" : "elevator-hop-edge",
"type" : "line",
"source" : "vectorSource",
"source-layer" : "edges",
"minzoom" : 6,
"maxzoom" : 23,
"paint" : {
"line-color" : "#ffa500",
"line-width" : [
"interpolate",
[
"linear"
],
[
"zoom"
],
13,
0.2,
23,
8.0
],
"line-offset" : [
"interpolate",
[
"linear"
],
[
"zoom"
],
13,
0.4,
23,
7.0
]
},
"filter" : [
"in",
"class",
"ElevatorHopEdge"
],
"layout" : {
"line-cap" : "round",
"visibility" : "none"
},
"metadata" : {
"group" : "Elevators"
}
},
{
"id" : "elevator-vertex",
"type" : "circle",
"source" : "vectorSource",
"source-layer" : "vertices",
"minzoom" : 15,
"maxzoom" : 23,
"paint" : {
"circle-stroke-color" : "#140d0e",
"circle-stroke-width" : [
"interpolate",
[
"linear"
],
[
"zoom"
],
15,
0.2,
23,
3.0
],
"circle-radius" : [
"interpolate",
[
"linear"
],
[
"zoom"
],
15,
1.0,
23,
7.0
],
"circle-color" : "#ffa500"
},
"filter" : [
"in",
"class",
"ElevatorVertex"
],
"layout" : {
"visibility" : "none"
},
"metadata" : {
"group" : "Elevators"
}
},
{
"id" : "vertex",
"type" : "circle",
Expand Down
Loading