21 package org.matsim.core.network.algorithms.intersectionSimplifier;
23 import org.apache.logging.log4j.LogManager;
24 import org.apache.logging.log4j.Logger;
56 if (this.djc != null) {
57 LOG.error(
"This NetworkSimplifier has already been used to simplify a network!");
61 LOG.info(
"Simplifying the intersections...");
66 List<Node> nodes =
new ArrayList<>();
74 LOG.info(
"Clustering the network nodes...");
77 LOG.info(
"Done clustering.");
84 LOG.info(
"Populating QuadTree with clustered points.");
90 for (
Cluster cluster : clusters) {
93 SortedSet<String> nodeIdsInCluster =
new TreeSet<>();
95 nodeIdsInCluster.add(nodeInCluster.getNode().getId().toString());
97 StringBuilder clusteredNodeName =
new StringBuilder();
98 for (String nodeInCluster : nodeIdsInCluster) {
100 if (!clusteredNodeName.isEmpty()) {
101 clusteredNodeName.append(
'-');
103 clusteredNodeName.append(nodeInCluster);
109 Coord clusterPointCoord = clusterPoint.getCoord();
110 clusteredNodes.
put(clusterPointCoord.
getX(), clusterPointCoord.
getY(), newNode);
111 mergedNodeId2clusterNode.put(clusterPoint.getNode().getId(), newNode);
114 LOG.info(
"Done populating QuadTree. Number of nodes affected: " + clusteredNodes.
size());
125 Node newFromNode = fromCentroid != null ? fromCentroid : fromNode;
126 Node newToNode = toCentroid != null ? toCentroid : toNode;
131 link.getId(), newFromNode, newToNode, newNetwork,
132 link.getLength(), link.getFreespeed(), link.getCapacity(), link.getNumberOfLanes());
144 if (!newNetwork.getNodes().containsKey(newLink.
getToNode().
getId())) {
148 newLink.
setToNode(newNetwork.getNodes().get(newToNode.getId()));
149 newNetwork.addLink(newLink);
154 String oldName = network.
getName();
155 if (oldName != null) {
156 oldName += oldName.endsWith(
".") ?
" Simplified." :
". Simplified.";
159 LOG.warn(
"The given network does not have a description. This makes reproducibility hard!");
162 LOG.info(
"Done simplifying the intersections");
173 return mergedNodeId2clusterNode.get(node.
getId());
182 if (this.djc == null) {
183 LOG.info(
"Density-based clustering has not been run yet. Cannot write to file.");
194 if (this.djc == null) {
195 LOG.warn(
"The network has not been simplified yet. Returning 0 clusters");
196 return new ArrayList<>(0);
205 LOG.info(
"--- Network statistics: ------------------------------------------------------");
206 LOG.info(
" Network description: " + network.
getName());
207 LOG.info(
" Number of nodes: " + network.
getNodes().size());
208 LOG.info(
" Number of links: " + network.
getLinks().size());
209 LOG.info(
"------------------------------------------------------------------------------");
void setName(String name)
Map< Id< Node >, ? extends Node > getNodes()
static Node createAndAddNode(Network network, final Id< Node > id, final Coord coord)
static Link createLink(Id< Link > id, Node from, Node to, Network network, double length, double freespeed, double capacity, double lanes)
NetworkFactory getFactory()
void writeClustersToFile(String filename)
static void reportNetworkStatistics(Network network)
List< Cluster > getClusters()
void writeClustersToFile(String file)
boolean setToNode(Node node)
static Network createNetwork()
boolean put(final double x, final double y, final T value)
QuadTree< ClusterActivity > getClusteredPoints()
boolean equals(final Object other)
Map< Id< Link >, ? extends Link > getLinks()
Node createNode(final Id< Node > id, final Coord coord)
IntersectionSimplifier(double pmin, int epsilon)
boolean setFromNode(Node node)
final Map< Id< Node >, Node > mergedNodeId2clusterNode
void setAllowedModes(Set< String > modes)
List< Cluster > getClusterList()
void clusterInput(double radius, int minimumPoints)
static Node createNode(Id< Node > id)
Network simplify(Network network)
Node getClusteredNode(Node node)
static Id< Node > createNodeId(final long key)