de.cm.osm2po.routing
Class OverlayNode

java.lang.Object
  extended by de.cm.osm2po.routing.OverlayNode

public class OverlayNode
extends java.lang.Object

Diese Klasse repraesentiert einen geografischen Punkt auf dem OverlayGraphen.
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

Constructor Summary
OverlayNode(float lat, float lon)
           
OverlayNode(int vertexId)
           
 
Method Summary
 OverlayNode copy()
           
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.
 int getEdgeIdx()
           
 int getEdgePointIdx()
           
 int getId()
           
 float getLat()
           
 float getLon()
           
 double getRatio()
           
 boolean isDetached()
           
 boolean isInserted()
           
 boolean isOnEdge()
           
 boolean isOnVertex()
           
 boolean isPoint()
           
protected  void setId(int id)
           
protected  void setLat(float lat)
           
protected  void setLon(float lon)
           
 boolean snap(Graph graph, int[] edgeIdxs)
          Findet den dichteste Beruehrungspunkt auf dem Original-Graphen und verschiebt diesen Punkt dorthin.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

OverlayNode

public OverlayNode(int vertexId)

OverlayNode

public OverlayNode(float lat,
                   float lon)
Method Detail

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 Start
ndTarget - 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

osm2po-core-5.0.0 (c) December 24 2014 Carsten Moeller - info@osm2po.de