private ArrayList<TransitStopFacility> addStopToExistingStops(TransitStopFacility baseStop, TransitStopFacility remoteStop, ArrayList<TransitStopFacility> currentStopsToBeServed, TransitStopFacility newStop) { ArrayList<TransitStopFacility> newStopsToBeServed = new ArrayList<>(currentStopsToBeServed); // decide which stop is closer if (CoordUtils.calcEuclideanDistance(baseStop.getCoord(), newStop.getCoord()) < CoordUtils.calcEuclideanDistance(remoteStop.getCoord(), newStop.getCoord())) { // baseStop is closer - insert before baseStop newStopsToBeServed.add(0, newStop); } else { // remote stop is closer or both have the same distance - add after remote stop newStopsToBeServed.add(newStopsToBeServed.indexOf(remoteStop) + 1, newStop); } return newStopsToBeServed; }
@Override public Coord getCoord() { return this.stop.getStopFacility().getCoord(); }
@Override public Coord getCoord() { return this.stop.getStopFacility().getCoord(); }
private boolean stopIdInServiceArea(Id<TransitStopFacility> stopId) { TransitStopFacility stop = this.transitSchedule.getFacilities().get(stopId); if (stop.getCoord().getX() < this.minX) { return false; } if (stop.getCoord().getX() > this.maxX) { return false; } if (stop.getCoord().getY() < this.minY) { return false; } if (stop.getCoord().getY() > this.maxY) { return false; } return true; }
public TransitRouterNetworkLink(final Id<Link> id, final TransitRouterNetworkNode fromNode, final TransitRouterNetworkNode toNode, final TransitRoute route, final TransitLine line) { this(id, fromNode, toNode, route, line, CoordUtils.calcEuclideanDistance(toNode.stop.getStopFacility().getCoord(), fromNode.stop.getStopFacility().getCoord())); }
private boolean checkStopInServiceArea(TransitStopFacility stop, PConfigGroup pC){ boolean isInServiceArea = true; if(stop.getCoord().getX() < pC.getMinX()){isInServiceArea = false;} if(stop.getCoord().getX() > pC.getMaxX()){isInServiceArea = false;} if(stop.getCoord().getY() < pC.getMinY()){isInServiceArea = false;} if(stop.getCoord().getY() > pC.getMaxY()){isInServiceArea = false;} return isInServiceArea; }
private Leg createTransferTransitWalkLeg(RouteSegment routeSegement) { Leg leg = this.createTransitWalkLeg(routeSegement.getFromStop().getCoord(), routeSegement.getToStop().getCoord()); Route walkRoute = RouteUtils.createGenericRouteImpl(routeSegement.getFromStop().getLinkId(), routeSegement.getToStop().getLinkId()); // walkRoute.setTravelTime(leg.getTravelTime() ); // transit walk leg should include additional transfer time; Amit, Aug'17 leg.setTravelTime( getTransferTime(null, routeSegement.getFromStop().getCoord(), routeSegement.getToStop().getCoord()) ); walkRoute.setTravelTime(getTransferTime(null, routeSegement.getFromStop().getCoord(), routeSegement.getToStop().getCoord()) ); walkRoute.setDistance(trConfig.getBeelineDistanceFactor() * NetworkUtils.getEuclideanDistance(routeSegement.fromStop.getCoord(), routeSegement.toStop.getCoord())); leg.setRoute(walkRoute); return leg; }
private double scoreRoute(List<RouteSegment> route, Map<TransitStopFacility, InitialNode> fromStops, Map<TransitStopFacility, InitialNode> toStops) { double cost = 0.0; for (RouteSegment routeSegment : route) { if (routeSegment.getRouteTaken() == null) { // handle transfer cost += this.raptorDisutility.getTransferCost(routeSegment.getFromStop().getCoord(), routeSegment.getToStop().getCoord()); } else { // pt trip cost += this.raptorDisutility.getInVehicleTravelDisutility(routeSegment); } } // add cost for getting to the first and last stop cost += fromStops.get(route.get(0).getFromStop()).initialCost; cost += toStops.get(route.get(route.size() - 1).getToStop()).initialCost; return cost; }
private TransitStopFacility drawRandomStop(Geometry buffer, PRouteProvider pRouteProvider, Set<Id<TransitStopFacility>> stopsUsed) { List<TransitStopFacility> choiceSet = new LinkedList<>(); // find choice-set for (TransitStopFacility stop : pRouteProvider.getAllPStops()) { if (!stopsUsed.contains(stop.getId())) { if (buffer.contains(MGC.coord2Point(stop.getCoord()))) { choiceSet.add(stop); } } } return pRouteProvider.drawRandomStopFromList(choiceSet); }
private TransitStopFacility drawRandomStop(Geometry buffer, PRouteProvider pRouteProvider, Set<Id<TransitStopFacility>> stopsUsed) { List<TransitStopFacility> choiceSet = new LinkedList<>(); // find choice-set for (TransitStopFacility stop : pRouteProvider.getAllPStops()) { if (!stopsUsed.contains(stop.getId())) { if (buffer.contains(MGC.coord2Point(stop.getCoord()))) { choiceSet.add(stop); } } } return pRouteProvider.drawRandomStopFromList(choiceSet); }
/** * Note that there is no off vehicle wait time. */ protected double getInVehicleTravelDisutility(final RouteSegment routeSegment) { double cost = 0.0; // this assumes dwell time as in-vehicle time double inVehicleTravelTime = routeSegment.getTravelTime(); double inVehicleBeelineDistance = CoordUtils.calcEuclideanDistance(routeSegment.getFromStop().getCoord(), routeSegment.getToStop().getCoord()); cost += - inVehicleTravelTime * this.config.getMarginalUtilityOfTravelTimePt_utl_s(); cost += - inVehicleBeelineDistance * this.config.getMarginalUtilityOfTravelDistancePt_utl_m(); // fare cost += this.costPerBoarding; cost += inVehicleBeelineDistance * this.costPerMeterTraveled; return cost; }
private Map<TransitStopFacility, InitialNode> locateWrappedNearestTransitStops(Person person, Coord coord, double departureTime) { Collection<TransitStopFacility> nearestTransitStops = this.transitRouterQuadTree.getNearestTransitStopFacilities(coord, this.config.getSearchRadius()); if (nearestTransitStops.size() < 2) { // also enlarge search area if only one stop found, maybe a second one is near the border of the search area TransitStopFacility nearestTransitStop = this.transitRouterQuadTree.getNearestTransitStopFacility(coord); double distance = CoordUtils.calcEuclideanDistance(coord, nearestTransitStop.getCoord()); nearestTransitStops = this.transitRouterQuadTree.getNearestTransitStopFacilities(coord, distance + this.config.getExtensionRadius()); } Map<TransitStopFacility, InitialNode> wrappedNearestTransitStops2AccessCost = new LinkedHashMap<>(); for (TransitStopFacility node : nearestTransitStops) { Coord toCoord = node.getCoord(); double initialTime = getWalkTime(null, coord, toCoord); double initialCost = getWalkDisutility(coord, toCoord); wrappedNearestTransitStops2AccessCost.put(node, new InitialNode(initialCost, initialTime + departureTime)); } return wrappedNearestTransitStops2AccessCost; }
private Map<Node, InitialNode> locateWrappedNearestTransitNodes(Person person, Coord coord, double departureTime){ Collection<TransitRouterNetworkWW.TransitRouterNetworkNode> nearestNodes = this.transitNetwork.getNearestNodes(coord, this.config.getSearchRadius()); if (nearestNodes.size() < 2) { // also enlarge search area if only one stop found, maybe a second one is near the border of the search area TransitRouterNetworkWW.TransitRouterNetworkNode nearestNode = this.transitNetwork.getNearestNode(coord); double distance = CoordUtils.calcEuclideanDistance(coord, nearestNode.stop.getStopFacility().getCoord()); nearestNodes = this.transitNetwork.getNearestNodes(coord, distance + this.config.getExtensionRadius()); } Map<Node, InitialNode> wrappedNearestNodes = new LinkedHashMap<Node, InitialNode>(); for (TransitRouterNetworkWW.TransitRouterNetworkNode node : nearestNodes) { Coord toCoord = node.stop.getStopFacility().getCoord(); double initialTime = getWalkTime(person, coord, toCoord); double initialCost = getWalkDisutility(person, coord, toCoord); wrappedNearestNodes.put(node, new InitialNode(initialCost, initialTime + departureTime)); } return wrappedNearestNodes; }
private Leg createAccessTransitWalkLeg(Coord fromCoord, RouteSegment routeSegement) { Leg leg = this.createTransitWalkLeg(fromCoord, routeSegement.fromStop.getCoord()); Route walkRoute = RouteUtils.createGenericRouteImpl(null, routeSegement.fromStop.getLinkId()); walkRoute.setTravelTime(leg.getTravelTime() ); walkRoute.setDistance(trConfig.getBeelineDistanceFactor() * NetworkUtils.getEuclideanDistance(fromCoord, routeSegement.fromStop.getCoord())); leg.setRoute(walkRoute); return leg; }
private Leg createEgressTransitWalkLeg(RouteSegment routeSegement, Coord toCoord) { Leg leg = this.createTransitWalkLeg(routeSegement.toStop.getCoord(), toCoord); Route walkRoute = RouteUtils.createGenericRouteImpl(routeSegement.toStop.getLinkId(), null); walkRoute.setTravelTime(leg.getTravelTime() ); walkRoute.setDistance(trConfig.getBeelineDistanceFactor() * NetworkUtils.getEuclideanDistance(routeSegement.toStop.getCoord(), toCoord)); leg.setRoute(walkRoute); return leg; }
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(); } }
private void assertCorrectlyReprojected( final TransitSchedule originalSchedule, final TransitSchedule transformedSchedule) { Assert.assertEquals( "unexpected number of stops", originalSchedule.getFacilities().size(), transformedSchedule.getFacilities().size() ); for ( Id<TransitStopFacility> stopId : originalSchedule.getFacilities().keySet() ) { final Coord original = originalSchedule.getFacilities().get( stopId ).getCoord(); final Coord transformed = transformedSchedule.getFacilities().get( stopId ).getCoord(); Assert.assertEquals( "wrong reprojected X value", transformation.transform(original), transformed); } }
/** * Get the very next transitNode. * @param person Which person we are routing for. For default leave null. * @param coord The origin of the tree. * @param departureTime The time the person departures at the origin. * @return the next transitNode. */ private Map<Node, InitialNode> locateWrappedNearestTransitNode(Person person, Coord coord, double departureTime) { TransitRouterNetwork.TransitRouterNetworkNode nearestNode = network.getNearestNode(coord); Map<Node, InitialNode> wrappedNearestNodes = new LinkedHashMap<>(); Coord toCoord = nearestNode.stop.getStopFacility().getCoord(); double initialTime = travelDisutility.getWalkTravelTime(person, coord, toCoord); double initialCost = travelDisutility.getWalkTravelDisutility(person, coord, toCoord); wrappedNearestNodes.put(nearestNode, new InitialNode(initialCost, initialTime + departureTime)); return wrappedNearestNodes; }
public void testInitialization() { Id<TransitStopFacility> id = Id.create(2491, TransitStopFacility.class); Coord coord = new Coord((double) 30, (double) 5); TransitStopFacility stop = createTransitStopFacility(id, coord, false); assertEquals(id.toString(), stop.getId().toString()); assertEquals(coord.getX(), stop.getCoord().getX(), EPSILON); assertEquals(coord.getY(), stop.getCoord().getY(), EPSILON); assertFalse(stop.getIsBlockingLane()); }
@Test public void testCreateTransitStopFacility() { TransitScheduleFactory builder = createTransitScheduleBuilder(); Id<TransitStopFacility> id1 = Id.create(6, TransitStopFacility.class); Coord coord1 = new Coord((double) 511, (double) 1980); Id<TransitStopFacility> id2 = Id.create(7, TransitStopFacility.class); Coord coord2 = new Coord((double) 105, (double) 1979); TransitStopFacility stopFacility1 = builder.createTransitStopFacility(id1, coord1, false); Assert.assertEquals(id1, stopFacility1.getId()); Assert.assertEquals(coord1.getX(), stopFacility1.getCoord().getX(), MatsimTestUtils.EPSILON); Assert.assertEquals(coord1.getY(), stopFacility1.getCoord().getY(), MatsimTestUtils.EPSILON); Assert.assertFalse(stopFacility1.getIsBlockingLane()); TransitStopFacility stopFacility2 = builder.createTransitStopFacility(id2, coord2, true); Assert.assertEquals(id2, stopFacility2.getId()); Assert.assertEquals(coord2.getX(), stopFacility2.getCoord().getX(), MatsimTestUtils.EPSILON); Assert.assertEquals(coord2.getY(), stopFacility2.getCoord().getY(), MatsimTestUtils.EPSILON); Assert.assertTrue(stopFacility2.getIsBlockingLane()); }