596 lines
30 KiB
Markdown
596 lines
30 KiB
Markdown
## Environent Variables
|
|
|
|
### SIGNAL_PARENT_WHEN_READY
|
|
|
|
If the SIGNAL_PARENT_WHEN_READY environment variable is set osrm-routed will
|
|
send the USR1 signal to its parent when it will be running and waiting for
|
|
requests. This could be used to upgrade osrm-routed to a new binary on the fly
|
|
without any service downtime - no incoming requests will be lost.
|
|
|
|
### DISABLE_ACCESS_LOGGING
|
|
|
|
If the DISABLE_ACCESS_LOGGING environment variable is set osrm-routed will
|
|
**not** log any http requests to standard output. This can be useful in high
|
|
traffic setup.
|
|
|
|
## HTTP API
|
|
|
|
`osrm-routed` supports only `GET` requests of the form. If you your response size
|
|
exceeds the limits of a simple URL encoding, consider using our [NodeJS bindings](https://github.com/Project-OSRM/node-osrm)
|
|
or using the [C++ library directly](libosrm.md).
|
|
|
|
### Request
|
|
|
|
```
|
|
http://{server}/{service}/{version}/{profile}/{coordinates}[.{format}]?option=value&option=value
|
|
```
|
|
|
|
- `server`: location of the server. Example: `127.0.0.1:5000` (default)
|
|
- `service`: Name of the service to be used. Support are the following services:
|
|
|
|
| Service | Description |
|
|
|-------------|-----------------------------------------------------------|
|
|
| [`route`](#service-route) | shortest path between given coordinates |
|
|
| [`nearest`](#service-nearest) | returns the nearest street segment for a given coordinate |
|
|
| [`table`](#service-table) | computes distance tables for given coordinates |
|
|
| [`match`](#service-match) | matches given coordinates to the road network |
|
|
| [`trip`](#service-trip) | Compute the shortest round trip between given coordinates |
|
|
| [`tile`](#service-tile) | Return vector tiles containing debugging info |
|
|
|
|
- `version`: Version of the protocol implemented by the service.
|
|
- `profile`: Mode of transportation, is determined by the profile that is used to prepare the data
|
|
- `coordinates`: String of format `{longitude},{latitude};{longitude},{latitude}[;{longitude},{latitude} ...]` or `polyline({polyline})`.
|
|
- `format`: Only `json` is supportest at the moment. This parameter is optional and defaults to `json`.
|
|
|
|
Passing any `option=value` is optional. `polyline` follows Google's polyline format with precision 5 and can be generated using [this package](https://www.npmjs.com/package/polyline).
|
|
To pass parameters to each location some options support an array like encoding:
|
|
|
|
```
|
|
{option}={element};{element}[;{element} ... ]
|
|
```
|
|
|
|
The number of elements must match exactly the number of locations. If you don't want to pass a value but instead use the default you can pass an empty `element`.
|
|
|
|
Example: 2nd location use the default value for `option`:
|
|
|
|
```
|
|
{option}={element};;{element}
|
|
```
|
|
|
|
## General options
|
|
|
|
| Option | Values | Description |
|
|
|------------|--------------------------------------------------------|--------------------------------------------------|
|
|
|bearings |`{bearing};{bearing}[;{bearing} ...]` |Limits the search to segments with given bearing in degrees towards true north in clockwise direction. |
|
|
|radiuses |`{radius};{radius}[;{radius} ...]` |Limits the search to given radius in meters. |
|
|
|hints |`{hint};{hint}[;{hint} ...]` |Hint to derive position in street network. |
|
|
|
|
Where the elements follow the following format:
|
|
|
|
| Element | Values |
|
|
|------------|--------------------------------------------------------|
|
|
|bearing |`{value},{range}` `integer 0 .. 360,integer 0 .. 180` |
|
|
|radius |`double >= 0` or `unlimited` (default) |
|
|
|hint |Base64 `string` |
|
|
|
|
#### Examples
|
|
|
|
Query on Berlin with three coordinates:
|
|
|
|
```
|
|
http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?overview=false
|
|
```
|
|
|
|
Using polyline:
|
|
|
|
```
|
|
http://router.project-osrm.org/route/v1/driving/polyline(ofp_Ik_vpAilAyu@te@g`E)?overview=false
|
|
```
|
|
|
|
### Response
|
|
|
|
Every response object has a `code` field.
|
|
|
|
```json
|
|
{
|
|
"code": {code},
|
|
"message": {message}
|
|
}
|
|
```
|
|
|
|
Where `code` is on one of the strings below or service dependent:
|
|
|
|
| Type | Description |
|
|
|-------------------|----------------------------------------------------------------------------------|
|
|
| `Ok` | Request could be processed as expected. |
|
|
| `InvalidUrl` | URL string is invalid. |
|
|
| `InvalidService` | Service name is invalid. |
|
|
| `InvalidVersion` | Version is not found. |
|
|
| `InvalidOptions` | Options are invalid. |
|
|
| `NoSegment` | One of the supplied input coordinates could not snap to street segment. |
|
|
| `TooBig` | The request size violates one of the service specific request size restrictions. |
|
|
|
|
`message` is a **optional** human-readable error message. All other status types are service dependent.
|
|
|
|
In case of an error the HTTP status code will be `400`. Otherwise the HTTP status code will be `200` and `code` will be `Ok`.
|
|
|
|
## Service `nearest`
|
|
|
|
Snaps a coordinate to the street network and returns the nearest n matches.
|
|
|
|
### Request
|
|
|
|
```
|
|
http://{server}/nearest/v1/{profile}/{coordinates}.json?number={number}
|
|
```
|
|
|
|
Where `coordinates` only supports a single `{longitude},{latitude}` entry.
|
|
|
|
In addition to the [general options](#general-options) the following options are supported for this service:
|
|
|
|
|Option |Values |Description |
|
|
|------------|------------------------------|----------------------------------------------------|
|
|
|number |`integer >= 1` (default `1`) |Number of nearest segments that should be returned. |
|
|
|
|
### Response
|
|
|
|
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
|
|
- `waypoints` array of `Waypoint` objects sorted by distance to the input coordinate. Each object has at least the following additional properties:
|
|
- `distance`: Distance in meters to the supplied input coordinate.
|
|
|
|
### Examples
|
|
|
|
Querying nearest three snapped locations of `13.388860,52.517037` with a bearing between `20° - 340°`.
|
|
|
|
```
|
|
http://router.project-osrm.org/nearest/v1/driving/13.388860,52.517037?number=3&bearings=0,20
|
|
```
|
|
|
|
## Service `route`
|
|
|
|
### Request
|
|
|
|
```
|
|
http://{server}/route/v1/{profile}/{coordinates}?alternatives={true|false}&steps={true|false}&geometries={polyline|geojson}&overview={full|simplified|false}&annotations={true|false}
|
|
```
|
|
|
|
In addition to the [general options](#general-options) the following options are supported for this service:
|
|
|
|
|Option |Values |Description |
|
|
|------------|------------------------------------------|-------------------------------------------------------------------------------|
|
|
|alternatives|`true`, `false` (default) |Search for alternative routes and return as well.\* |
|
|
|steps |`true`, `false` (default) |Return route steps for each route leg |
|
|
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|
|
|geometries |`polyline` (default), `geojson` |Returned route geometry format (influences overview and per step) |
|
|
|overview |`simplified` (default), `full`, `false` |Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all.|
|
|
|continue_straight |`default` (default), `true`, `false`|Forces the route to keep going straight at waypoints and don't do a uturn even if it would be faster. Default value depends on the profile. |
|
|
|
|
\* Please note that even if an alternative route is requested, a result cannot be guaranteed.
|
|
|
|
### Response
|
|
|
|
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
|
|
- `waypoints`: Array of `Waypoint` objects representing all waypoints in order:
|
|
- `routes`: An array of `Route` objects, ordered by descending recommendation rank.
|
|
|
|
In case of error the following `code`s are supported in addition to the general ones:
|
|
|
|
| Type | Description |
|
|
|-------------------|-----------------|
|
|
| `NoRoute` | No route found. |
|
|
|
|
All other fields might be undefined.
|
|
|
|
## Service `table`
|
|
### Request
|
|
```
|
|
http://{server}/table/v1/{profile}/{coordinates}?{sources}=[{elem}...];&destinations=[{elem}...]`
|
|
```
|
|
|
|
This computes duration tables for the given locations. Allows for both symmetric and asymmetric tables.
|
|
|
|
### Coordinates
|
|
|
|
In addition to the [general options](#general-options) the following options are supported for this service:
|
|
|
|
|Option |Values |Description |
|
|
|------------|--------------------------------------------------|---------------------------------------------|
|
|
|sources |`{index};{index}[;{index} ...]` or `all` (default)|Use location with given index as source. |
|
|
|destinations|`{index};{index}[;{index} ...]` or `all` (default)|Use location with given index as destination.|
|
|
|
|
Unlike other array encoded options, the length of `sources` and `destinations` can be **smaller or equal**
|
|
to number of input locations;
|
|
|
|
Example:
|
|
|
|
```
|
|
sources=0;5;7&destinations=5;1;4;2;3;6
|
|
```
|
|
|
|
|Element |Values |
|
|
|------------|-----------------------------|
|
|
|index |`0 <= integer < #locations` |
|
|
|
|
### Response
|
|
|
|
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
|
|
- `durations` array of arrays that stores the matrix in row-major order. `durations[i][j]` gives the travel time from
|
|
the i-th waypoint to the j-th waypoint. Values are given in seconds.
|
|
- `sources` array of `Waypoint` objects describing all sources in order
|
|
- `destinations` array of `Waypoint` objects describing all destinations in order
|
|
|
|
In case of error the following `code`s are supported in addition to the general ones:
|
|
|
|
| Type | Description |
|
|
|-------------------|-----------------|
|
|
| `NoTable` | No route found. |
|
|
|
|
All other fields might be undefined.
|
|
|
|
#### Examples
|
|
|
|
Returns a `3x3` matrix:
|
|
```
|
|
http://router.project-osrm.org/table/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219
|
|
```
|
|
|
|
Returns a `1x3` matrix:
|
|
```
|
|
http://router.project-osrm.org/table/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?sources=0
|
|
```
|
|
|
|
Returns a asymmetric 3x2 matrix with from the polyline encoded locations `qikdcB}~dpXkkHz`:
|
|
```
|
|
http://router.project-osrm.org/table/v1/driving/qikdcB}~dpXkkHz?sources=0;1;3&destinations=2;4
|
|
```
|
|
|
|
## Service `match`
|
|
|
|
Map matching matches given GPS points to the road network in the most plausible way.
|
|
Please note the request might result multiple sub-traces. Large jumps in the timestamps (>60s) or improbable transitions lead to trace splits if a complete matching could not be found.
|
|
The algorithm might not be able to match all points. Outliers are removed if they can not be matched successfully.
|
|
|
|
### Request
|
|
|
|
```
|
|
http://{server}/match/v1/{profile}/{coordinates}?steps={true|false}&geometries={polyline|geojson}&overview={simplified|full|false}&annotations={true|false}
|
|
```
|
|
|
|
In addition to the [general options](#general-options) the following options are supported for this service:
|
|
|
|
|
|
|Option |Values |Description |
|
|
|------------|------------------------------------------------|------------------------------------------------------------------------------------------|
|
|
|steps |`true`, `false` (default) |Return route steps for each route |
|
|
|geometries |`polyline` (default), `geojson` |Returned route geometry format (influences overview and per step) |
|
|
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|
|
|overview |`simplified` (default), `full`, `false` |Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all.|
|
|
|timestamps |`{timestamp};{timestamp}[;{timestamp} ...]` |Timestamp of the input location. |
|
|
|radiuses |`{radius};{radius}[;{radius} ...]` |Standard deviation of GPS precision used for map matching. If applicable use GPS accuracy.|
|
|
|
|
|Parameter |Values |
|
|
|------------|------------------------------|
|
|
|timestamp |`integer` UNIX-like timestamp |
|
|
|radius |`double >= 0` (default 5m) |
|
|
|
|
### Response
|
|
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
|
|
- `tracepoints`: Array of `Ẁaypoint` objects representing all points of the trace in order.
|
|
If the trace point was ommited by map matching because it is an outlier, the entry will be `null`.
|
|
Each `Waypoint` object has the following additional properties:
|
|
- `matchings_index`: Index to the `Route` object in `matchings` the sub-trace was matched to.
|
|
- `waypoint_index`: Index of the waypoint inside the matched route.
|
|
- `matchings`: An array of `Route` objects that assemble the trace. Each `Route` object has the following additional properties:
|
|
- `confidence`: Confidence of the matching. `float` value between 0 and 1. 1 is very confident that the matching is correct.
|
|
|
|
In case of error the following `code`s are supported in addition to the general ones:
|
|
|
|
| Type | Description |
|
|
|-------------------|---------------------|
|
|
| `NoMatch` | No matchings found. |
|
|
|
|
All other fields might be undefined.
|
|
|
|
## Service `trip`
|
|
|
|
The trip plugin solves the Traveling Salesman Problem using a greedy heuristic (farthest-insertion algorithm).
|
|
The returned path does not have to be the shortest path, as TSP is NP-hard it is only an approximation.
|
|
Note that if the input coordinates can not be joined by a single trip (e.g. the coordinates are on several disconnected islands)
|
|
multiple trips for each connected component are returned.
|
|
|
|
### Request
|
|
|
|
```
|
|
http://{server}/trip/v1/{profile}/{coordinates}?steps={true|false}&geometries={polyline|geojson}&overview={simplified|full|false}&annotations={true|false}
|
|
```
|
|
|
|
In addition to the [general options](#general-options) the following options are supported for this service:
|
|
|
|
|Option |Values |Description |
|
|
|------------|------------------------------------------------|---------------------------------------------------------------------------|
|
|
|steps |`true`, `false` (default) |Return route instructions for each trip |
|
|
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|
|
|geometries |`polyline` (default), `geojson` |Returned route geometry format (influences overview and per step) |
|
|
|overview |`simplified` (default), `full`, `false` |Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all.|
|
|
|
|
### Response
|
|
|
|
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
|
|
- `waypoints`: Array of `Waypoint` objects representing all waypoints in input order. Each `Waypoint` object has the following additional properties:
|
|
- `trips_index`: Index to `trips` of the sub-trip the point was matched to.
|
|
- `waypoint_index`: Index of the point in the trip.
|
|
- `trips`: An array of `Route` objects that assemble the trace.
|
|
|
|
In case of error the following `code`s are supported in addition to the general ones:
|
|
|
|
| Type | Description |
|
|
|-------------------|---------------------|
|
|
| `NoTrips` | No trips found. |
|
|
|
|
All other fields might be undefined.
|
|
|
|
## Result objects
|
|
|
|
### Route
|
|
|
|
Represents a route through (potentially multiple) waypoints.
|
|
|
|
#### Properties
|
|
|
|
- `distance`: The distance traveled by the route, in `float` meters.
|
|
- `duration`: The estimated travel time, in `float` number of seconds.
|
|
- `geometry`: The whole geometry of the route value depending on `overview` parameter, format depending on the `geometries` parameter. See `RouteStep`'s `geometry` field for a parameter documentation.
|
|
|
|
| overview | Description |
|
|
|------------|-----------------------------|
|
|
| simplified | Geometry is simplified according to the highest zoom level it can still be displayed on full. |
|
|
| full | Geometry is not simplified. |
|
|
| false | Geometry is not added. |
|
|
|
|
- `legs`: The legs between the given waypoints, an array of `RouteLeg` objects.
|
|
|
|
#### Example
|
|
|
|
Three input coordinates, `geometry=geojson`, `steps=false`:
|
|
|
|
```json
|
|
{
|
|
"distance": 90.0,
|
|
"duration": 300.0,
|
|
"geometry": {"type": "LineString", "coordinates": [[120., 10.], [120.1, 10.], [120.2, 10.], [120.3, 10.]]},
|
|
"legs": [
|
|
{
|
|
"distance": 30.0,
|
|
"duration": 100.0,
|
|
"steps": []
|
|
},
|
|
{
|
|
"distance": 60.0,
|
|
"duration": 200.0,
|
|
"steps": []
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### RouteLeg
|
|
|
|
Represents a route between two waypoints.
|
|
|
|
#### Properties
|
|
|
|
- `distance`: The distance traveled by this route leg, in `float` meters.
|
|
- `duration`: The estimated travel time, in `float` number of seconds.
|
|
- `summary`: Summary of the route taken as `string`. Depends on the `steps` parameter:
|
|
|
|
| steps | |
|
|
|--------------|-----------------------------------------------------------------------|
|
|
| true | Names of the two major roads used. Can be empty if route is too short.|
|
|
| false | empty `string` |
|
|
|
|
- `steps`: Depends on the `steps` parameter.
|
|
|
|
| steps | |
|
|
|--------------|-----------------------------------------------------------------------|
|
|
| true | array of `RouteStep` objects describing the turn-by-turn instructions |
|
|
| false | empty array |
|
|
|
|
- `annotation`: Additional details about each coordinate along the route geometry:
|
|
|
|
| annotations | |
|
|
|--------------|-----------------------------------------------------------------------|
|
|
| true | returns distance and durations of each coordinate along the route |
|
|
| false | will not exist |
|
|
|
|
#### Example
|
|
|
|
With `steps=false` and `annotations=true`:
|
|
|
|
```json
|
|
{
|
|
"distance": 30.0,
|
|
"duration": 100.0,
|
|
"steps": []
|
|
"annotation": {
|
|
"distance": [5,5,10,5,5],
|
|
"duration": [15,15,40,15,15],
|
|
"nodes": [49772551,49772552,49786799,49786800,49786801,49786802]
|
|
}
|
|
}
|
|
```
|
|
|
|
### RouteStep
|
|
|
|
A step consists of a maneuver such as a turn or merge, followed
|
|
by a distance of travel along a single way to the subsequent
|
|
step.
|
|
|
|
#### Properties
|
|
|
|
- `distance`: The distance of travel from the maneuver to the subsequent step, in `float` meters.
|
|
- `duration`: The estimated travel time, in `float` number of seconds.
|
|
- `geometry`: The unsimplified geometry of the route segment, depending on the `geometries` parameter.
|
|
|
|
| geometries | |
|
|
|------------|--------------------------------------------------------------------|
|
|
| polyline | [polyline](https://www.npmjs.com/package/polyline) with precision 5 in [latitude,longitude] encoding |
|
|
| geojson | [GeoJSON `LineString`](http://geojson.org/geojson-spec.html#linestring) or [GeoJSON `Point`](http://geojson.org/geojson-spec.html#point) if it is only one coordinate (not wrapped by a GeoJSON feature)|
|
|
|
|
- `name`: The name of the way along which travel proceeds.
|
|
- `pronunciation`: The pronunciation hint of the way name. Will be `undefined` if there is no pronunciation hit.
|
|
- `destinations`: The destinations of the way. Will be `undefined` if there are no destinations.
|
|
- `mode`: A string signifying the mode of transportation.
|
|
- `maneuver`: A `StepManeuver` object representing the maneuver.
|
|
- `intersections`: A list of `Intersections` that are passed along the segment, the very first belonging to the StepManeuver
|
|
|
|
#### Example
|
|
|
|
```
|
|
{
|
|
"distance":152.3,
|
|
"duration":15.6,
|
|
"name":"Lortzingstraße",
|
|
"maneuver":{
|
|
"type":"depart",
|
|
"modifier":"left"
|
|
},
|
|
"geometry":"{lu_IypwpAVrAvAdI",
|
|
"mode":"driving",
|
|
"intersections":[
|
|
{"location":[13.39677,52.54366],
|
|
"out":1,
|
|
"bearings":[66,246],
|
|
"entry":["true","true"]},
|
|
{"location":[13.394718,52.543096],
|
|
"in":0,
|
|
"out":2,
|
|
"bearings":[60,150,240,330],
|
|
"entry":["false","true","true","true"]
|
|
}
|
|
]}
|
|
```
|
|
|
|
### StepManeuver
|
|
|
|
#### Properties
|
|
|
|
- `location`: A `[longitude, latitude]` pair describing the location of the turn.
|
|
- `bearing_before`: The clockwise angle from true north to the
|
|
direction of travel immediately before the maneuver.
|
|
- `bearing_after`: The clockwise angle from true north to the
|
|
direction of travel immediately after the maneuver.
|
|
- `type` A string indicating the type of maneuver. **new identifiers might be introduced without API change**
|
|
Types unknown to the client should be handled like the `turn` type, the existance of correct `modifier` values is guranteed.
|
|
|
|
| `type` | Description |
|
|
|-------------------|--------------------------------------------------------------|
|
|
| turn | a basic turn into direction of the `modifier` |
|
|
| new name | no turn is taken, but the road name changes. The Road can take a turn itself, following `modifier` |
|
|
| depart | indicates the departure of the leg |
|
|
| arrive | indicates the destination of the leg |
|
|
| merge | merge onto a street (e.g. getting on the highway from a ramp, the `modifier specifies the direction of the merge`) |
|
|
| ramp | **Deprecated**. Replaced by `on_ramp` and `off_ramp`. |
|
|
| on ramp | take a ramp to enter a highway (direction given my `modifier`) |
|
|
| off ramp | take a ramp to exit a highway (direction given my `modifier`) |
|
|
| fork | take the left/right side at a fork depending on `modifier` |
|
|
| end of road | road ends in a T intersection turn in direction of `modifier`|
|
|
| continue | Turn in direction of `modifier` to stay on the same road |
|
|
| roundabout | traverse roundabout, has additional field `exit` with NR if the roundabout is left. `the modifier specifies the direction of entering the roundabout` |
|
|
| rotary | a larger version of a roundabout, can offer `rotary_name` in addition to the `exit` parameter. |
|
|
| roundabout turn | Describes a turn at a small roundabout that should be treated as normal turn. The `modifier` indicates the turn direciton. Example instruction: `At the roundabout turn left`. |
|
|
| notification | not an actual turn but a change in the driving conditions. For example the travel mode. If the road takes a turn itself, the `modifier` describes the direction |
|
|
|
|
Please note that even though there are `new name` and `notification` instructions, the `mode` and `name` can change
|
|
between all instructions. They only offer a fallback in case nothing else is to report.
|
|
|
|
|
|
- `modifier` An optional `string` indicating the direction change of the maneuver.
|
|
|
|
| `modifier` | Description |
|
|
|-------------------|-------------------------------------------|
|
|
| uturn | indicates reversal of direction |
|
|
| sharp right | a sharp right turn |
|
|
| right | a normal turn to the right |
|
|
| slight right | a slight turn to the right |
|
|
| straight | no relevant change in direction |
|
|
| slight left | a slight turn to the left |
|
|
| left | a normal turn to the left |
|
|
| sharp left | a sharp turn to the left |
|
|
|
|
The list of turns without a modifier is limited to: `depart/arrive`. If the source/target location is close enough to the `depart/arrive` location, no modifier will be given.
|
|
|
|
The meaning depends on the `type` field.
|
|
|
|
| `type` | Description |
|
|
|------------------------|---------------------------------------------------------------------------------------------------------------------------|
|
|
| `turn` | `modifier` indicates the change in direction accomplished through the turn |
|
|
| `depart`/`arrive` | `modifier` indicates the position of departure point and arrival point in relation to the current direction of travel |
|
|
|
|
|
|
- `exit` An optional `integer` indicating number of the exit to take. The field exists for the following `type` field:
|
|
|
|
| `type` | Description |
|
|
|------------------------|---------------------------------------------------------------------------------------------------------------------------|
|
|
| `roundabout` | Number of the roundabout exit to take. If exit is `undefined` the destination is on the roundabout. |
|
|
| else | Indicates the number of intersections passed until the turn. Example instruction: `at the fourth intersection, turn left` |
|
|
|
|
|
|
New properties (potentially depending on `type`) may be introduced in the future without an API version change.
|
|
|
|
### Intersections
|
|
|
|
An intersection gives a full representation of any cross-way the path passes bay. For every step, the very first intersection (`intersections[0]`) corresponds to the
|
|
location of the StepManeuver. Further intersections are listed for every cross-way until the next turn instruction.
|
|
|
|
#### Properties
|
|
|
|
- `location`: A `[longitude, latitude]` pair describing the location of the turn.
|
|
- `bearings`: A list of bearing values (e.g. [0,90,180,270]) that are available at the intersection. The bearings describe all available roads at the intersection.
|
|
- `entry`: A list of entry flags, corresponding in a 1:1 relationship to the bearings. A value of `true` indicates that the respective road could be entered on a valid route.
|
|
`false` indicates that the turn onto the respective road would violate a restriction.
|
|
- `in`: index into bearings/entry array. Used to calculate the bearing just before the turn. Namely, the clockwise angle from true north to the
|
|
direction of travel immediately before the maneuver/passing the intersection. Bearings are given relative to the intersection. To get the bearing
|
|
in the direction of driving, the bearing has to be rotated by a value of 180. The value is not supplied for `depart` maneuvers.
|
|
- `out`: index into the bearings/entry array. Used to extract the bearing just after the turn. Namely, The clockwise angle from true north to the
|
|
direction of travel immediately after the maneuver/passing the intersection. The value is not supplied for `arrive` maneuvers.
|
|
|
|
#### Example
|
|
```
|
|
{
|
|
"location":[13.394718,52.543096],
|
|
"in":0,
|
|
"out":2,
|
|
"bearings":[60,150,240,330],
|
|
"entry":["false","true","true","true"]
|
|
}
|
|
```
|
|
|
|
### Waypoint
|
|
|
|
Object used to describe waypoint on a route.
|
|
|
|
#### Properties
|
|
|
|
- `name` Name of the street the coordinate snapped to
|
|
- `location` Array that contains the `[longitude, latitude]` pair of the snapped coordinate
|
|
- `hint` Unique internal identifier of the segment (ephemeral, not constant over data updates)
|
|
This can be used on subsequent request to significantly speed up the query and to connect multiple services.
|
|
E.g. you can use the `hint` value obtained by the `nearest` query as `hint` values for `route` inputs.
|
|
|
|
## Service `tile`
|
|
|
|
This generates [Mapbox Vector Tiles](https://www.mapbox.com/developers/vector-tiles/) that can be viewed with a vector-tile capable slippy-map viewer. The tiles contain road geometries and metadata that can be used to examine the routing graph. The tiles are generated directly from the data in-memory, so are in sync with actual routing results, and let you examine which roads are actually routable, and what weights they have applied.
|
|
|
|
### Request
|
|
```
|
|
http://{server}/tile/v1/{profile}/tile({x},{y},{zoom}).mvt
|
|
```
|
|
|
|
The `x`, `y`, and `zoom` values are the same as described at https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames, and are supported by vector tile viewers like [Mapbox GL JS](https://www.mapbox.com/mapbox-gl-js/api/).
|
|
|
|
### Response
|
|
|
|
The response object is either a binary encoded blob with a `Content-Type` of `application/x-protobuf`, or a `404` error. Note that OSRM is hard-coded to only return tiles from zoom level 12 and higher (to avoid accidentally returning extremely large vector tiles).
|
|
|
|
Vector tiles contain just a single layer named `speeds`. Within that layer, features can have `speed` (int) and `is_small` (boolean) attributes.
|