@Override public void addLanesToLinkAssignment(LanesToLinkAssignment assignment) { this.lanesToLinkAssignments.put(assignment.getLinkId(), assignment); }
public void checkConsistency() { log.info("checking consistency..."); List<Id<Link>> linksWithMalformedLanes = new LinkedList<>(); for (LanesToLinkAssignment l2l : this.lanes.getLanesToLinkAssignments().values()){ if (!isLaneOnLinkConsistent(l2l)){ linksWithMalformedLanes.add(l2l.getLinkId()); } } if (this.removeMalformed){ for (Id<Link> linkId : linksWithMalformedLanes) { this.lanes.getLanesToLinkAssignments().remove(linkId); log.info("remove lanes on link " + linkId); } } log.info("checked consistency. Lanes on " + linksWithMalformedLanes.size() + " links have been removed."); }
private Map<Id<Link>, List<TurnInfo>> createTurnInfos(Lanes laneDefs) { Map<Id<Link>, List<TurnInfo>> inLinkIdTurnInfoMap = new HashMap<>(); Set<Id<Link>> toLinkIds = new HashSet<>(); for (LanesToLinkAssignment l2l : laneDefs.getLanesToLinkAssignments().values()) { toLinkIds.clear(); for (Lane lane : l2l.getLanes().values()) { if (lane.getToLinkIds() != null && (lane.getToLaneIds() == null || lane.getToLaneIds().isEmpty())) { // make sure that it is a lane at the end of a link toLinkIds.addAll(lane.getToLinkIds()); } } if (!toLinkIds.isEmpty()) { List<TurnInfo> turnInfoList = new ArrayList<TurnInfo>(); for (Id<Link> toLinkId : toLinkIds) { turnInfoList.add(new TurnInfo(l2l.getLinkId(), toLinkId)); } inLinkIdTurnInfoMap.put(l2l.getLinkId(), turnInfoList); } } return inLinkIdTurnInfoMap; }
public static void overwriteLaneCapacitiesByNetworkCapacities(Network net, Lanes lanes) { for (LanesToLinkAssignment linkLanes : lanes.getLanesToLinkAssignments().values()) { double linkCap = net.getLinks().get(linkLanes.getLinkId()).getCapacity(); for (Lane lane : linkLanes.getLanes().values()) { lane.setCapacityVehiclesPerHour(linkCap); } } } }
private boolean isLaneOnLinkConsistent(LanesToLinkAssignment l2l) { if (!this.network.getLinks().containsKey(l2l.getLinkId())) { log.error("No link found for lanesToLinkAssignment on link Id(linkIdRef): " + l2l.getLinkId()); return false; Link link = this.network.getLinks().get(l2l.getLinkId()); for (Lane l : l2l.getLanes().values()){ if (link.getLength() < l.getStartsAtMeterFromLinkEnd()) { if (! l2l.getLanes().containsKey(toLaneId)){ log.error("Error: toLane not existing:"); log.error(" Lane Id: " + lane.getId() + " on Link Id: " + l2l.getLinkId() + " leads to Lane Id: " + toLaneId + " that is not existing!"); return false; for (Id<Link> toLinkId : lane.getToLinkIds()) { if (! this.network.getLinks().containsKey(toLinkId)){ log.error("No link found in network for toLinkId " + toLinkId + " of laneId " + lane.getId() + " of link id " + l2l.getLinkId()); return false; Link link = this.network.getLinks().get(l2l.getLinkId()); if (! link.getToNode().getOutLinks().containsKey(toLinkId)){ log.error("The given toLink " + toLinkId + " is not reachable from lane " + lane.getId() + " on link " + link.getId());
/** * Replaces the method that converted a lane from format 11 to format 20. * Use this when you have not defined an original lane of the link and when you have not set lane capacities yet. */ public static void createOriginalLanesAndSetLaneCapacities(Network network, Lanes lanes){ LanesFactory factory = lanes.getFactory(); for (LanesToLinkAssignment l2l : lanes.getLanesToLinkAssignments().values()){ Link link = network.getLinks().get(l2l.getLinkId()); Lane olLane = factory.createLane(Id.create(l2l.getLinkId().toString() + ".ol", Lane.class)); l2l.addLane(olLane); for (Lane lane : l2l.getLanes().values()) { olLane.addToLaneId(lane.getId()); //set capacity of the lane depending on link capacity and number of representative lanes LanesUtils.calculateAndSetCapacity(lane, true, link, network); } olLane.setNumberOfRepresentedLanes(link.getNumberOfLanes()); olLane.setStartsAtMeterFromLinkEnd(link.getLength()); } }
public static void calculateMissingCapacitiesForLanes20(String networkInputFilename, String lanes20InputFilename, String lanes20OutputFilename){ Config config = ConfigUtils.createConfig(); config.network().setInputFile(networkInputFilename); config.qsim().setUseLanes(true); config.network().setLaneDefinitionsFile(lanes20InputFilename); Scenario scenario = ScenarioUtils.loadScenario(config); Network network = scenario.getNetwork(); Lanes lanes = scenario.getLanes(); for (LanesToLinkAssignment l2l : lanes.getLanesToLinkAssignments().values()){ Link link = network.getLinks().get(l2l.getLinkId()); for (Lane lane : l2l.getLanes().values()){ if (lane.getToLaneIds() == null || lane.getToLaneIds().isEmpty()){ calculateAndSetCapacity(lane, true, link, network); } else { calculateAndSetCapacity(lane, false, link, network); } } } LanesWriter writerDelegate = new LanesWriter(lanes); writerDelegate.write(lanes20OutputFilename); }