21 package org.matsim.core.network.algorithms;
48 if (network == null) {
49 throw new IllegalArgumentException(
"network must not be null.");
52 this.setExpRadius(expRadius);
53 this.setOffset(offset);
60 void setExpRadius(
final double expRadius) {
61 if (Double.isNaN(expRadius)) {
62 throw new IllegalArgumentException(
"expansion radius must not be NaN.");
65 this.dist = Math.sqrt(this.expRadius * this.expRadius - this.offset * this.offset);
72 void setOffset(
final double offset) {
73 if (Double.isNaN(offset)) {
74 throw new IllegalArgumentException(
"expansion offset must not be NaN.");
77 this.dist = Math.sqrt(this.expRadius * this.expRadius - this.offset * this.offset);
181 throw new IllegalArgumentException(
"nodeid="+nodeId+
": not found in the network.");
184 throw new IllegalArgumentException(
"nodeid="+nodeId+
": turn list not defined!");
188 Id<Link> first = turn1.getFromLinkId();
190 throw new IllegalArgumentException(
"given list contains 'null' values.");
193 throw new IllegalArgumentException(
"nodeid=" + nodeId +
", linkid=" + first +
": link not an inlink of given node.");
195 Id<Link> second = turn1.getToLinkId();
196 if (second == null) {
197 throw new IllegalArgumentException(
"given list contains 'null' values.");
200 throw new IllegalArgumentException(
"nodeid=" + nodeId +
", linkid=" + second +
": link not an outlink of given node.");
209 ArrayList<Node> newNodes =
new ArrayList<>(inlinks.size()+outlinks.size());
210 ArrayList<Link> newLinks =
new ArrayList<>(turns.size());
213 double d = this.
dist;
214 for (
Link inlink : inlinks.values()) {
216 Coord p = inlink.getFromNode().getCoord();
219 if (Math.abs(lcp) < 1e-8) {
223 double dx = cp.
getX() / lcp;
224 double dy = cp.
getY() / lcp;
225 double x = c.
getX() + d * dx - e * dy;
226 double y = c.
getY() + d * dy + e * dx;
242 for (
Link outlink : outlinks.values()) {
244 Coord p = outlink.getToNode().getCoord();
247 if (Math.abs(lcp) < 1e-8) {
251 double dx = cp.
getX() / lcp;
252 double dy = cp.
getY() / lcp;
253 double x = c.
getX() + d * dx + e * dy;
254 double y = c.
getY() + d * dy - e * dx;
271 for (
int i=0; i<turns.size(); i++) {
277 if (dist < 0.1 * this.expRadius) {
318 Map<Id<Link>, Map<Id<Link>, Set<String>>> allTurns =
new HashMap<>();
321 Map<Id<Link>, Set<String>> t2 =
new HashMap<>();
323 if (inLink.getFromNode() != outLink.getToNode() || !ignoreUTurns) {
324 HashSet<String> modes =
new HashSet<>();
325 modes.addAll(inLink.getAllowedModes());
326 modes.retainAll(outLink.getAllowedModes());
327 t2.put(outLink.getId(), modes);
330 allTurns.put(inLink.getId(), t2);
339 Map<Id<Link>, Set<String>> t2 = allTurns.
get(from);
341 Set<String> modes = t2.get(to);
343 if (ti.getModes() == null) {
348 modes.removeAll(ti.getModes());
355 for (Map<
Id<Link>, Set<String>> m : allTurns.values()) {
356 for (Set<String> modes : m.values()) {
357 if (modes.size() > 0) {
402 return (ti.
fromLinkId.equals(
this.fromLinkId))
403 && (ti.
toLinkId.equals(
this.toLinkId))
404 && ((ti.
modes == null &&
this.modes == null)
405 || (ti.
modes != null && ti.
modes.equals(this.modes))
411 return this.fromLinkId.hashCode() & this.toLinkId.hashCode() & this.modes.hashCode();
static void setOrigId(final Node node, final String id)
void setNumberOfLanes(double lanes)
static< T > Id< T > get(int index, final Class< T > type)
final Id< Link > fromLinkId
Map< Id< Node >, ? extends Node > getNodes()
void setFreespeed(double freespeed)
TurnInfo(final Id< Link > fromLinkId, final Id< Link > toLinkId, final Set< String > modes)
static double calcEuclideanDistance(Coord coord, Coord other)
boolean turnsAreSameAsSingleNode(final Id< Node > nodeId, final List< TurnInfo > turns, final boolean ignoreUTurns)
Node removeNode(final Id< Node > nodeId)
Map< Id< Link >, ? extends Link > getInLinks()
static String getOrigId(Node node)
NetworkFactory getFactory()
final Tuple< List< Node >, List< Link > > expandNode(final Id< Node > nodeId, final List< TurnInfo > turns)
static< T > Id< T > create(final long key, final Class< T > type)
Id< Link > getFromLinkId()
boolean equals(Object obj)
static String getType(Node node)
Link createLink(final Id< Link > id, final Node fromNode, final Node toNode)
void setLength(double length)
NetworkExpandNode(final Network network, final double expRadius, final double offset)
double getNumberOfLanes()
Map< Id< Link >, ? extends Link > getLinks()
Node createNode(final Id< Node > id, final Coord coord)
final Set< String > modes
static void setType(Node node, final String type)
void setAllowedModes(Set< String > modes)
TurnInfo(final Id< Link > fromLinkId, final Id< Link > toLinkId)
Map< Id< Link >, ? extends Link > getOutLinks()
final Id< Link > toLinkId
void setCapacity(double capacity)
Set< String > getAllowedModes()