20 package org.matsim.core.network.algorithms;
22 import com.google.inject.Inject;
33 import java.util.ArrayList;
34 import java.util.HashMap;
35 import java.util.HashSet;
36 import java.util.List;
58 Map<Id<Link>, List<TurnInfo>> allowedInLinkTurnInfoMap =
new HashMap<>();
68 return allowedInLinkTurnInfoMap;
73 Map<Id<Link>, List<TurnInfo>> inLinkIdTurnInfoMap =
new HashMap<>();
74 Set<Id<Link>> toLinkIds =
new HashSet<>();
77 for (
Lane lane : l2l.getLanes().values()) {
78 if (lane.getToLinkIds() != null
79 && (lane.getToLaneIds() == null || lane.getToLaneIds().isEmpty())) {
80 toLinkIds.addAll(lane.getToLinkIds());
83 if (!toLinkIds.isEmpty()) {
84 List<TurnInfo> turnInfoList =
new ArrayList<TurnInfo>();
85 for (
Id<Link> toLinkId : toLinkIds) {
86 turnInfoList.add(
new TurnInfo(l2l.getLinkId(), toLinkId));
88 inLinkIdTurnInfoMap.put(l2l.getLinkId(), turnInfoList);
92 return inLinkIdTurnInfoMap;
103 Set<String> modes = null;
104 List<TurnInfo> turnInfosForInLink = null;
106 for (
Link inLink : node.getInLinks().values()) {
107 turnInfosForInLink = inLinkTurnInfoMap.get(inLink.getId());
108 if (turnInfosForInLink == null) {
109 turnInfosForInLink =
new ArrayList<TurnInfo>();
110 inLinkTurnInfoMap.put(inLink.getId(), turnInfosForInLink);
113 for (
Link outLink : node.getOutLinks().values()) {
114 if (! inLink.getAllowedModes().isEmpty() && ! outLink.getAllowedModes().isEmpty()) {
115 if (inLink.getAllowedModes().contains(mode) && outLink.getAllowedModes().contains(mode)) {
116 modes =
new HashSet<String>();
118 turnInfo =
new TurnInfo(inLink.getId(), outLink.getId(), modes);
119 turnInfosForInLink.add(turnInfo);
123 turnInfo =
new TurnInfo(inLink.getId(), outLink.getId());
124 turnInfosForInLink.add(turnInfo);
138 Map<
Id<Link>, List<TurnInfo>> restrictingTurnInfoMap) {
139 for (Map.Entry<
Id<Link>, List<TurnInfo>> e : allowedInLinkTurnInfoMap.entrySet()) {
141 List<TurnInfo> restrictingTurnInfos = restrictingTurnInfoMap.
get(inLinkId);
143 if (restrictingTurnInfos != null) {
144 List<TurnInfo> allowedTurnInfos =
new ArrayList<TurnInfo>(e.getValue());
145 for (
TurnInfo allowedForOutlink : allowedTurnInfos) {
146 TurnInfo restrictionForOutlink = getTurnInfoForOutlinkId(
147 restrictingTurnInfos, allowedForOutlink.getToLinkId());
148 if (restrictionForOutlink == null) {
149 allowedInLinkTurnInfoMap.get(inLinkId).remove(allowedForOutlink);
152 if (restrictionForOutlink.
getModes() != null && allowedForOutlink.getModes() != null){
154 restrictionForOutlink, allowedForOutlink);
155 Set<String> allowedModes = allowedForOutlink.getModes();
156 for (String mode : allowedModes) {
157 if (!commonModes.contains(mode)) {
158 allowedForOutlink.getModes().remove(mode);
171 static TurnInfo getTurnInfoForOutlinkId(List<TurnInfo> turnInfoList,
Id<Link> outLinkId) {
173 if (ti.getToLinkId().equals(outLinkId)) {
181 Set<String> modes =
new HashSet<String>();
182 for (String mode : first.
getModes()) {
183 if (second.
getModes().contains(mode)) {
static< T > Id< T > get(int index, final Class< T > type)
Map< Id< Node >, ? extends Node > getNodes()
SortedMap< Id< Link >, LanesToLinkAssignment > getLanesToLinkAssignments()
final NetworkConfigGroup network()
Map< Id< Link >, List< TurnInfo > > createAllowedTurnInfos()
void createAndAddTurnInfo(String mode, Map< Id< Link >, List< TurnInfo >> inLinkTurnInfoMap)
NetworkTurnInfoBuilder(Scenario scenario)
String getLaneDefinitionsFile()
Set< String > calculateCommonModes(TurnInfo first, TurnInfo second)
Map< Id< Link >, List< TurnInfo > > createTurnInfos(Lanes laneDefs)
final void mergeTurnInfoMaps(Map< Id< Link >, List< TurnInfo >> allowedInLinkTurnInfoMap, Map< Id< Link >, List< TurnInfo >> restrictingTurnInfoMap)