@Override public int compare(ModelLane o1, ModelLane o2) { if (o1.getEndsAtMeterFromLinkEnd() < o2.getEndsAtMeterFromLinkEnd()) { return -1; } else if (o1.getEndsAtMeterFromLinkEnd() > o2.getEndsAtMeterFromLinkEnd()) { return 1; } else { return 0; } } });
ModelLane firstQLane = new ModelLane(firstLane); laneList.add(firstQLane); Stack<ModelLane> laneStack = new Stack<>(); List<Id<Lane>> toLaneIds = lastQLane.getLaneData().getToLaneIds(); double nextMetersFromLinkEnd = 0.0; double laneLength = 0.0; Lane currentLane = lanesToLinkAssignment.getLanes().get(toLaneId); nextMetersFromLinkEnd = currentLane.getStartsAtMeterFromLinkEnd(); ModelLane currentQLane = new ModelLane(currentLane); laneList.add(currentQLane); lastQLane.addAToLane(currentQLane); laneLength = lastQLane.getLaneData().getStartsAtMeterFromLinkEnd() - nextMetersFromLinkEnd; lastQLane.setEndsAtMetersFromLinkEnd(nextMetersFromLinkEnd); laneLength = lastQLane.getLaneData().getStartsAtMeterFromLinkEnd(); lastQLane.setEndsAtMetersFromLinkEnd(0.0); lastQLane.setLength(laneLength); if (qLane.getToLanes() == null || (qLane.getToLanes().isEmpty())) { for (Id<Link> toLinkId : qLane.getLaneData().getToLinkIds()){ qLane.addDestinationLink(toLinkId); for (ModelLane subsequentLane : qLane.getToLanes()){ for (Id<Link> toLinkId : subsequentLane.getDestinationLinkIds()){ qLane.addDestinationLink(toLinkId);
Map<Id<Lane>, Set<Id<Link>>> laneIdToLinksMap = new HashMap<>(); for (ModelLane lane : lanes) { // lanes is sorted downstream to upstream Id<Lane> laneId = lane.getLaneData().getId(); builder.setVehicleQueue(new FIFOVehicleQ()); builder.setLaneId(laneId); builder.setLength(lane.getLength()); builder.setEffectiveNumberOfLanes(lane.getLaneData().getNumberOfRepresentedLanes()); builder.setFlowCapacity_s(lane.getLaneData().getCapacityVehiclesPerHour() / 3600.); QLaneI queue = builder.createLane(this); Set<Id<Link>> toLinkIds = new HashSet<>(); if (lane.getToLanes() == null || lane.getToLanes().isEmpty()) { // lane is at the end of toLinkIds.addAll(lane.getLaneData().getToLinkIds()); laneIdToLinksMap.put(laneId, toLinkIds); } else { // lane is within the link and has no connection to a node nextQueueToLinkCache.put(Id.create(queue.getId(), Lane.class), toLinkIdDownstreamQueues); for (ModelLane toLane : lane.getToLanes()) { Set<Id<Link>> toLinks = laneIdToLinksMap.get(toLane.getLaneData().getId()); if (toLinks == null){ toLinkIdDownstreamQueues.put(toLinkId, downstreamQueues); downstreamQueues.add(queueByIdMap.get(toLane.getLaneData().getId()));
private VisLane createVisLane(ModelLane qlane, double linkLength, double linkScale, double linkLengthCorrectionFactor) { String id = qlane.getLaneData().getId().toString(); double startPosition = (linkLength - qlane.getLaneData().getStartsAtMeterFromLinkEnd()) * linkScale * linkLengthCorrectionFactor; double endPosition = startPosition + (qlane.getLength() * linkScale * linkLengthCorrectionFactor); // log.error("lane " + qlane.getId() + " starts at: " + startPosition + " and ends at : " +endPosition); int alignment = qlane.getLaneData().getAlignment(); VisLane lane = new VisLane(id); lane.setStartPosition(startPosition); lane.setEndPosition(endPosition); lane.setAlignment(alignment); lane.setNumberOfLanes(qlane.getLaneData().getNumberOfRepresentedLanes()); return lane; }
VisLane otfLane = lanesLinkData.getLaneData().get(lane.getLaneData().getId().toString()); if (lane.getToLanes() == null || lane.getToLanes().isEmpty()){ for (Id<Link> id : lane.getLaneData().getToLinkIds()){ otfLane.addToLinkId(id.toString()); for (ModelLane toLane : lane.getToLanes()){ VisLane otfToLane = lanesLinkData.getLaneData().get(toLane.getLaneData().getId().toString()); otfLane.addToLane(otfToLane);