de.cm.osm2po.routing
Class OverlayNode
java.lang.Object
de.cm.osm2po.routing.OverlayNode
public class OverlayNode
- extends java.lang.Object
Diese Klasse repraesentiert einen geografischen Punkt
auf dem OverlayGraph
en.
Dies kann a) ein Vertex, b) ein beliebiger Punkt auf einer Edge
oder c) eine voellig losgeloeste Koordinate sein.
Wichtig:
Da unterschiedliche Knoten gleiche Koordinaten besitzen koennen,
wird die Eindeutigkeit ueber die EdgeIdx (Kante) und der Ratio
(Relative Position auf der Kante) hergestellt. Rueckwaertskanten,
auf denen Knoten ebenfalls liegen, sind daher unzulaessig und
werden falls moeglich durch ihre Vorwaerts-Varianten ersetzt.
Dies ist vor allem deshalb notwendig, da bei einer Aufsplittung
einer Kante durch mehr als einen Knoten die Reihenfolge definiert
sein muss und sich eine solche Aktion nicht auf zwei faktisch
identische Kanten beziehen kann, die sich lediglich in der Richtung
unterscheiden.
Handelt es sich hingegen um einen echten Vertex, also einer
Kreuzung, dann wird die originale VertexId fuer die Eindeutigkeit
herangezogen.
- Author:
- (c) 2012/2014 - Carsten Moeller - info@osm2po.de
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
OverlayNode
public OverlayNode(int vertexId)
OverlayNode
public OverlayNode(float lat,
float lon)
setId
protected void setId(int id)
setLat
protected void setLat(float lat)
setLon
protected void setLon(float lon)
isOnVertex
public boolean isOnVertex()
isOnEdge
public boolean isOnEdge()
isDetached
public boolean isDetached()
isInserted
public boolean isInserted()
getId
public int getId()
getLat
public float getLat()
getLon
public float getLon()
getEdgeIdx
public int getEdgeIdx()
getEdgePointIdx
public int getEdgePointIdx()
isPoint
public boolean isPoint()
getRatio
public double getRatio()
copy
public OverlayNode copy()
snap
public boolean snap(Graph graph,
int[] edgeIdxs)
- Findet den dichteste Beruehrungspunkt auf dem Original-Graphen
und verschiebt diesen Punkt dorthin.
Handelt es sich um einen Vertex-Stellvertreter, der mittels
OverlayNode(int)
erzeugt wurde, so werden lediglich die
Koordinaten gesetzt und dabei implizit die Id selbst validiert.
- Parameters:
graph
- Graph
edgeIdxs
- int[] Array von EdgeIdx, NULLABLE.
- Returns:
- boolean gefunden und verschoben, ja/nein.
Wichtig:
Diese Methode modifiziert interne Members. Soll das Original
beibehalten werden, so sollte vorher copy()
ausgefuehrt
werden.
Wird der Parameter edgeIdxs=null gesetzt, so werden ca. 100
beliebige Edges mittels Graph.findCloseEdges(float, float, int)
untersucht. Sollten jedoch nur bestimmte Edge-Typen infrage kommen,
so kann hier ggf. eine reduzierte Suchmenge gesetzt werden.
createOverlayEdge
public static OverlayEdge createOverlayEdge(Graph graph,
OverlayNode ndSource,
OverlayNode ndTarget)
- Ermittelt, ob zwischen zwei OverlayNodes eine direkte Verbindung
existiert - beide also auf der gleichen Kante liegen und liefert
den ggf. neu entstandenen Abschnitt als OverlayEdge zurueck.
- Parameters:
graph
- Graph
ndSource
- OverlayNode
StartndTarget
- OverlayNode
Ziel
- Returns:
- Verbindung als
OverlayEdge
oder null, wenn keine.
Wichtig:
Diese Methode liefert nur dann ein Ergebnis, wenn source oder/und target
echte virutelle Punkte sind und einer Edge zugeordnet werden koennen
(edgeIdx != 0). Ferner muss die Reihenfolge beachtet werden, da
diese Klasse nur Vorwaerts-Edges verarbeitet und somit
ratio(source) < ratio(target) sein muss.
Eine OverlayEdge speichert keine OverlayNodes, sondern nur deren IDs,
daher sollten diese vorher gesetzt sein.
toString
public java.lang.String toString()
- Overrides:
toString
in class java.lang.Object