Routing

implproposal

Unterstützung für pgRoutingopen in new window zur Berechnung von Routen.

Umfang

pgRouting kann zur Berechnung von Routen auf Grundlage eines Knoten-Kanten-Datensatzes verwendet werden. Diese Feature-Provider-Erweiterung erlaubt, die Kanten/Segmente einer Route als Antwort auf eine Abfrage bereitzustellen. Das Schema der Routensegmente wird als Objektart spezifiziert.

Das Schema der Routensegmente muss die folgenden Bedingungen erfüllen:

  • Jedes Feature ist ein Routensegment / eine Kante der Route. Die Kanten werden der Reihe nach von Anfang bis Ende zurückgegeben.
  • Der Name der Feature-Tabelle ist "_route_".
  • Die Objektart hat eine INTEGER-Eigenschaft node, die den Knoten am Anfang des Routensegments identifiziert. Der Wert ist entweder gleich data/source (Route in positiver Richtung der Kante) oder gleich data/target (Route in negativer Richtung der Kante).
  • Die Objektart hat eine FLOAT-Eigenschaft cost, die die Kosten der Kante in Fahrtrichtung angibt.
  • Die Objektart hat eine OBJECT-Eigenschaft data.
  • Das data-Objekt hat eine INTEGER-Eigenschaft source mit der Knoten-Id am Anfang der Kante.
  • Das data-Objekt hat eine INTEGER-Eigenschaft target mit der Knoten-Id am Ende der Kante.
  • Das data-Objekt hat eine FLOAT-Eigenschaft length_m mit der Länge der Kante in Meter.
  • Das data-Objekt hat eine GEOMETRY-Eigenschaft mit einer LINE_STRING-Geometrie.
  • Das data-Objekt kann eine FLOAT-Eigenschaft duration_forward_s mit der Dauer für das Fahren der Kante in positiver Richtung haben.
  • Das data-Objekt kann eine FLOAT-Eigenschaft duration_backward_s mit der Dauer für das Fahren der Kante in negativer Richtung haben.
  • Das data-Objekt kann eine FLOAT-Eigenschaft maxHeight_m mit der maximalen Fahrzeughöhe in Meter für die Kante haben.
  • Das data-Objekt kann eine FLOAT-Eigenschaft maxWeight_m mit dem maximalen Fahrzeuggewicht in Tonnen für die Kante haben.
  • Das data-Objekt kann eine FLOAT-Eigenschaft maxspeed_forward mit der Geschwindigkeitsbegrenzung auf der Kante in positiver Richtung haben.
  • Das data-Objekt kann eine FLOAT-Eigenschaft maxspeed_backward mit der Geschwindigkeitsbegrenzung am Rand in negativer Richtung haben.

Konfiguration

Optionen

NameDefaultBeschreibungTypSeit
type
Immer ROUTES.
string
v2.0
enabled
false
Soll die Erweiterung aktiviert werden?
boolean
v2.0
fromToQuery
null
Required Die SQL-Abfrage zur Bestimmung des Start- und Endpunkts der Route. ${point} wird durch die WKT-POINT-Geometrie des Wegpunktes ersetzt, der als Start/Ende verwendet werden soll.
object
v3.1
edgesQuery
null
Required Die SQL-Abfrage zur Bestimmung der Kanten/Routensegmente der Route. ${cost_column} und ${reverse_cost_column} werden durch die Spaltennamen ersetzt, die für die Optimierung der Route verwendet werden sollen. Dabei ist ${cost_column} der Wert in Richtung der Kante, ${reverse_cost_column} in der entgegengesetzten Richtung.
object
v3.1
routeQuery
null
Required Die SQL-Abfrage zur Berechnung der Route. Verwenden Sie ${edgesQuery} als Platzhalter für die edgesQuery, ${from_vid} und ${to_vid} als Platzhalter für den Start/Endpunkt. Falls unterstützt, verwenden Sie ${height}, ${weight}, und ${obstacles} als Platzhalter für die Einschränkungen bezüglich Höhe, Gewicht und Gebiet. ${flag_mask}, falls angegeben, wird durch die Summe aller für die Routing-Anfrage gesetzten zusätzlichen Flags ersetzt.
string
v3.1
flags
{}
Zusätzliche Flags, die gesetzt werden können, um sie bei der Berechnung der Route zu berücksichtigen. Der ganzzahlige Wert eines Flags muss ein eindeutiger Bit-Wert sein.
object
v3.1
nativeCrs
CRS84
Das Koordinatenreferenzsystem, in dem Geometrien in dem Routing-Datensatz geführt werden. Der EPSG-Code des Koordinatenreferenzsystems wird als Integer in code angegeben. Mit forceAxisOrder kann die Koordinatenreihenfolge geändert werden: NONE verwendet die Reihenfolge des Koordinatenreferenzsystems, LON_LAT verwendet stets Länge/Ostwert als ersten und Breite/Nordwert als zweiten Wert, LAT_LON entsprechend umgekehrt. Beispiel: Das Default-Koordinatenreferenzsystem CRS84 entspricht code: 4326 und forceAxisOrder: LON_LAT.
object
v3.1
preferences
{}
Required Listet die verfügbaren Optionen zur Optimierung der Route auf. Der Schlüssel ist die Id, der Wert ein Objekt aus Key-Value-Paaren mit den folgenden erforderlichen Keys: "label", "costColumn" (Name der Spalte in der Tabelle des zu minimierenden Netzsegments, wenn das Segment in positiver Richtung befahren wird), "reverseCostColumn" (dasselbe, aber für die Fahrt in negativer Richtung).
object
v3.1
modes
{}
Listet die verfügbaren Verkehrsmittel auf, der Schlüssel ist die Id, der Wert eine Bezeichnung.
object
v3.1
weightDefault
0
Legt einen Standardwert für das Gewicht des Verkehrsmittels in Tonnen fest. 0 bedeutet keine Gewichtsangabe.
string
v3.1
heightDefault
0
Legt einen Standardwert für die Höhe des Verkehrsmittels in Metern fest. 0 bedeutet keine Höhenangabe.
string
v3.1
obstaclesDefault
EMPTY
Legt einen Standardwert für ein zu vermeidendes Gebiet fest.
string
v3.1
warmup
false
Aktiviert eine Routenberechnung mit den Standardwerten beim Start des Providers. Dies kann sinnvoll sein, wenn der Routing-Algorithmus bestimmte Informationen in einem Cache speichert.
boolean
v3.1

Beispiel


extensions:
  - type: ROUTES
    enabled: true
    warmup: true
    fromToQuery:
      driving: 'SELECT id as oid, ST_Distance(${point},the_geom) AS distance FROM v_ways_vertices_pgr WHERE connected and ST_DWithin(${point},the_geom, 0.25) ORDER BY distance ASC LIMIT 1'
    edgesQuery:
      driving: 'SELECT gid as id, source, target, x1, y1, x2, y2, ${cost_column} AS cost, ${reverse_cost_column} AS reverse_cost, maxheight, maxweight FROM v_ways WHERE tag_id NOT IN (113, 114, 115, 116, 117, 118, 119, 120, 122, 201, 202, 203, 204, 301, 302, 303, 304, 305)'
    routeQuery: 'SELECT * from pgr_aStar(${edgesQuery}, ${from_vid}, ${to_vid}, ${height}, ${weight}, ''SELECT gid FROM v_ways WHERE ST_Intersects(the_geom, ${obstacles})'', false, 5, (1+8+16))'
    nativeCrs:
      code: 4326
      forceAxisOrder: LON_LAT
    preferences:
      fastest:
        label: Fastest
        costColumn: cost_s
        reverseCostColumn: reverse_cost_s
      shortest:
        label: Shortest
        costColumn: cost
        reverseCostColumn: reverse_cost
    modes:
      driving: Driving
types:
  route:
    type: OBJECT
    sourcePath: /_route_
    properties:
      id:
        sourcePath: id
        type: INTEGER
        role: ID
      edge:
        sourcePath: edge
        type: INTEGER
      node:
        sourcePath: node
        type: INTEGER
      cost:
        sourcePath: cost
        type: FLOAT
      agg_cost:
        sourcePath: agg_cost
        type: FLOAT
      data:
        type: OBJECT
        sourcePath: '[edge=gid]v_ways{sortKey=gid}'
        properties:
          geometry:
            sourcePath: the_geom
            type: GEOMETRY
            geometryType: LINE_STRING
            role: PRIMARY_GEOMETRY
            forcePolygonCCW: false
          source:
            sourcePath: source
            type: INTEGER
          target:
            sourcePath: target
            type: INTEGER
          type:
            sourcePath: tag_id
            type: STRING
            transformations:
              codelist: wayTag
          #osm_id:
          #  sourcePath: osm_id
          #  type: INTEGER
          length_m:
            sourcePath: length_m
            type: FLOAT
          duration_forward_s:
            sourcePath: cost_s
            type: FLOAT
          duration_backward_s:
            sourcePath: reverse_cost_s
            type: FLOAT
          roadName:
            sourcePath: name
            type: STRING
          oneway:
            sourcePath: oneway
            type: STRING
          maxspeed_forward:
            sourcePath: maxspeed_forward
            type: FLOAT
          maxspeed_backward:
            sourcePath: maxspeed_backward
            type: FLOAT
          maxHeight_m:
            sourcePath: maxheight
            type: FLOAT
          maxWeight_t:
            sourcePath: maxweight
            type: FLOAT