use of org.opentripplanner.routing.vertextype.IntersectionVertex in project OpenTripPlanner by opentripplanner.
the class EdgeTest method testEdgeRemoval.
@Test
public void testEdgeRemoval() {
Graph graph = new Graph();
StreetVertex va = new IntersectionVertex(graph, "A", 10.0, 10.0);
StreetVertex vb = new IntersectionVertex(graph, "B", 10.1, 10.1);
StreetVertex vc = new IntersectionVertex(graph, "C", 10.2, 10.2);
StreetVertex vd = new IntersectionVertex(graph, "D", 10.3, 10.3);
Edge eab = new StreetEdge(va, vb, null, "AB", 10, StreetTraversalPermission.ALL, false);
Edge ebc = new StreetEdge(vb, vc, null, "BC", 10, StreetTraversalPermission.ALL, false);
Edge ecd = new StreetEdge(vc, vd, null, "CD", 10, StreetTraversalPermission.ALL, false);
// remove an edge that is not connected to this vertex
va.removeOutgoing(ecd);
assertEquals(va.getDegreeOut(), 1);
// remove an edge from an edgelist that is empty
vd.removeOutgoing(eab);
assertEquals(vd.getDegreeOut(), 0);
// remove an edge that is actually connected
assertEquals(va.getDegreeOut(), 1);
va.removeOutgoing(eab);
assertEquals(va.getDegreeOut(), 0);
// remove an edge that is actually connected
assertEquals(vb.getDegreeIn(), 1);
assertEquals(vb.getDegreeOut(), 1);
vb.removeIncoming(eab);
assertEquals(vb.getDegreeIn(), 0);
assertEquals(vb.getDegreeOut(), 1);
vb.removeOutgoing(ebc);
assertEquals(vb.getDegreeIn(), 0);
assertEquals(vb.getDegreeOut(), 0);
}
use of org.opentripplanner.routing.vertextype.IntersectionVertex in project OpenTripPlanner by opentripplanner.
the class SimpleIsochrone method makePoints.
/**
* @return a map from each vertex to minimum travel time over the course of the day.
*/
private Map<Vertex, Double> makePoints() throws Exception {
rangeCheckParameters();
request = buildRequest();
Router router = otpServer.getRouter(routerId);
Graph graph = router.graph;
// double speed = request.getWalkSpeed();
Coordinate originCoord = request.from.getCoordinate();
if (originCoord == null)
return null;
List<TransitStop> stops = graph.streetIndex.getNearbyTransitStops(originCoord, radiusMeters);
if (stops.isEmpty()) {
LOG.error("No stops found within {} meters.", radiusMeters);
return null;
}
if (shpName == null)
shpName = stops.get(0).getName().split(" ")[0];
StreetVertex origin = new IntersectionVertex(graph, "iso_temp", originCoord.x, originCoord.y);
for (TransitStop stop : stops) {
new StreetTransitLink(origin, stop, false);
LOG.debug("linked to stop {}", stop.getName());
}
request.setRoutingContext(graph, origin, null);
/* Make one request every M minutes over H hours */
int nRequests = (requestTimespanHours * 60) / requestSpacingMinutes;
request.clampInitialWait = (requestSpacingMinutes * 60);
Date date = request.getDateTime();
MinMap<Vertex, Double> points = new MinMap<Vertex, Double>();
for (int r = 0; r < nRequests; r++) {
request.dateTime = date.getTime() / 1000 + r * requestSpacingMinutes * 60;
LOG.debug("date: {} {}", new Date(request.dateTime), request.dateTime);
ShortestPathTree spt = sptService.getShortestPathTree(request, 10);
/* This could even be a good use for a generic SPT merging function */
for (State s : spt.getAllStates()) {
if (stopsOnly && !(s.getVertex() instanceof TransitStop))
continue;
points.putMin(s.getVertex(), (double) (s.getActiveTime()));
}
}
graph.removeVertexAndEdges(origin);
return points;
}
use of org.opentripplanner.routing.vertextype.IntersectionVertex in project OpenTripPlanner by opentripplanner.
the class LinkingTest method testSplitting.
/**
* Ensure that splitting edges yields edges that are identical in length for forward and back edges.
* StreetEdges have lengths expressed internally in mm, and we want to be sure that not only do they
* sum to the same values but also that they
*/
@Test
public void testSplitting() {
GeometryFactory gf = GeometryUtils.getGeometryFactory();
double x = -122.123;
double y = 37.363;
for (double delta = 0; delta <= 2; delta += 0.005) {
StreetVertex v0 = new IntersectionVertex(null, "zero", x, y);
StreetVertex v1 = new IntersectionVertex(null, "one", x + delta, y + delta);
LineString geom = gf.createLineString(new Coordinate[] { v0.getCoordinate(), v1.getCoordinate() });
double dist = SphericalDistanceLibrary.distance(v0.getCoordinate(), v1.getCoordinate());
StreetEdge s0 = new StreetEdge(v0, v1, geom, "test", dist, StreetTraversalPermission.ALL, false);
StreetEdge s1 = new StreetEdge(v1, v0, (LineString) geom.reverse(), "back", dist, StreetTraversalPermission.ALL, true);
// split it but not too close to the end
double splitVal = Math.random() * 0.95 + 0.025;
SplitterVertex sv0 = new SplitterVertex(null, "split", x + delta * splitVal, y + delta * splitVal, s0);
SplitterVertex sv1 = new SplitterVertex(null, "split", x + delta * splitVal, y + delta * splitVal, s1);
P2<StreetEdge> sp0 = s0.split(sv0, true);
P2<StreetEdge> sp1 = s1.split(sv1, true);
// distances expressed internally in mm so this epsilon is plenty good enough to ensure that they
// have the same values
assertEquals(sp0.first.getDistance(), sp1.second.getDistance(), 0.0000001);
assertEquals(sp0.second.getDistance(), sp1.first.getDistance(), 0.0000001);
assertFalse(sp0.first.isBack());
assertFalse(sp0.second.isBack());
assertTrue(sp1.first.isBack());
assertTrue(sp1.second.isBack());
}
}
use of org.opentripplanner.routing.vertextype.IntersectionVertex in project OpenTripPlanner by opentripplanner.
the class TestHalfEdges method setUp.
@Before
public void setUp() {
graph = new Graph();
// a 0.1 degree x 0.1 degree square
tl = new IntersectionVertex(graph, "tl", -74.01, 40.01);
tr = new IntersectionVertex(graph, "tr", -74.0, 40.01);
bl = new IntersectionVertex(graph, "bl", -74.01, 40.0);
br = new IntersectionVertex(graph, "br", -74.00, 40.0);
top = new StreetEdge(tl, tr, GeometryUtils.makeLineString(-74.01, 40.01, -74.0, 40.01), "top", 1500, StreetTraversalPermission.ALL, false);
bottom = new StreetEdge(br, bl, GeometryUtils.makeLineString(-74.01, 40.0, -74.0, 40.0), "bottom", 1500, StreetTraversalPermission.ALL, false);
left = new StreetEdge(bl, tl, GeometryUtils.makeLineString(-74.01, 40.0, -74.01, 40.01), "left", 1500, StreetTraversalPermission.ALL, false);
right = new StreetEdge(br, tr, GeometryUtils.makeLineString(-74.0, 40.0, -74.0, 40.01), "right", 1500, StreetTraversalPermission.PEDESTRIAN, false);
@SuppressWarnings("unused") StreetEdge topBack = new StreetEdge(tr, tl, (LineString) top.getGeometry().reverse(), "topBack", 1500, StreetTraversalPermission.ALL, true);
@SuppressWarnings("unused") StreetEdge bottomBack = new StreetEdge(br, bl, (LineString) bottom.getGeometry().reverse(), "bottomBack", 1500, StreetTraversalPermission.ALL, true);
leftBack = new StreetEdge(tl, bl, (LineString) left.getGeometry().reverse(), "leftBack", 1500, StreetTraversalPermission.ALL, true);
rightBack = new StreetEdge(tr, br, (LineString) right.getGeometry().reverse(), "rightBack", 1500, StreetTraversalPermission.ALL, true);
Stop s1 = new Stop();
s1.setName("transitVertex 1");
s1.setLon(-74.005);
s1.setLat(40.0099999);
s1.setId(new AgencyAndId("A", "fleem station"));
Stop s2 = new Stop();
s2.setName("transitVertex 2");
s2.setLon(-74.002);
s2.setLat(40.0099999);
s2.setId(new AgencyAndId("A", "morx station"));
station1 = new TransitStop(graph, s1);
station2 = new TransitStop(graph, s2);
station1.addMode(TraverseMode.RAIL);
station2.addMode(TraverseMode.RAIL);
graph.rebuildVertexAndEdgeIndices();
// Linkers aren't run otherwise in testNetworkLinker
graph.hasStreets = true;
graph.hasTransit = true;
}
use of org.opentripplanner.routing.vertextype.IntersectionVertex in project OpenTripPlanner by opentripplanner.
the class TestParkAndRide method setUp.
@Override
protected void setUp() throws Exception {
graph = new Graph();
// Generate a very simple graph
A = new IntersectionVertex(graph, "A", 0.000, 45, "A");
B = new IntersectionVertex(graph, "B", 0.001, 45, "B");
C = new IntersectionVertex(graph, "C", 0.002, 45, "C");
D = new IntersectionVertex(graph, "D", 0.003, 45, "D");
@SuppressWarnings("unused") Edge driveOnly = new StreetEdge(A, B, GeometryUtils.makeLineString(0.000, 45, 0.001, 45), "AB street", 87, StreetTraversalPermission.CAR, false);
@SuppressWarnings("unused") Edge walkAndBike = new StreetEdge(B, C, GeometryUtils.makeLineString(0.001, 45, 0.002, 45), "BC street", 87, StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE, false);
@SuppressWarnings("unused") Edge walkOnly = new StreetEdge(C, D, GeometryUtils.makeLineString(0.002, 45, 0.003, 45), "CD street", 87, StreetTraversalPermission.PEDESTRIAN, false);
}
Aggregations