de.cm.osm2po.routing
Class Graph

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

public class Graph
extends java.lang.Object

Graph / Topologie fuer das osm2po-Routing. Liest eine *.gph und stellt diese fuer ein beliebiges Routing zur Verfuegung.

Author:
(c) 2012 - Carsten Moeller - info@osm2po

Field Summary
static int SUPPORT_BARRIERS
          Barriers werden in die TurnRestrictions gemergt
static int SUPPORT_EDGEFLAGS
          Unterstuetzung von EdgeFlags.
static int SUPPORT_EXTENSIONS
          Extensions werden gecacht
static int SUPPORT_LATLON
          Untestuetzung von Koordinaten. z.B. fuer AStar oder Vertex-Lookups.
static int SUPPORT_NOTHING
          Keine Unterstuetzung zusaetzlicher Features.
static int SUPPORT_RASTER_EDGE
          Dynamische Einsortierung von Segmenten in ein Raster.
static int SUPPORT_RASTER_VERTEX
          Dynamische Einsortierung von Vertices in ein Raster.
static int SUPPORT_REVERSE
          Dynamische Anreicherung des Graphen um Reverse-Routing-Infos.
static int SUPPORT_SEGMENTS
          Es wird versucht alle Segmente in den Speicher zu laden.
 
Constructor Summary
Graph(java.io.File graphFile)
          CTOR Ruft Graph(File, Log, int, boolean, byte...) mit new Log(), SUPPORT_LATLON, false.
Graph(java.io.File graphFile, Log log, int supports, boolean async, byte... excludedExtensionClazzes)
          CTOR.
Graph(java.io.InputStream graphInputStream)
          CTOR Verpackt den InputStream in einen InStreamAdapter und ruft Graph(InStream).
Graph(de.cm.osm2po.primitives.InStream graphInStream)
          CTOR Ruft Graph(InStream, Log, int, boolean, byte...) mit new Log(), SUPPORT_LATLON, false.
Graph(de.cm.osm2po.primitives.InStream graphInStream, Log log, int supports, boolean async, byte... excludedExtensionClazzes)
          CTOR.
 
Method Summary
 double calcPathLength(int[] path)
          Berechnet die Laenge eines Pfades.
 double calcPathTime(int[] path)
          Berechnet die Fahrzeit eines Pfades.
protected  java.lang.Object clone()
           
 void close()
          Schliesst den Graphen und raeumt den Speicher frei.
 boolean containsWrongWays()
           
 int[] createTransformedEdgeIndex()
          Erzeugt ein Index-Array fuer eine umgekehrte Zugriffssicht, naemlich von einer bekannten EdgeId zum EdgeIdx innerhalb der Adjazenz-Liste.
 int[] findCloseEdges(float lat, float lon, int minCount)
          Findet nahe Edges zu einer Koordinate im Umkreis.
 int findClosestVertexId(float lat, float lon)
          Findet den naechsten Vertex zu einer Koordinate im Umkreis von etwa 5 km.
 int[] findClosestVertexIds(float lat, float lon, int zoneRadius, int n)
          Findet die naechsten Vertices (IDs) zu einer Koordinate im Umkreis und liefert diese sortiert nach Distanz (kuerzeste vorne) zurueck.
 int[] findIncomingEdges(int targetId)
          Findet alle ankommenden Edges zu einem Vertex.
 int[] findOutgoingEdges(int sourceId)
          Findet alle wegfuehrenden Edges zu einem Vertex.
 int findReverseEdge(int edgeIdx)
          Findet die gespiegelte Rueckwaers-Kante, wenn vorhanden.
 int[] findVerticesByClazz(byte clazz)
          Findet die Indizes aller Vertices einer bestimmten Klasse.
 float[] getEdgeCostsH()
           
 float[] getEdgeCostsKm()
           
 int[] getEdgeEntries()
           
 int[] getEdgeEntriesR()
           
 int[] getEdgeFlags()
           
 int[] getEdgeIds()
           
 int[] getEdgeIdxsR()
           
 byte[] getEdgeNoTurnBits()
           
 byte[] getEdgeNoTurnBitsR()
           
 de.cm.osm2po.primitives.IntIntBag getEdgeRasterBag()
           
 int[] getEdgeSourceIds()
           
 int[] getEdgeTargetIds()
           
 byte[] getExtension(byte id, byte clazz)
           
 GraphHeader.ExtensionEntry getExtensionEntry(byte id, byte clazz)
           
 int getGraphId()
           
 float[] getLats()
           
 float[] getLons()
           
 float getMaxLat()
           
 float getMaxLon()
           
 float getMinLat()
           
 float getMinLon()
           
 byte[] getVertexClazzes()
           
 de.cm.osm2po.primitives.IntIntBag getVertexRasterBag()
           
static boolean isGraphFile(java.io.File file)
           
 boolean isInitializing()
           
static boolean isOneWay(int edgeId)
          Ermittelt aus der EdgeId, ob es sich um eine Einbahnstrasse handelt.
static boolean isReverse(int edgeId)
          Ermittelt aus der EdgeId, ob dies eine Rueckwaerts-Kante ist, es sich hier also um die Spiegelung des Original-Segments handelt.
 boolean isSupported(int SUPPORT)
          Prueft ob der Graph ein oder mehrere Zusatzfeatures unterstuetzt.
 int isTurnRestricted(int fromEdgeIdx, int toEdgeIdx)
          Ermittelt, ob zwischen zwei Edges einer Kreuzung eine NoTurn-Restriktion vorhanden ist.
static boolean isWrongWay(int edgeId)
          Ermittelt aus der EdgeId, ob es sich um eine Einbahnstrasse in Gegenrichung handelt.
 de.cm.osm2po.model.LatLons lookupGeometry(int edgeIdx)
          Liefert alle Koordinaten zu einer Edge.
 de.cm.osm2po.primitives.VarString lookupName(int edgeIdx)
          Liefert den Strassennamen zu einer Edge.
 RoutingResultSegment lookupSegment(int edgeIdx)
          Rekonstruiert alle Segmentinformationen aus einer Edge.
 boolean sync()
          Wartet bis der Konstruktor den Graphen im asynchronen Modus geladen hat.
static int toEdgeId(int segmentId, boolean reverse)
          Ermittelt aus einer SegmentId die EdgeId ohne Beruecksichtigung der Information OneWay (Bit 32).
static int toSementId(int edgeId)
          Ermittelt aus der EdgeId die SegmentId.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SUPPORT_NOTHING

public static final int SUPPORT_NOTHING
Keine Unterstuetzung zusaetzlicher Features.

See Also:
Constant Field Values

SUPPORT_LATLON

public static final int SUPPORT_LATLON
Untestuetzung von Koordinaten. z.B. fuer AStar oder Vertex-Lookups.

See Also:
Constant Field Values

SUPPORT_EDGEFLAGS

public static final int SUPPORT_EDGEFLAGS
Unterstuetzung von EdgeFlags.

See Also:
Constant Field Values

SUPPORT_SEGMENTS

public static final int SUPPORT_SEGMENTS
Es wird versucht alle Segmente in den Speicher zu laden. Sonst HardDisk.

See Also:
Constant Field Values

SUPPORT_REVERSE

public static final int SUPPORT_REVERSE
Dynamische Anreicherung des Graphen um Reverse-Routing-Infos.

See Also:
Constant Field Values

SUPPORT_RASTER_EDGE

public static final int SUPPORT_RASTER_EDGE
Dynamische Einsortierung von Segmenten in ein Raster.

See Also:
Constant Field Values

SUPPORT_RASTER_VERTEX

public static final int SUPPORT_RASTER_VERTEX
Dynamische Einsortierung von Vertices in ein Raster.

See Also:
Constant Field Values

SUPPORT_BARRIERS

public static final int SUPPORT_BARRIERS
Barriers werden in die TurnRestrictions gemergt

See Also:
Constant Field Values

SUPPORT_EXTENSIONS

public static final int SUPPORT_EXTENSIONS
Extensions werden gecacht

See Also:
Constant Field Values
Constructor Detail

Graph

public Graph(java.io.File graphFile)
CTOR Ruft Graph(File, Log, int, boolean, byte...) mit new Log(), SUPPORT_LATLON, false.

Parameters:
graphFile - File Graph-Datei.

Graph

public Graph(de.cm.osm2po.primitives.InStream graphInStream)
CTOR Ruft Graph(InStream, Log, int, boolean, byte...) mit new Log(), SUPPORT_LATLON, false.

Parameters:
graphInStream - InStream

Graph

public Graph(java.io.InputStream graphInputStream)
CTOR Verpackt den InputStream in einen InStreamAdapter und ruft Graph(InStream).

Parameters:
graphInputStream - InputStream

Graph

public Graph(de.cm.osm2po.primitives.InStream graphInStream,
             Log log,
             int supports,
             boolean async,
             byte... excludedExtensionClazzes)
CTOR.

Parameters:
graphInStream - InStream Graph-als Stream NOT NULL. Wird intern bereits gepuffert, daher ist ein Vorschalten eines BufferedInputStream nicht notwendig.
log - Log NULLABLE.
supports - int Flags. z.B SUPPORT_LATLON.
async - true: Der Graph wird asynchron geladen.
excludedExtensionClazzes - Extensions dieser Klasse nicht laden.

Graph

public Graph(java.io.File graphFile,
             Log log,
             int supports,
             boolean async,
             byte... excludedExtensionClazzes)
CTOR.

Parameters:
graphFile - File Graph-Datei NOT NULL.
log - Log NULLABLE.
supports - int Flags. z.B SUPPORT_LATLON.
async - true: Der Graph wird asynchron geladen.
excludedExtensionClazzes - Extensions dieser Klasse nicht laden.
Method Detail

clone

protected java.lang.Object clone()
                          throws java.lang.CloneNotSupportedException
Overrides:
clone in class java.lang.Object
Throws:
java.lang.CloneNotSupportedException

sync

public boolean sync()
Wartet bis der Konstruktor den Graphen im asynchronen Modus geladen hat.

Returns:
true: ok, false: Der Graph wurde nicht geladen.

isSupported

public boolean isSupported(int SUPPORT)
Prueft ob der Graph ein oder mehrere Zusatzfeatures unterstuetzt. Jedes dieser Features benoetigt entsprechend mehr RAM.

Parameters:
SUPPORT - int-Flags, z.B 1
Returns:
Unterstuetzung ja/nein.

containsWrongWays

public boolean containsWrongWays()

getGraphId

public int getGraphId()

getEdgeEntries

public int[] getEdgeEntries()

getEdgeIds

public int[] getEdgeIds()

getEdgeSourceIds

public int[] getEdgeSourceIds()

getEdgeTargetIds

public int[] getEdgeTargetIds()

getEdgeCostsKm

public float[] getEdgeCostsKm()

getEdgeCostsH

public float[] getEdgeCostsH()

getEdgeNoTurnBits

public byte[] getEdgeNoTurnBits()

getEdgeFlags

public int[] getEdgeFlags()

getEdgeIdxsR

public int[] getEdgeIdxsR()

getEdgeEntriesR

public int[] getEdgeEntriesR()

getEdgeNoTurnBitsR

public byte[] getEdgeNoTurnBitsR()

getLats

public float[] getLats()

getLons

public float[] getLons()

getMinLat

public float getMinLat()

getMinLon

public float getMinLon()

getMaxLat

public float getMaxLat()

getMaxLon

public float getMaxLon()

getVertexClazzes

public byte[] getVertexClazzes()

getExtensionEntry

public GraphHeader.ExtensionEntry getExtensionEntry(byte id,
                                                    byte clazz)

getExtension

public byte[] getExtension(byte id,
                           byte clazz)

getEdgeRasterBag

public de.cm.osm2po.primitives.IntIntBag getEdgeRasterBag()

getVertexRasterBag

public de.cm.osm2po.primitives.IntIntBag getVertexRasterBag()

toSementId

public static int toSementId(int edgeId)
Ermittelt aus der EdgeId die SegmentId.

Parameters:
edgeId - int
Returns:
int SegmentId.

toEdgeId

public static int toEdgeId(int segmentId,
                           boolean reverse)
Ermittelt aus einer SegmentId die EdgeId ohne Beruecksichtigung der Information OneWay (Bit 32).

Parameters:
segmentId - int
reverse - boolean in Rueckwaertsrichung
Returns:
int edgeId

isWrongWay

public static boolean isWrongWay(int edgeId)
Ermittelt aus der EdgeId, ob es sich um eine Einbahnstrasse in Gegenrichung handelt.

Parameters:
edgeId - int
Returns:
boolean, Einbahnstrasse in Gegenrichtung ja/nein.

isOneWay

public static boolean isOneWay(int edgeId)
Ermittelt aus der EdgeId, ob es sich um eine Einbahnstrasse handelt.

Parameters:
edgeId - int
Returns:
boolean, Einbahnstrasse ja/nein.

isReverse

public static boolean isReverse(int edgeId)
Ermittelt aus der EdgeId, ob dies eine Rueckwaerts-Kante ist, es sich hier also um die Spiegelung des Original-Segments handelt.

Parameters:
edgeId - int
Returns:
Rueckrichtung, bzw. gespiegeltes Segment.

isInitializing

public boolean isInitializing()

close

public void close()
Schliesst den Graphen und raeumt den Speicher frei.
Hinweis:
Diese Methode kann ebenfalls asynchron waehrend des Ladevorgangs gerufen werden, wodurch dieser umgehend unterbrochen und sauber beendet wird.


isGraphFile

public static boolean isGraphFile(java.io.File file)

findClosestVertexId

public int findClosestVertexId(float lat,
                               float lon)
Findet den naechsten Vertex zu einer Koordinate im Umkreis von etwa 5 km. Ruft intern findClosestVertexIds(float, float, int, int) auf.

Parameters:
lat - float Latitude (Breitengrad)
lon - float Longitude (Laengengrad)
Returns:
VertexId oder -1

findClosestVertexIds

public int[] findClosestVertexIds(float lat,
                                  float lon,
                                  int zoneRadius,
                                  int n)
Findet die naechsten Vertices (IDs) zu einer Koordinate im Umkreis und liefert diese sortiert nach Distanz (kuerzeste vorne) zurueck.

Parameters:
lat - float Latitude (Breitengrad)
lon - float Longitude (Laengengrad)
zoneRadius - int. Grober Suchradius. 1 entspricht 0.01 Grad.
n - Maximale Anzahl zurueckzuliefernder Vertices.
Returns:
Array von VertexIds sortiert nach Distanz NOT NULL.

findOutgoingEdges

public int[] findOutgoingEdges(int sourceId)
Findet alle wegfuehrenden Edges zu einem Vertex.

Parameters:
sourceId - int Id des SourceVertex.
Returns:
int[] edgeIdx-Array NOT NULL.

findIncomingEdges

public int[] findIncomingEdges(int targetId)
Findet alle ankommenden Edges zu einem Vertex. Unterstuetzt der Graph kein SUPPORT_REVERSE, so wird das Ergebnis mittels findOutgoingEdges(int) und findReverseEdge(int) ermittelt. Um hier korrekte Ergebnisse zu liefern, muss der Graph auch WrongWays beinhalten, also Einbahnstrassen in Gegenrichtung.

Parameters:
targetId - int Id des TargetVertex
Returns:
int[] edgeIdx-Array NOT NULL.

lookupGeometry

public de.cm.osm2po.model.LatLons lookupGeometry(int edgeIdx)
Liefert alle Koordinaten zu einer Edge.

Parameters:
edgeIdx - Index der Edge in der Adjazenzliste.
Returns:
LatLons Koordinaten des korrespondierenden Segments.
Wichtig:
Handelt es sich um eine Rueckwaertskante, so wird die Geometrie reversed.

lookupName

public de.cm.osm2po.primitives.VarString lookupName(int edgeIdx)
Liefert den Strassennamen zu einer Edge.

Parameters:
edgeIdx - Index der Edge in der Adjazenzliste.
Returns:
Name der Strasse.

findReverseEdge

public int findReverseEdge(int edgeIdx)
Findet die gespiegelte Rueckwaers-Kante, wenn vorhanden.

Parameters:
edgeIdx - int Index-Position in der Adjazenzliste.
Returns:
int edgeIdx oder 0, wenn nicht gefunden.

isTurnRestricted

public int isTurnRestricted(int fromEdgeIdx,
                            int toEdgeIdx)
Ermittelt, ob zwischen zwei Edges einer Kreuzung eine NoTurn-Restriktion vorhanden ist.

Parameters:
fromEdgeIdx - Index der hinfuehrenden Edge.
toEdgeIdx - Index der wegfuehrenden Edge.
Returns:
0, wenn keine oder Fehler, > 0, Turn-Bit-Index (1-wertig).

createTransformedEdgeIndex

public int[] createTransformedEdgeIndex()
Erzeugt ein Index-Array fuer eine umgekehrte Zugriffssicht, naemlich von einer bekannten EdgeId zum EdgeIdx innerhalb der Adjazenz-Liste.

Returns:
int[]-Array von Zeigern auf EdgeIdxs.
Das heisst: EdgeId 1 befindet sich an Index 0 und der Wert (wenn nicht 0) zeigt auf die Index-Position in der Adjazenz-Liste (edgeIdx).
0-Werte im zurueckelieferten Array sind nicht vorhandene Edges.

lookupSegment

public RoutingResultSegment lookupSegment(int edgeIdx)
Rekonstruiert alle Segmentinformationen aus einer Edge.
Wichtig:
Wenn es sich um eine Reverse-Edge handelt, dann werden die Koordinaten der Geometrie bereits umgekehrt zurueckgeliefert.

Parameters:
edgeIdx - Index (Position) der Edge im Graphen.
Returns:
RoutingResultSegment Segment oder null, wenn nicht ermittelbar oder edgeIdx <= 0.

calcPathLength

public double calcPathLength(int[] path)
Berechnet die Laenge eines Pfades.

Parameters:
path - int[]-Arrray von EdgedIdx.
Returns:
double Laenge in km.

calcPathTime

public double calcPathTime(int[] path)
Berechnet die Fahrzeit eines Pfades.

Parameters:
path - int[]-Arrray von EdgedIdx.
Returns:
double Zeite in h.

findVerticesByClazz

public int[] findVerticesByClazz(byte clazz)
Findet die Indizes aller Vertices einer bestimmten Klasse. Da die Indizes der Id entsprechen, findet diese Methode folglich direkt die VertexIds.

Parameters:
clazz - byte Klasse.
Returns:
int[]-Array von Indizes auf Vertices im Graphen.

findCloseEdges

public int[] findCloseEdges(float lat,
                            float lon,
                            int minCount)
Findet nahe Edges zu einer Koordinate im Umkreis. Wenn der Graph ein Raster unterstuetzt, so wird dies herangezogen, ansonsten wird auf eine rudimentaere Suche ueber die dichtesten Vertices zurueckgegriffen.

Parameters:
lat - float Latitude (Breitengrad)
lon - float Longitude (Laengengrad)
minCount - grobe minimale Anzahl zurueckgelieferter Edges.
Returns:
int[] EdgeIdxs NOT NULL DISTINCT SORTED BY IDX.

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