public static Map<Id<Link>, ? extends Link> getIncidentLinks(Node node) { Map<Id<Link>, Link> links = new TreeMap<>(node.getInLinks()); links.putAll(node.getOutLinks()); return links; }
public static Map<Id<Node>, ? extends Node> getInNodes(Node node) { Map<Id<Node>, Node> nodes = new TreeMap<>(); for (Link link : node.getInLinks().values()) { Node inNode = link.getFromNode(); nodes.put(inNode.getId(), inNode); } return nodes; }
/** * Removes nodes from the network that have no incoming or outgoing links attached to them. */ public void removeNodesWithoutLinks() { List<Node> toBeRemoved = new ArrayList<>(); for (Node node : this.network.getNodes().values()) { if ((node.getInLinks().size() == 0) && (node.getOutLinks().size() == 0)) { toBeRemoved.add(node); } } for (Node node : toBeRemoved) { this.network.removeNode(node.getId()); } }
private int getNOfIncidentNodes(final Node node) { HashMap<Id<Node>, Node> nodes = new HashMap<>(); for (Link link : node.getInLinks().values()) { nodes.put(link.getFromNode().getId(), link.getFromNode()); } for (Link link : node.getOutLinks().values()) { nodes.put(link.getToNode().getId(), link.getToNode()); } return nodes.size(); } }
@Override public void run(final Network network) { Set<Node> nodesToRemove; if (this.cutType == CutType.RECTANGLE) nodesToRemove = rectangularCut(network); else if (this.cutType == CutType.CIRCLE) nodesToRemove = circularCut(network); else return; int nofLinksRemoved = 0; for (Node n : nodesToRemove) { nofLinksRemoved += n.getInLinks().size() + n.getOutLinks().size(); network.removeNode(n.getId()); } log.info("number of nodes removed: "+nodesToRemove.size()); log.info("number of links removed: "+nofLinksRemoved); log.info("number of nodes remaining: "+network.getNodes().size()); log.info("number of links remaining: "+network.getLinks().size()); }
/** * Loads the inLinks-array with the corresponding links. * Cannot be called in constructor, as the queueNetwork does not yet know * the queueLinks. Should be called by QueueNetwork, after creating all * QueueNodes and QueueLinks. */ @Override public void init() { int i = 0; for (Link l : this.node.getInLinks().values()) { QNetwork network = netsimEngine.getNetsimNetwork() ; this.inLinksArrayCache[i] = network.getNetsimLinks().get(l.getId()); i++; } /* As the order of links has an influence on the simulation results, * the nodes are sorted to avoid indeterministic simulations. dg[april08] */ Arrays.sort(this.inLinksArrayCache, new Comparator<NetsimLink>() { @Override public int compare(NetsimLink o1, NetsimLink o2) { return o1.getLink().getId().compareTo(o2.getLink().getId()); } }); }
private static Map<Id<Node>, Node> getIncidentNodes(Node node) { Map<Id<Node>, Node> nodes = new TreeMap<>(); for (Link link : node.getInLinks().values()) { nodes.put(link.getFromNode().getId(), link.getFromNode()); } for (Link link : node.getOutLinks().values()) { nodes.put(link.getToNode().getId(), link.getToNode()); } return nodes; }
buffer.append(NetworkFeatureFactory.STARTP); buffer.append(STARTUL); for (Link l : n.getInLinks().values()) { buffer.append(STARTLI); buffer.append("Link: " );
private QNodeImpl(final Node n, NetsimEngineContext context, NetsimInternalInterface netsimEngine2, TurnAcceptanceLogic turnAcceptanceLogic) { this.node = n; this.netsimEngine = netsimEngine2 ; this.context = context ; this.turnAcceptanceLogic = turnAcceptanceLogic; int nofInLinks = this.node.getInLinks().size(); this.inLinksArrayCache = new QLinkI[nofInLinks]; this.tempLinks = new QLinkI[nofInLinks]; if (this.context.qsimConfig.getNumberOfThreads() > 1) { // This could just as well be the "normal" case. The second alternative // is just there so some scenarios / test cases stay // "event-file-compatible". Consider removing the second alternative. this.random = MatsimRandom.getLocalInstance(); } else { this.random = MatsimRandom.getRandom(); } }
@Override public Node removeNode(final Id<Node> nodeId) { Node n = this.nodes.remove(nodeId); if (n == null) { return null; } HashSet<Link> links1 = new HashSet<>(); links1.addAll(n.getInLinks().values()); links1.addAll(n.getOutLinks().values()); for (Link l : links1) { removeLink(l.getId()); } if (this.nodeQuadTree != null) { this.nodeQuadTree.remove(n.getCoord().getX(),n.getCoord().getY(),n); } return n; }
private void expandLandmarkTo() { LandmarksToTravelTimeComparator comparator = new LandmarksToTravelTimeComparator(this.nodeData, this.landmarkIdx); PriorityQueue<Node> pendingNodes = new PriorityQueue<>(100, comparator); LandmarksData role = (LandmarksData) this.nodeData.get(this.landmark); role.setToLandmarkTravelTime(this.landmarkIdx, 0.0); role.setFromLandmarkTravelTime(this.landmarkIdx, 0.0); pendingNodes.add(this.landmark); while (!pendingNodes.isEmpty()) { Node node = pendingNodes.poll(); double toTravTime = ((LandmarksData) this.nodeData.get(node)).getToLandmarkTravelTime(this.landmarkIdx); LandmarksData role2; for (Link l : node.getInLinks().values()) { Node n = l.getFromNode(); double linkTravTime = this.costFunction.getLinkMinimumTravelDisutility(l); role2 = (LandmarksData) this.nodeData.get(n); double totalTravelTime = toTravTime + linkTravTime; if (role2.getToLandmarkTravelTime(this.landmarkIdx) > totalTravelTime) { role2.setToLandmarkTravelTime(this.landmarkIdx, totalTravelTime); pendingNodes.add(n); } } } }
RoutingNetworkNode routingNode = createRoutingNetworkNode(node, node.getInLinks().size()); routingNetwork.addNode(routingNode); RoutingNetworkLink[] outLinks = new RoutingNetworkLink[node.getInLinks().size()]; for (Link inLink : node.getInLinks().values()) { outLinks[i] = routingLinks.remove(inLink.getId()); i++;
private Node getLandmark(final ArrayList<Node> nodes, final double[] angles) { double maxDist = Double.NEGATIVE_INFINITY; Node landmark = null; for (Node node : nodes) { if ((node.getOutLinks().size() > 1 && node.getInLinks().size() > 1) || landmark == null) { double x = node.getCoord().getX() - this.center.getX(); double y = node.getCoord().getY() - this.center.getY(); double angle = Math.atan2(y, x) + Math.PI; double minAngelToBorder = 0; if (angle - angles[0] < angles[1] - angle) { minAngelToBorder = angle - angles[0]; } else { minAngelToBorder = angles[1] - angle; } double distApprox = Math.sqrt(x * x + y * y) * (1 + minAngelToBorder / (2 * Math.PI)); // Set the node that is farthest away from the center to be the landmark in the current sector if (distApprox > maxDist) { landmark = node; maxDist = distApprox; } } } return landmark; }
List<TurnInfo> turnInfosForInLink = null; for (Node node : scenario.getNetwork().getNodes().values()) { for (Link inLink : node.getInLinks().values()) { turnInfosForInLink = inLinkTurnInfoMap.get(inLink.getId()); if (turnInfosForInLink == null) {
if ( nearestNode.getInLinks().isEmpty() && nearestNode.getOutLinks().isEmpty() ) { log.warn(network + "[found nearest node that has no incident links. Will probably crash eventually ... Maybe run NetworkCleaner?]" ) ;
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(); }
PreProcessDijkstra.DeadEndData ddOutData = getPreProcessData(outNode); for (Link l : outNode.getInLinks().values()) { if (canPassLink(l)) { for (Link l : outNode.getInLinks().values()) { if (canPassLink(l)) {
@Test public void removeLink() { Fixture f = new Fixture(getEmptyTestNetwork()); Assert.assertTrue(f.network.getLinks().containsKey(f.linkIds[1])); Assert.assertEquals(1, f.network.getNodes().get(f.nodeIds[1]).getInLinks().size()); f.network.removeLink(f.linkIds[1]); Assert.assertFalse(f.network.getLinks().containsKey(f.linkIds[1])); Assert.assertEquals(0, f.network.getNodes().get(f.nodeIds[1]).getInLinks().size()); Assert.assertEquals(1, f.network.getNodes().get(f.nodeIds[1]).getOutLinks().size()); Assert.assertTrue(f.network.getLinks().containsKey(f.linkIds[2])); f.network.removeLink(f.linkIds[2]); Assert.assertFalse(f.network.getLinks().containsKey(f.linkIds[2])); Assert.assertTrue(f.network.getNodes().containsKey(f.nodeIds[1])); Assert.assertEquals(0, f.network.getNodes().get(f.nodeIds[1]).getOutLinks().size()); Assert.assertEquals(2, f.network.getNodes().get(f.nodeIds[5]).getOutLinks().size()); Assert.assertEquals(2, f.network.getNodes().get(f.nodeIds[8]).getInLinks().size()); f.network.removeLink(f.linkIds[10]); Assert.assertEquals(1, f.network.getNodes().get(f.nodeIds[5]).getOutLinks().size()); Assert.assertEquals(1, f.network.getNodes().get(f.nodeIds[8]).getInLinks().size()); }
@Test public void removeNode() { Fixture f = new Fixture(getEmptyTestNetwork()); Assert.assertEquals(8, f.network.getNodes().size()); Assert.assertEquals(12, f.network.getLinks().size()); Assert.assertTrue(f.network.getLinks().containsKey(f.linkIds[1])); Assert.assertTrue(f.network.getLinks().containsKey(f.linkIds[2])); Assert.assertTrue(f.network.getNodes().containsKey(f.nodeIds[1])); f.network.removeNode(f.nodeIds[1]); Assert.assertEquals(7, f.network.getNodes().size()); Assert.assertEquals(10, f.network.getLinks().size()); Assert.assertFalse(f.network.getLinks().containsKey(f.linkIds[1])); Assert.assertFalse(f.network.getLinks().containsKey(f.linkIds[2])); Assert.assertFalse(f.network.getNodes().containsKey(f.nodeIds[1])); Assert.assertFalse(f.network.getNodes().get(f.nodeIds[4]).getOutLinks().containsKey(f.linkIds[1])); Assert.assertTrue(f.network.getNodes().get(f.nodeIds[4]).getOutLinks().containsKey(f.linkIds[5])); Assert.assertTrue(f.network.getNodes().get(f.nodeIds[4]).getOutLinks().containsKey(f.linkIds[7])); f.network.removeNode(f.nodeIds[8]); Assert.assertEquals(6, f.network.getNodes().size()); Assert.assertEquals(6, f.network.getLinks().size()); Assert.assertFalse(f.network.getLinks().containsKey(f.linkIds[8])); Assert.assertFalse(f.network.getLinks().containsKey(f.linkIds[9])); Assert.assertFalse(f.network.getNodes().containsKey(f.nodeIds[10])); Assert.assertFalse(f.network.getNodes().containsKey(f.nodeIds[11])); Assert.assertFalse(f.network.getNodes().get(f.nodeIds[5]).getOutLinks().containsKey(f.linkIds[10])); Assert.assertTrue(f.network.getNodes().get(f.nodeIds[5]).getOutLinks().containsKey(f.linkIds[6])); Assert.assertFalse(f.network.getNodes().get(f.nodeIds[5]).getInLinks().containsKey(f.linkIds[9])); Assert.assertTrue(f.network.getNodes().get(f.nodeIds[5]).getInLinks().containsKey(f.linkIds[3])); }
@Test public void testFilter_AdditionalModes() { final Fixture f = new Fixture(); TransportModeNetworkFilter filter = new TransportModeNetworkFilter(f.scenario.getNetwork()); Network subNetwork = ScenarioUtils.createScenario(ConfigUtils.createConfig()).getNetwork(); filter.filter(subNetwork, createHashSet(TransportMode.walk, TransportMode.pt, "motorbike")); Assert.assertEquals("wrong number of nodes.", 5, subNetwork.getNodes().size()); Assert.assertEquals("wrong number of links", 4, subNetwork.getLinks().size()); Assert.assertTrue(subNetwork.getLinks().containsKey(f.linkIds[13])); Assert.assertTrue(subNetwork.getLinks().containsKey(f.linkIds[14])); Assert.assertTrue(subNetwork.getLinks().containsKey(f.linkIds[15])); Assert.assertTrue(subNetwork.getLinks().containsKey(f.linkIds[16])); Assert.assertTrue(subNetwork.getNodes().containsKey(f.nodeIds[1])); Assert.assertTrue(subNetwork.getNodes().containsKey(f.nodeIds[4])); Assert.assertTrue(subNetwork.getNodes().containsKey(f.nodeIds[7])); Assert.assertTrue(subNetwork.getNodes().containsKey(f.nodeIds[10])); Assert.assertTrue(subNetwork.getNodes().containsKey(f.nodeIds[13])); Assert.assertEquals(f.modesW, subNetwork.getLinks().get(f.linkIds[13]).getAllowedModes()); Assert.assertEquals(f.modesW, subNetwork.getLinks().get(f.linkIds[14]).getAllowedModes()); Assert.assertEquals(f.modesW, subNetwork.getLinks().get(f.linkIds[15]).getAllowedModes()); Assert.assertEquals(f.modesW, subNetwork.getLinks().get(f.linkIds[16]).getAllowedModes()); Assert.assertEquals(1, subNetwork.getNodes().get(f.nodeIds[4]).getInLinks().size()); Assert.assertNotNull(subNetwork.getNodes().get(f.nodeIds[4]).getInLinks().get(f.linkIds[13])); Assert.assertEquals(1, subNetwork.getNodes().get(f.nodeIds[4]).getOutLinks().size()); Assert.assertNotNull(subNetwork.getNodes().get(f.nodeIds[4]).getOutLinks().get(f.linkIds[14])); }