for (Map.Entry<Id<Link>, Boolean> toLinkEntry : fromLinkEntry.getValue().entrySet()) { if (toLinkEntry.getValue()) { turns.add(new TurnInfo(fromLinkId, toLinkEntry.getKey()));
for (TurnInfo allowedForOutlink : allowedTurnInfos) { TurnInfo restrictionForOutlink = getTurnInfoForOutlinkId( restrictingTurnInfos, allowedForOutlink.getToLinkId()); if (restrictionForOutlink == null) { // there is no turn at all allowed from the inLink to the outLink allowedInLinkTurnInfoMap.get(inLinkId).remove(allowedForOutlink); if (restrictionForOutlink.getModes() != null && allowedForOutlink.getModes() != null){ Set<String> commonModes = this.calculateCommonModes( restrictionForOutlink, allowedForOutlink); Set<String> allowedModes = allowedForOutlink.getModes(); for (String mode : allowedModes) { if (!commonModes.contains(mode)) { allowedForOutlink.getModes().remove(mode);
Id<Link> first = turn1.getFromLinkId(); if (first == null) { throw new IllegalArgumentException("given list contains 'null' values."); throw new IllegalArgumentException("nodeid=" + nodeId + ", linkid=" + first + ": link not an inlink of given node."); Id<Link> second = turn1.getToLinkId(); if (second == null) { throw new IllegalArgumentException("given list contains 'null' values."); Link fromLink = network.getLinks().get(turn.getFromLinkId()); Link toLink = network.getLinks().get(turn.getToLinkId()); Link l = network.getFactory().createLink(Id.create(fromLink.getId()+"-"+i, Link.class), fromLink.getToNode(), toLink.getFromNode()); double dist = CoordUtils.calcEuclideanDistance(toLink.getFromNode().getCoord(), fromLink.getToNode().getCoord()); l.setCapacity(fromLink.getCapacity()); l.setNumberOfLanes(fromLink.getNumberOfLanes()); if (turn.getModes() == null) { l.setAllowedModes(fromLink.getAllowedModes()); } else { l.setAllowedModes(turn.getModes());
turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("2", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("4", Link.class)));
turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("2", Link.class), walkOnly)); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("4", Link.class), carOnly));
turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("2", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("4", Link.class)));
turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("2", Link.class), walkOnly)); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("4", Link.class), carOnly)); turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("2", Link.class))); // u-turn turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("4", Link.class))); turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("2", Link.class), walkCar)); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("4", Link.class), walkCar)); // u-turn turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("6", Link.class), walkCar)); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("2", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("4", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("6", Link.class), emptySet)); // u-turn
turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("2", Link.class), walkOnly)); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("4", Link.class), carOnly)); turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("2", Link.class))); turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("4", Link.class))); turns.add(new TurnInfo(Id.create("1", Link.class), Id.create("6", Link.class))); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("2", Link.class), walkCar)); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("4", Link.class), walkCar)); turns.add(new TurnInfo(Id.create("3", Link.class), Id.create("6", Link.class), walkCar)); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("2", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("4", Link.class))); turns.add(new TurnInfo(Id.create("5", Link.class), Id.create("6", Link.class)));
Id<Link> id2 = Id.create("2", Link.class); TurnInfo ti1 = new TurnInfo(id1, id2); TurnInfo ti2 = new TurnInfo(id1, id2, modes1); TurnInfo ti3 = new TurnInfo(id1, id2, modes2); TurnInfo ti4 = new TurnInfo(id2, id1); TurnInfo ti5 = new TurnInfo(id2, id1, modes1); TurnInfo ti6 = new TurnInfo(id2, id1, modes2); TurnInfo ti22 = new TurnInfo(id1, id2, modes1); TurnInfo ti44 = new TurnInfo(id2, id1); Assert.assertFalse(ti1.equals(ti2)); Assert.assertFalse(ti1.equals(ti3)); Assert.assertFalse(ti1.equals(ti4)); Assert.assertFalse(ti1.equals(ti5)); Assert.assertFalse(ti1.equals(ti6)); Assert.assertFalse(ti2.equals(ti1)); Assert.assertFalse(ti2.equals(ti3)); Assert.assertFalse(ti2.equals(ti4)); Assert.assertFalse(ti2.equals(ti5)); Assert.assertFalse(ti2.equals(ti6)); Assert.assertTrue(ti2.equals(ti22)); Assert.assertTrue(ti4.equals(ti44));
private void invertNetwork(){ this.invertedNetwork = NetworkUtils.createNetwork(); int numberOfNodesGenerated = 0; int numberOfLinksGenerated = 0; for (Link link : this.originalNetwork.getLinks().values()) { NetworkUtils.createAndAddNode(this.invertedNetwork, Id.create(link.getId(), Node.class), link.getToNode().getCoord()); numberOfNodesGenerated++; } for (Node node : this.originalNetwork.getNodes().values()) { for (Link inLink : node.getInLinks().values()) { for (Link outLink : node.getOutLinks().values()) { List<TurnInfo> turnInfos = this.inLinkTurnInfoMap.get(inLink.getId()); TurnInfo ti = NetworkTurnInfoBuilder.getTurnInfoForOutlinkId(turnInfos, outLink.getId()); if (ti != null){ numberOfLinksGenerated = this.createInvertedLink(inLink, outLink, numberOfLinksGenerated, ti.getModes()); } } } } log.info("Generated " + numberOfNodesGenerated + " Nodes and " + numberOfLinksGenerated + " Links"); // Debug only // NetworkWriter myNetworkWriter = new NetworkWriter(wrappedNetwork, // "wrappedNetwork"); // myNetworkWriter.write(); }
public static Map<Id<Link>, List<TurnInfo>> createSignalsTurnInfos(SignalSystemsData ssd) { Map<Id<Link>, List<TurnInfo>> inLinkIdTurnInfoMap = new HashMap<Id<Link>, List<TurnInfo>>(); for (SignalSystemData signalSystem : ssd.getSignalSystemData().values()){ for (SignalData signal : signalSystem.getSignalData().values()){ if (signal.getTurningMoveRestrictions() != null && ! signal.getTurningMoveRestrictions().isEmpty()){ if (warnCount < 1){ log.warn("Turning move restrictions for signals are implemented for TransportMode.car only, yet!"); warnCount++; } if (!inLinkIdTurnInfoMap.containsKey(signal.getLinkId())){ inLinkIdTurnInfoMap.put(signal.getLinkId(), new ArrayList<TurnInfo>()); } Set<String> modeCar = new HashSet<String>(); modeCar.add(TransportMode.car); for (Id<Link> toLinkId : signal.getTurningMoveRestrictions()){ TurnInfo ti = new TurnInfo(signal.getLinkId(), toLinkId, modeCar); inLinkIdTurnInfoMap.get(signal.getLinkId()).add(ti); } } } } return inLinkIdTurnInfoMap; } }
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; }
/** * Linear search for the TurnInfo describing the turn to the outLinkId */ static TurnInfo getTurnInfoForOutlinkId(List<TurnInfo> turnInfoList, Id<Link> outLinkId) { for (TurnInfo ti : turnInfoList) { if (ti.getToLinkId().equals(outLinkId)) { return ti; } } return null; }