@Override public NetworkRoute getSubRoute( final Id<Link> fromLinkId, final Id<Link> toLinkId) { return netRoute.getSubRoute(fromLinkId, toLinkId); }
@Override public NetworkRoute getSubRoute(final Id<Link> fromLinkId, final Id<Link> toLinkId) { return this.delegate.getSubRoute(fromLinkId, toLinkId); }
public static NetworkRoute getSubRoute(final NetworkRoute route, final Node fromNode, final Node toNode, final Network network) { Id<Link> fromLinkId = null; Id<Link> toLinkId = null; List<Id<Link>> linkIds = new ArrayList<>(route.getLinkIds().size() + 2); linkIds.add(route.getStartLinkId()); linkIds.addAll(route.getLinkIds()); linkIds.add(route.getEndLinkId()); for (Id<Link> linkId : linkIds) { Link link = network.getLinks().get(linkId); if (link.getToNode() == fromNode) { fromLinkId = link.getId(); } if (link.getFromNode() == toNode) { toLinkId = link.getId(); break; // we found the toLinkId, so we can stop searching, fromLinkId should be before after all } } return route.getSubRoute(fromLinkId, toLinkId); }
public TransitRouterNetworkTravelTimeAndDisutilityWW(final TransitRouterConfig config, Network network, TransitRouterNetworkWW routerNetwork, TravelTime travelTime, WaitTime waitTime, TravelTimeCalculatorConfigGroup tTConfigGroup, double startTime, double endTime, PreparedTransitSchedule preparedTransitSchedule) { super(config, preparedTransitSchedule); timeSlot = tTConfigGroup.getTraveltimeBinSize(); numSlots = (int) ((endTime-startTime)/timeSlot); for(TransitRouterNetworkWW.TransitRouterNetworkLink link:routerNetwork.getLinks().values()) if(link.route!=null) { double[] times = new double[numSlots]; for(int slot = 0; slot<numSlots; slot++) { double linksTime = travelTime.getLinkTravelTime(network.getLinks().get(link.fromNode.stop.getStopFacility().getLinkId()), startTime+slot*timeSlot, null, null); for(Id<Link> linkId:link.route.getRoute().getSubRoute(link.fromNode.stop.getStopFacility().getLinkId(), link.toNode.stop.getStopFacility().getLinkId()).getLinkIds()) linksTime += travelTime.getLinkTravelTime(network.getLinks().get(linkId), startTime+slot*timeSlot, null, null); times[slot] = linksTime; } linkTravelTimes.put(link.getId(), times); } else if(link.toNode.route!=null) { double[] times = new double[numSlots]; for(int slot = 0; slot<numSlots; slot++) times[slot] = waitTime.getRouteStopWaitTime(link.toNode.line.getId(), link.toNode.route.getId(), link.fromNode.stop.getStopFacility().getId(), startTime+slot*timeSlot); linkWaitingTimes.put(link.getId(), times); } } @Override
public TransitRouterNetworkLink(final Id<Link> id, final TransitRouterNetworkNode fromNode, final TransitRouterNetworkNode toNode, final TransitRoute route, final TransitLine line, Network network) { this.id = id; this.fromNode = fromNode; this.toNode = toNode; this.route = route; this.line = line; if(route==null) this.length = CoordUtils.calcEuclideanDistance(this.toNode.stop.getStopFacility().getCoord(), this.fromNode.stop.getStopFacility().getCoord()); else { this.length = 0; for(Id<Link> linkId:route.getRoute().getSubRoute(fromNode.stop.getStopFacility().getLinkId(), toNode.stop.getStopFacility().getLinkId()).getLinkIds()) this.length += network.getLinks().get(linkId).getLength(); this.length += network.getLinks().get(toNode.stop.getStopFacility().getLinkId()).getLength(); } }
@Test public void testGetSubRoute_wrongStart() { Network network = createTestNetwork(); Id<Link> id0 = Id.create("0", Link.class); Id<Link> id1 = Id.create("1", Link.class); Id<Link> id15 = Id.create("15", Link.class); NetworkRoute route = getNetworkRouteInstance(id1, id15, network); route.setLinkIds(id1, NetworkUtils.getLinkIds("22 12 -23 3 24 14"), id15); try { route.getSubRoute(id0, id15); Assert.fail("expected IllegalArgumentException, but it did not happen."); } catch (IllegalArgumentException expected) { log.info("catched expected exception: " + expected.getMessage()); } }
@Test public void testGetSubRoute_wrongEnd() { Network network = createTestNetwork(); Id<Link> id1 = Id.create("1", Link.class); Id<Link> id14 = Id.create("14", Link.class); Id<Link> id15 = Id.create("15", Link.class); NetworkRoute route = getNetworkRouteInstance(id1, id14, network); route.setLinkIds(id1, NetworkUtils.getLinkIds("22 12 -23 3 24"), id14); try { route.getSubRoute(id1, id15); Assert.fail("expected IllegalArgumentException, but it did not happen."); } catch (IllegalArgumentException expected) { log.info("catched expected exception: " + expected.getMessage()); } }
@Test public void testGetSubRoute_sameLinks_emptyRoute1() { Network network = createTestNetwork(); Id<Link> id1 = Id.create("1", Link.class); NetworkRoute route = getNetworkRouteInstance(id1, id1, network); route.setLinkIds(id1, null, id1); NetworkRoute subRoute = route.getSubRoute(id1, id1); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 0, linkIds.size()); Assert.assertEquals("wrong start link.", id1, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id1, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_sameLinks_emptyRoute2() { Network network = createTestNetwork(); Id<Link> id1 = Id.create("1", Link.class); Id<Link> id2 = Id.create("2", Link.class); NetworkRoute route = getNetworkRouteInstance(id1, id2, network); route.setLinkIds(id1, null, id2); NetworkRoute subRoute = route.getSubRoute(id1, id1); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 0, linkIds.size()); Assert.assertEquals("wrong start link.", id1, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id1, subRoute.getEndLinkId()); NetworkRoute subRoute2 = route.getSubRoute(id2, id2); List<Id<Link>> linkIds2 = subRoute2.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 0, linkIds2.size()); Assert.assertEquals("wrong start link.", id2, subRoute2.getStartLinkId()); Assert.assertEquals("wrong end link.", id2, subRoute2.getEndLinkId()); }
@Test public void testGetSubRoute_CircleAtStart() { Network network = createTestNetwork(); NetworkUtils.createAndAddLink(network,Id.create(-3, Link.class), network.getNodes().get(Id.create(4, Node.class)), network.getNodes().get(Id.create(3, Node.class)), 1000.0, 100.0, 3600.0, (double) 1 ); Id<Link> id13 = Id.create("13", Link.class); Id<Link> id15 = Id.create("15", Link.class); NetworkRoute route = getNetworkRouteInstance(id13, id15, network); route.setLinkIds(id13, NetworkUtils.getLinkIds("-24 -3 23 13 14"), id15); NetworkRoute subRoute = route.getSubRoute(id13, id15); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 1, linkIds.size()); Assert.assertEquals("wrong link.", Id.create("14", Link.class), subRoute.getLinkIds().get(0)); Assert.assertEquals("wrong start link.", id13, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id15, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_fromStart() { Network network = createTestNetwork(); Id<Link> id0 = Id.create("0", Link.class); Id<Link> id1 = Id.create("1", Link.class); Id<Link> id3 = Id.create("3", Link.class); Id<Link> id12 = Id.create("12", Link.class); Id<Link> id15 = Id.create("15", Link.class); Id<Link> id22 = Id.create("22", Link.class); Id<Link> id23m = Id.create("-23", Link.class); NetworkRoute route = getNetworkRouteInstance(id0, id15, network); route.setLinkIds(id0, NetworkUtils.getLinkIds("1 22 12 -23 3 24 14"), id15); NetworkRoute subRoute = route.getSubRoute(id0, id3); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 4, linkIds.size()); Assert.assertEquals(id1, linkIds.get(0)); Assert.assertEquals(id22, linkIds.get(1)); Assert.assertEquals(id12, linkIds.get(2)); Assert.assertEquals(id23m, linkIds.get(3)); Assert.assertEquals("wrong start link.", id0, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id3, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_startOnly() { Network network = createTestNetwork(); Id<Link> id0 = Id.create("0", Link.class); Id<Link> id15 = Id.create("15", Link.class); NetworkRoute route = getNetworkRouteInstance(id0, id15, network); route.setLinkIds(id0, NetworkUtils.getLinkIds("1 22 12 -23 3 24 14"), id15); NetworkRoute subRoute = route.getSubRoute(id0, id0); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 0, linkIds.size()); Assert.assertEquals("wrong start link.", id0, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id0, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_fullRoute() { Network network = createTestNetwork(); Id<Link> id0 = Id.create("0", Link.class); Id<Link> id4 = Id.create("4", Link.class); NetworkRoute route = getNetworkRouteInstance(id0, id4, network); route.setLinkIds(id0, NetworkUtils.getLinkIds("1 22 12 -23 3"), id4); NetworkRoute subRoute = route.getSubRoute(id0, id4); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 5, linkIds.size()); Assert.assertEquals("wrong link.", Id.create("1", Link.class), subRoute.getLinkIds().get(0)); Assert.assertEquals("wrong link.", Id.create("22", Link.class), subRoute.getLinkIds().get(1)); Assert.assertEquals("wrong link.", Id.create("12", Link.class), subRoute.getLinkIds().get(2)); Assert.assertEquals("wrong link.", Id.create("-23", Link.class), subRoute.getLinkIds().get(3)); Assert.assertEquals("wrong link.", Id.create("3", Link.class), subRoute.getLinkIds().get(4)); Assert.assertEquals("wrong start link.", id0, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id4, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_endOnly() { Network network = createTestNetwork(); Id<Link> id0 = Id.create("0", Link.class); Id<Link> id15 = Id.create("15", Link.class); NetworkRoute route = getNetworkRouteInstance(id0, id15, network); route.setLinkIds(id0, NetworkUtils.getLinkIds("1 22 12 -23 3 24 14"), id15); NetworkRoute subRoute = route.getSubRoute(id15, id15); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 0, linkIds.size()); Assert.assertEquals("wrong start link.", id15, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id15, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_toEnd() { Network network = createTestNetwork(); Id<Link> id0 = Id.create("0", Link.class); Id<Link> id3 = Id.create("3", Link.class); Id<Link> id15 = Id.create("15", Link.class); Id<Link> id23m = Id.create("-23", Link.class); Id<Link> id24 = Id.create("24", Link.class); NetworkRoute route = getNetworkRouteInstance(id0, id15, network); route.setLinkIds(id0, NetworkUtils.getLinkIds("1 22 12 -23 3 24 14"), id15); NetworkRoute subRoute = route.getSubRoute(id23m, id15); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 3, linkIds.size()); Assert.assertEquals(id3, linkIds.get(0)); Assert.assertEquals(id24, linkIds.get(1)); Assert.assertEquals("wrong start link.", id23m, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id15, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_startInCircle_CircleInEnd() { Network network = createTestNetwork(); NetworkUtils.createAndAddLink(network,Id.create(-3, Link.class), network.getNodes().get(Id.create(4, Node.class)), network.getNodes().get(Id.create(3, Node.class)), 1000.0, 100.0, 3600.0, (double) 1 ); Id<Link> id11 = Id.create("11", Link.class); Id<Link> id13 = Id.create("13", Link.class); NetworkRoute route = getNetworkRouteInstance(id11, id13, network); route.setLinkIds(id11, NetworkUtils.getLinkIds("12 13 -24 -3 23"), id13); Id<Link> id_24 = Id.create("-24", Link.class); NetworkRoute subRoute = route.getSubRoute(id_24, id13); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 2, linkIds.size()); Assert.assertEquals("wrong link.", Id.create("-3", Link.class), subRoute.getLinkIds().get(0)); Assert.assertEquals("wrong link.", Id.create("23", Link.class), subRoute.getLinkIds().get(1)); Assert.assertEquals("wrong start link.", id_24, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id13, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_startInCircle() { Network network = createTestNetwork(); NetworkUtils.createAndAddLink(network,Id.create(-3, Link.class), network.getNodes().get(Id.create(4, Node.class)), network.getNodes().get(Id.create(3, Node.class)), 1000.0, 100.0, 3600.0, (double) 1 ); Id<Link> id11 = Id.create("11", Link.class); Id<Link> id15 = Id.create("15", Link.class); NetworkRoute route = getNetworkRouteInstance(id11, id15, network); route.setLinkIds(id11, NetworkUtils.getLinkIds("12 13 -24 -3 23 13 14"), id15); Id<Link> id13 = Id.create("13", Link.class); Id<Link> id23 = Id.create("23", Link.class); NetworkRoute subRoute = route.getSubRoute(id13, id23); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 2, linkIds.size()); Assert.assertEquals("wrong link.", Id.create("-24", Link.class), subRoute.getLinkIds().get(0)); Assert.assertEquals("wrong link.", Id.create("-3", Link.class), subRoute.getLinkIds().get(1)); Assert.assertEquals("wrong start link.", id13, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id23, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_sameLinks() { Network network = createTestNetwork(); Id<Link> id1 = Id.create("1", Link.class); Id<Link> id12 = Id.create("12", Link.class); Id<Link> id14 = Id.create("14", Link.class); NetworkRoute route = getNetworkRouteInstance(id1, id14, network); route.setLinkIds(id1, NetworkUtils.getLinkIds("22 12 -23 3 24"), id14); NetworkRoute subRoute = route.getSubRoute(id12, id12); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 0, linkIds.size()); Assert.assertEquals("wrong start link.", id12, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id12, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute() { Network network = createTestNetwork(); Id<Link> id0 = Id.create("0", Link.class); Id<Link> id3 = Id.create("3", Link.class); Id<Link> id12 = Id.create("12", Link.class); Id<Link> id15 = Id.create("15", Link.class); Id<Link> id23m = Id.create("-23", Link.class); Id<Link> id24 = Id.create("24", Link.class); NetworkRoute route = getNetworkRouteInstance(id0, id15, network); route.setLinkIds(id0, NetworkUtils.getLinkIds("1 22 12 -23 3 24 14"), id15); NetworkRoute subRoute = route.getSubRoute(id12, id24); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 2, linkIds.size()); Assert.assertEquals(id23m, linkIds.get(0)); Assert.assertEquals(id3, linkIds.get(1)); Assert.assertEquals("wrong start link.", id12, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id24, subRoute.getEndLinkId()); }
@Test public void testGetSubRoute_circleInRoute() { Network network = createTestNetwork(); NetworkUtils.createAndAddLink(network,Id.create(-3, Link.class), network.getNodes().get(Id.create(4, Node.class)), network.getNodes().get(Id.create(3, Node.class)), 1000.0, 100.0, 3600.0, (double) 1 ); Id<Link> id11 = Id.create("11", Link.class); Id<Link> id15 = Id.create("15", Link.class); NetworkRoute route = getNetworkRouteInstance(id11, id15, network); route.setLinkIds(id11, NetworkUtils.getLinkIds("12 13 -24 -3 23 13 14"), id15); Id<Link> id12 = Id.create("12", Link.class); Id<Link> id14 = Id.create("14", Link.class); NetworkRoute subRoute = route.getSubRoute(id12, id14); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 5, linkIds.size()); Assert.assertEquals("wrong link.", Id.create("13", Link.class), subRoute.getLinkIds().get(0)); Assert.assertEquals("wrong link.", Id.create("-24", Link.class), subRoute.getLinkIds().get(1)); Assert.assertEquals("wrong link.", Id.create("-3", Link.class), subRoute.getLinkIds().get(2)); Assert.assertEquals("wrong link.", Id.create("23", Link.class), subRoute.getLinkIds().get(3)); Assert.assertEquals("wrong link.", Id.create("13", Link.class), subRoute.getLinkIds().get(4)); Assert.assertEquals("wrong start link.", id12, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id14, subRoute.getEndLinkId()); }