20 package org.matsim.lanes;
40 return new LanesImpl();
64 double startsAtMeterFromLinkEnd,
int alignment,
65 int numberOfRepresentedLanes, List<
Id<Link>> toLinkIds, List<
Id<Lane>> toLaneIds) {
68 if (toLinkIds != null){
69 for (
Id<Link> toLinkId : toLinkIds) {
73 if (toLaneIds != null){
74 for (
Id<Lane> toLaneId : toLaneIds) {
96 for (
Lane lane : l2l.getLanes().values()) {
114 List<ModelLane> queueLanes =
new ArrayList<>();
115 List<Lane> sortedLanes =
new ArrayList<>(lanesToLinkAssignment.
getLanes().values());
120 boolean l1Outgoing = l1.getToLinkIds() != null && !l1.getToLinkIds().isEmpty();
121 boolean l2Outgoing = l2.getToLinkIds() != null && !l2.getToLinkIds().isEmpty();
122 if (l1Outgoing && !l2Outgoing)
124 else if(l2Outgoing && !l1Outgoing)
130 Collections.reverse(sortedLanes);
132 List<ModelLane> laneList =
new LinkedList<>();
133 Lane firstLane = sortedLanes.remove(0);
134 if (firstLane.getStartsAtMeterFromLinkEnd() != link.
getLength()) {
135 throw new IllegalStateException(
"First Lane Id " + firstLane.getId() +
" on Link Id " + link.
getId() +
136 "isn't starting at the beginning of the link!");
139 laneList.add(firstQLane);
140 Stack<ModelLane> laneStack =
new Stack<>();
142 while (!laneList.isEmpty()){
143 ModelLane lastQLane = laneList.remove(0);
144 laneStack.push(lastQLane);
145 queueLanes.add(lastQLane);
149 double nextMetersFromLinkEnd = 0.0;
150 double laneLength = 0.0;
151 if (toLaneIds != null && (!toLaneIds.isEmpty())) {
152 for (
Id<Lane> toLaneId : toLaneIds){
153 Lane currentLane = lanesToLinkAssignment.
getLanes().get(toLaneId);
156 laneList.add(currentQLane);
157 lastQLane.addAToLane(currentQLane);
160 lastQLane.setEndsAtMetersFromLinkEnd(nextMetersFromLinkEnd);
165 lastQLane.setEndsAtMetersFromLinkEnd(0.0);
167 lastQLane.setLength(laneLength);
171 while (! laneStack.isEmpty()){
175 qLane.addDestinationLink(toLinkId);
180 for (
Id<Link> toLinkId : subsequentLane.getDestinationLinkIds()){
181 qLane.addDestinationLink(toLinkId);
187 Collections.sort(queueLanes,
new Comparator<ModelLane>() {
190 if (o1.getEndsAtMeterFromLinkEnd() < o2.getEndsAtMeterFromLinkEnd()) {
192 }
else if (o1.getEndsAtMeterFromLinkEnd() > o2.getEndsAtMeterFromLinkEnd()) {
211 if (isLaneAtLinkEnd){
216 * linkFlowCapPerSecondPerLane * 3600.0;
235 for (
Lane lane : l2l.getLanes().values()){
236 if (lane.getToLaneIds() == null || lane.getToLaneIds().isEmpty()){
245 writerDelegate.
write(lanes20OutputFilename);
250 double linkCap = net.
getLinks().get(linkLanes.getLinkId()).getCapacity();
251 for (
Lane lane : linkLanes.getLanes().values()) {
252 lane.setCapacityVehiclesPerHour(linkCap);
static void createOriginalLanesAndSetLaneCapacities(Network network, Lanes lanes)
static List< ModelLane > createLanes(Link link, LanesToLinkAssignment lanesToLinkAssignment)
void setCapacityVehiclesPerHour(double capacity)
SortedMap< Id< Link >, LanesToLinkAssignment > getLanesToLinkAssignments()
static void overwriteLaneCapacitiesByNetworkCapacities(Network net, Lanes lanes)
final NetworkConfigGroup network()
double getNumberOfRepresentedLanes()
LanesFactory getFactory()
void setLaneDefinitionsFile(final String laneDefinitions)
void setNumberOfRepresentedLanes(double number)
Lane createLane(Id< Lane > laneId)
void setInputFile(final String inputFile)
void setUseLanes(final boolean useLanes)
static void createAndAddLane(LanesToLinkAssignment l2l, LanesFactory factory, Id< Lane > laneId, double capacity, double startsAtMeterFromLinkEnd, int alignment, int numberOfRepresentedLanes, List< Id< Link >> toLinkIds, List< Id< Lane >> toLaneIds)
static Lanes createLanesContainer()
static< T > Id< T > create(final long key, final Class< T > type)
double getStartsAtMeterFromLinkEnd()
List< Id< Link > > getToLinkIds()
double getNumberOfLanes()
List< ModelLane > getToLanes()
Map< Id< Link >, ? extends Link > getLinks()
void setAlignment(int alignment)
static void calculateMissingCapacitiesForLanes20(String networkInputFilename, String lanes20InputFilename, String lanes20OutputFilename)
void setStartsAtMeterFromLinkEnd(double meter)
SortedMap< Id< Lane >, Lane > getLanes()
double getCapacityPeriod()
List< Id< Lane > > getToLaneIds()
static Scenario loadScenario(final Config config)
static void calculateAndSetCapacity(Lane lane, boolean isLaneAtLinkEnd, Link link, Network network)
void addToLaneId(Id< Lane > id)
void write(String filename)
void addToLinkId(Id< Link > id)
static Config createConfig(final String context)