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; }
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.setLaneId(laneId); builder.setLength(lane.getLength()); builder.setEffectiveNumberOfLanes(lane.getLaneData().getNumberOfRepresentedLanes()); builder.setFlowCapacity_s(lane.getLaneData().getCapacityVehiclesPerHour() / 3600.); QLaneI queue = builder.createLane(this); toLinkIds.addAll(lane.getLaneData().getToLinkIds()); laneIdToLinksMap.put(laneId, toLinkIds); } else { // lane is within the link and has no connection to a node 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()));
List<Id<Lane>> toLaneIds = lastQLane.getLaneData().getToLaneIds(); double nextMetersFromLinkEnd = 0.0; double laneLength = 0.0; lastQLane.addAToLane(currentQLane); laneLength = lastQLane.getLaneData().getStartsAtMeterFromLinkEnd() - nextMetersFromLinkEnd; lastQLane.setEndsAtMetersFromLinkEnd(nextMetersFromLinkEnd); laneLength = lastQLane.getLaneData().getStartsAtMeterFromLinkEnd(); lastQLane.setEndsAtMetersFromLinkEnd(0.0); ModelLane qLane = laneStack.pop(); if (qLane.getToLanes() == null || (qLane.getToLanes().isEmpty())) { for (Id<Link> toLinkId : qLane.getLaneData().getToLinkIds()){ qLane.addDestinationLink(toLinkId);
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()); VisLane otfToLane = lanesLinkData.getLaneData().get(toLane.getLaneData().getId().toString()); otfLane.addToLane(otfToLane);