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