Routingimplproposal
Unterstützung für pgRouting 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 gleichdata/source
(Route in positiver Richtung der Kante) oder gleichdata/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-Eigenschaftsource
mit der Knoten-Id am Anfang der Kante. - Das
data
-Objekt hat eine INTEGER-Eigenschafttarget
mit der Knoten-Id am Ende der Kante. - Das
data
-Objekt hat eine FLOAT-Eigenschaftlength_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-Eigenschaftduration_forward_s
mit der Dauer für das Fahren der Kante in positiver Richtung haben. - Das
data
-Objekt kann eine FLOAT-Eigenschaftduration_backward_s
mit der Dauer für das Fahren der Kante in negativer Richtung haben. - Das
data
-Objekt kann eine FLOAT-EigenschaftmaxHeight_m
mit der maximalen Fahrzeughöhe in Meter für die Kante haben. - Das
data
-Objekt kann eine FLOAT-EigenschaftmaxWeight_m
mit dem maximalen Fahrzeuggewicht in Tonnen für die Kante haben. - Das
data
-Objekt kann eine FLOAT-Eigenschaftmaxspeed_forward
mit der Geschwindigkeitsbegrenzung auf der Kante in positiver Richtung haben. - Das
data
-Objekt kann eine FLOAT-Eigenschaftmaxspeed_backward
mit der Geschwindigkeitsbegrenzung am Rand in negativer Richtung haben.
Konfiguration
Optionen
Name | Default | Beschreibung | Typ | Seit |
---|---|---|---|---|
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