MATSIM
ArrayRoutingNetworkFactory.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * ArrayRoutingNetworkFactory.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2012 by the members listed in the COPYING, *
8  * LICENSE and WARRANTY file. *
9  * email : info at matsim dot org *
10  * *
11  * *********************************************************************** *
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * See also COPYING, LICENSE and WARRANTY file *
18  * *
19  * *********************************************************************** */
20 
21 package org.matsim.core.router.util;
22 
23 import java.util.HashMap;
24 import java.util.Map;
25 
26 import org.apache.logging.log4j.LogManager;
27 import org.apache.logging.log4j.Logger;
28 import org.matsim.api.core.v01.Id;
33 
35 
36  private final static Logger log = LogManager.getLogger(ArrayRoutingNetworkFactory.class);
37 
38  private int nodeArrayIndexCounter;
39  private int linkArrayIndexCounter;
40 
41  @Override
42  public synchronized ArrayRoutingNetwork createRoutingNetwork(final Network network) {
43  this.nodeArrayIndexCounter = 0;
44  this.linkArrayIndexCounter = 0;
45 
46  ArrayRoutingNetwork routingNetwork = new ArrayRoutingNetwork(network);
47 
48  for (Node node : network.getNodes().values()) {
49  RoutingNetworkNode routingNode = createRoutingNetworkNode(node, node.getOutLinks().size());
50  routingNetwork.addNode(routingNode);
51  }
52  Map<Id<Link>, RoutingNetworkLink> routingLinks = new HashMap<Id<Link>, RoutingNetworkLink>();
53  for (Link link : network.getLinks().values()) {
54  RoutingNetworkNode fromNode = routingNetwork.getNodes().get(link.getFromNode().getId());
55  RoutingNetworkNode toNode = routingNetwork.getNodes().get(link.getToNode().getId());
56  RoutingNetworkLink dijkstraLink = createRoutingNetworkLink(link, fromNode, toNode);
57  routingLinks.put(dijkstraLink.getId(), dijkstraLink);
58  }
59 
60  for (Node node : network.getNodes().values()) {
61  RoutingNetworkLink[] outLinks = new RoutingNetworkLink[node.getOutLinks().size()];
62 
63  int i = 0;
64  for (Link outLink : node.getOutLinks().values()) {
65  outLinks[i] = routingLinks.remove(outLink.getId());
66  i++;
67  }
68 
69  RoutingNetworkNode dijkstraNode = routingNetwork.getNodes().get(node.getId());
70  dijkstraNode.setOutLinksArray(outLinks);
71  }
72 
73  if (routingLinks.size() > 0) log.warn("Not all links have been use in the ArrayRoutingNetwork - check connectivity of input network!");
74 
75  return routingNetwork;
76  }
77 
78  @Override
79  public ArrayRoutingNetworkNode createRoutingNetworkNode(final Node node, final int numOutLinks) {
80  return new ArrayRoutingNetworkNode(node, numOutLinks, this.nodeArrayIndexCounter++);
81  }
82 
83  @Override
85  return new ArrayRoutingNetworkLink(link, fromNode, toNode, this.linkArrayIndexCounter++);
86  }
87 }
Map< Id< Node >, ? extends Node > getNodes()
void setOutLinksArray(RoutingNetworkLink[] outLinks)
ArrayRoutingNetworkNode createRoutingNetworkNode(final Node node, final int numOutLinks)
Map< Id< Link >, ? extends Link > getLinks()
ArrayRoutingNetworkLink createRoutingNetworkLink(final Link link, final RoutingNetworkNode fromNode, final RoutingNetworkNode toNode)
Map< Id< Node >, RoutingNetworkNode > getNodes()
synchronized ArrayRoutingNetwork createRoutingNetwork(final Network network)