Integrate MLD in node bindings

This commit is contained in:
Patrick Niklaus 2017-03-17 15:19:56 +00:00 committed by Patrick Niklaus
parent 2cd4ba9a0a
commit 614398ed6c
9 changed files with 293 additions and 227 deletions

View File

@ -1,18 +1,30 @@
# OSRM <!-- Generated by documentation.js. Update this documentation by updating the source code. -->
The `OSRM` method is the main constructor for creating an OSRM instance. An OSRM instance requires a `.osrm` network, ### Table of Contents
which is prepared by the OSRM Backend C++ library.
You can create such a `.osrm` file by running the OSRM binaries we ship in `node_modules/osrm/lib/binding/` and default - [OSRM](#osrm)
profiles (e.g. for setting speeds and determining road types to route on) in `node_modules/osrm/profiles/`: - - [Methods](#methods)
- [General Options](#general-options)
- [route](#route)
- [nearest](#nearest)
- [table](#table)
- [tile](#tile)
- [match](#match)
- [trip](#trip)
- [Responses](#responses)
- [Route](#route-1)
- [RouteLeg](#routeleg)
- [RouteStep](#routestep)
- [StepManeuver](#stepmaneuver)
- [Waypoint](#waypoint)
node_modules/osrm/lib/binding/osrm-extract data.osm.pbf -p node_modules/osrm/profiles/car.lua ## OSRM
node_modules/osrm/lib/binding/osrm-contract data.osrm
Consult the [osrm-backend](https://github.com/Project-OSRM/osrm-backend) documentation or further details. The `OSRM` method is the main constructor for creating an OSRM instance.
An OSRM instance requires a `.osrm` dataset, which is prepared by the OSRM toolchain.
Once you have a complete `network.osrm` file, you can calculate networks in javascript with this library using the The documentation on `osrm-extract` and `osrm-contract` for more information.
methods below. To create an OSRM instance with your network you need to construct an instance like this: Once you have a complete `network.osrm` file, you can calculate routes in javascript with this library using the methods below.
To create an OSRM instance with your network you need to construct an instance like this:
```javascript ```javascript
var osrm = new OSRM('network.osrm'); var osrm = new OSRM('network.osrm');
@ -26,41 +38,44 @@ var osrm = new OSRM('network.osrm');
| [`osrm.nearest`](#nearest) | returns the nearest street segment for a given coordinate | | [`osrm.nearest`](#nearest) | returns the nearest street segment for a given coordinate |
| [`osrm.table`](#table) | computes distance tables for given coordinates | | [`osrm.table`](#table) | computes distance tables for given coordinates |
| [`osrm.match`](#match) | matches given coordinates to the road network | | [`osrm.match`](#match) | matches given coordinates to the road network |
| [`osrm.trip`](#trip) | Compute the shortest trip between given coordinates | | [`osrm.trip`](#trip) | computes the shortest trip between given coordinates |
| [`osrm.tile`](#tile) | Return vector tiles containing debugging info | | [`osrm.tile`](#tile) | Return vector tiles containing debugging info |
#### General Options #### General Options
Each OSRM method (except for `OSRM.tile()`) has set of general options as well as unique options, outlined below. Each OSRM method (except for `OSRM.tile()`) has set of general options as well as unique options,
outlined below.
| Option | Values | Description | Format | | Option | Values | Description | Format |
| --------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | | ----------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| coordinates | `array` of `coordinate` elements: `[{coordinate}, ...]` | The coordinates this request will use. | `array` with `[{lon},{lat}]` values, in decimal degrees | | coordinates | `array` of `coordinate` elements: `[{coordinate}, ...]` | The coordinates this request will use. | `array` with `[{lon},{lat}]` values, in decimal degrees |
| bearings | `array` of `bearing` elements: `[{bearing}, ...]` | Limits the search to segments with given bearing in degrees towards true north in clockwise direction. | `null` or `array` with `[{value},{range}]` `integer 0 .. 360,integer 0 .. 180` | | bearings | `array` of `bearing` elements: `[{bearing}, ...]` | Limits the search to segments with given bearing in degrees towards true north in clockwise direction. | `null` or `array` with `[{value},{range}]` `integer 0 .. 360,integer 0 .. 180` |
| radiuses | `array` of `radius` elements: `[{radius}, ...]` | Limits the search to given radius in meters. | `null` or `double >= 0` or `unlimited` (default) | | radiuses | `array` of `radius` elements: `[{radius}, ...]` | Limits the search to given radius in meters. | `null` or `double >= 0` or `unlimited` (default) |
| hints | `array` of `hint` elements: `[{hint}, ...]` | Hint to derive position in street network. | Base64 `string` | | hints | `array` of `hint` elements: `[{hint}, ...]` | Hint to derive position in street network. | Base64 `string` |
| generate\_hints | `true` (default) or `false` | Adds a Hint to the response which can be used in subsequent requests, see `hints` parameter. | `Boolean` |
## route ### route
Returns the fastest route between two or more coordinates while visiting the waypoints in order. Returns the fastest route between two or more coordinates while visiting the waypoints in order.
**Parameters** **Parameters**
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the route query. - `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the route query.
- `options.alternatives` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)]** Search for alternative routes and return as well. _Please note that even if an alternative route is requested, a result cannot be guaranteed._ (optional, default `false`) - `options.alternatives` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** Search for alternative routes and return as well.
- `options.steps` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)]** Return route steps for each route leg. (optional, default `false`) _Please note that even if an alternative route is requested, a result cannot be guaranteed._ (optional, default `false`)
- `options.annotations` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)] or \[[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>]** Return annotations for each route leg for duration, nodes, distance, weight, datasources and/or speed. Annotations can be `false` or `true` (no/full annotations) or an array of strings with `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`. (optional, default `false`) - `options.steps` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** Return route steps for each route leg. (optional, default `false`)
- `options.geometries` **\[[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]** Returned route geometry format (influences overview and per step). Can also be `geojson`. (optional, default `polyline`) - `options.geometries` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Returned route geometry format (influences overview and per step). Can also be `geojson`. (optional, default `polyline`)
- `options.overview` **\[[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]** Add overview geometry either `full`, `simplified` according to highest zoom level it could be display on, or not at all (`false`). (optional, default `simplified`) - `options.overview` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Add overview geometry either `full`, `simplified` according to highest zoom level it could be display on, or not at all (`false`). (optional, default `simplified`)
- `options.continue_straight` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)]** 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. `null`/`true`/`false` - `options.continue_straight` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** 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.
`null`/`true`/`false`
- `or` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** {Array} [options.annotations=false] Return annotations for each route leg.
Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`.
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** - `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
**Examples** **Examples**
```javascript ```javascript
var osrm = new OSRM("berlin-latest.osrm"); var osrm = new OSRM("berlin-latest.osrm");
osrm.route({coordinates: [[13.438640,52.519930], [13.415852, 52.513191]]}, function(err, result) { osrm.route({coordinates: [[52.519930,13.438640], [52.513191,13.415852]]}, function(err, result) {
if(err) throw err; if(err) throw err;
console.log(result.waypoints); // array of Waypoint objects representing all waypoints in order console.log(result.waypoints); // array of Waypoint objects representing all waypoints in order
console.log(result.routes); // array of Route objects ordered by descending recommendation rank console.log(result.routes); // array of Route objects ordered by descending recommendation rank
@ -69,7 +84,7 @@ osrm.route({coordinates: [[13.438640,52.519930], [13.415852, 52.513191]]}, funct
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** An array of [Waypoint](#waypoint) objects representing all waypoints in order AND an array of [`Route`](#route) objects ordered by descending recommendation rank. Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** An array of [Waypoint](#waypoint) objects representing all waypoints in order AND an array of [`Route`](#route) objects ordered by descending recommendation rank.
## nearest ### nearest
Snaps a coordinate to the street network and returns the nearest n matches. Snaps a coordinate to the street network and returns the nearest n matches.
@ -78,7 +93,7 @@ Note: `coordinates` in the general options only supports a single `{longitude},{
**Parameters** **Parameters**
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the nearest query. - `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the nearest query.
- `options.number` **\[[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)]** Number of nearest segments that should be returned. - `options.number` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?** Number of nearest segments that should be returned.
Must be an integer greater than or equal to `1`. (optional, default `1`) Must be an integer greater than or equal to `1`. (optional, default `1`)
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** - `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
@ -98,19 +113,21 @@ osrm.nearest(options, function(err, response) {
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `waypoints`. Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `waypoints`.
**`waypoints`**: array of [`Ẁaypoint`](#waypoint) objects sorted by distance to the input coordinate. **`waypoints`**: array of [`Ẁaypoint`](#waypoint) objects sorted by distance to the input coordinate.
Each object has an additional `distance` property, which is the distance in meters to the supplied Each object has an additional `distance` property, which is the distance in meters to the supplied input coordinate.
input coordinate.
## table ### table
Computes duration tables for the given locations. Allows for both symmetric and asymmetric tables. Computes duration tables for the given locations. Allows for both symmetric and asymmetric
tables.
**Parameters** **Parameters**
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the table query. - `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the table query.
- `options.sources` **\[[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)]** An array of `index` elements (`0 <= integer < #coordinates`) to use - `options.sources` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** An array of `index` elements (`0 <= integer < #coordinates`) to
use
location with given index as source. Default is to use all. location with given index as source. Default is to use all.
- `options.destinations` **\[[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)]** An array of `index` elements (`0 <= integer < #coordinates`) to use location with given index as destination. Default is to use all. - `options.destinations` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** An array of `index` elements (`0 <= integer <
#coordinates`) to use location with given index as destination. Default is to use all.
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** - `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
**Examples** **Examples**
@ -132,24 +149,25 @@ osrm.table(options, function(err, response) {
``` ```
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `durations`, `sources`, and `destinations`. Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `durations`, `sources`, and `destinations`.
**`durations`**: array of arrays that stores the matrix in row-major order. `durations[i][j]` **`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.
gives the travel time from the i-th waypoint to the j-th waypoint. Values are given in seconds. Values are given in seconds.
**`sources`**: array of [`Ẁaypoint`](#waypoint) objects describing all sources in order. **`sources`**: array of [`Ẁaypoint`](#waypoint) objects describing all sources in order.
**`destinations`**: array of [`Ẁaypoint`](#waypoint) objects describing all destinations in order. **`destinations`**: array of [`Ẁaypoint`](#waypoint) objects describing all destinations in order.
## tile ### tile
This generates [Mapbox Vector Tiles](https://mapbox.com/vector-tiles) that can be viewed with a This generates [Mapbox Vector Tiles](https://mapbox.com/vector-tiles) that can be viewed with a
vector-tile capable slippy-map viewer. The tiles contain road geometries and metadata that can 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, 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, so are in sync with actual routing results, and let you examine which roads are actually
routable,
and what weights they have applied. and what weights they have applied.
**Parameters** **Parameters**
- `ZXY` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** an array consisting of `x`, `y`, and `z` values representing tile coordinates like - `ZXY` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** an array consisting of `x`, `y`, and `z` values representing tile coordinates like
[wiki.openstreetmap.org/wiki/Slippy_map_tilenames](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames) [wiki.openstreetmap.org/wiki/Slippy_map_tilenames](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/>. and are supported by vector tile viewers like [Mapbox GL JS](https://www.mapbox.com/mapbox-gl-js/api/).
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** - `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
**Examples** **Examples**
@ -164,7 +182,7 @@ osrm.tile([0, 0, 0], function(err, response) {
Returns **[Buffer](https://nodejs.org/api/buffer.html)** contains a Protocol Buffer encoded vector tile. Returns **[Buffer](https://nodejs.org/api/buffer.html)** contains a Protocol Buffer encoded vector tile.
## match ### match
Map matching matches given GPS points to the road network in the most plausible way. 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 Please note the request might result multiple sub-traces. Large jumps in the timestamps
@ -175,15 +193,13 @@ if they can not be matched successfully.
**Parameters** **Parameters**
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the match query. - `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the match query.
- `options.steps` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)]** Return route steps for each route. (optional, default `false`) - `options.steps` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** Return route steps for each route. (optional, default `false`)
- `options.annotations` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)] or \[[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>]** Return annotations for each route leg for duration, nodes, distance, weight, datasources and/or speed. Annotations can be `false` or `true` (no/full annotations) or an array of strings with `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`. (optional, default `false`) - `options.geometries` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Returned route geometry format (influences overview and per step). Can also be `geojson`. (optional, default `polyline`)
- `options.geometries` **\[[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]** Returned route geometry format (influences overview - `options.overview` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Add overview geometry either `full`, `simplified` according to highest zoom level it could be display on, or not at all (`false`). (optional, default `simplified`)
and per step). Can also be `geojson`. (optional, default `polyline`) - `options.timestamps` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)>?** Timestamp of the input location (integers, UNIX-like timestamp).
- `options.overview` **\[[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]** Add overview geometry either `full`, `simplified` - `options.radiuses` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Standard deviation of GPS precision used for map matching. If applicable use GPS accuracy (`double >= 0`, default `5m`).
according to highest zoom level it could be display on, or not at all (`false`). (optional, default `simplified`) - `or` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** {Array} [options.annotations=false] Return annotations for each route leg.
- `options.timestamps` **\[[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)>]** Timestamp of the input location (integers, UNIX-like timestamp). Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`.
- `options.radiuses` **\[[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)]** Standard deviation of GPS precision used for map matching.
If applicable use GPS accuracy (`double >= 0`, default `5m`).
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** - `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
**Examples** **Examples**
@ -203,53 +219,36 @@ osrm.match(options, function(err, response) {
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `tracepoints` and `matchings`. Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `tracepoints` and `matchings`.
**`tracepoints`** Array of [`Ẁaypoint`](#waypoint) objects representing all points of the trace in order. **`tracepoints`** Array of [`Ẁaypoint`](#waypoint) 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 If the trace point was ommited by map matching because it is an outlier, the entry will be null.
`Waypoint` object includes two additional properties, 1) `matchings_index`: Index to the Each `Waypoint` object includes two additional properties, 1) `matchings_index`: Index to the
[`Route`](#route) object in matchings the sub-trace was matched to, 2) `waypoint_index`: Index of [`Route`](#route) object in matchings the sub-trace was matched to, 2) `waypoint_index`: Index of
the waypoint inside the matched route. the waypoint inside the matched route.
**`matchings`** is an array of [`Route`](#route) objects that **`matchings`** is an array of [`Route`](#route) objects that assemble the trace. Each `Route` object has an additional `confidence` property,
assemble the trace. Each `Route` object has an additional `confidence` property, which is the confidence of which is the confidence of the matching. float value between `0` and `1`. `1` is very confident that the matching is correct.
the matching. float value between `0` and `1`. `1` is very confident that the matching is correct.
## trip ### 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 fastest path, as TSP is NP-hard it is only an approximation. Note that all input coordinates have to be connected for the trip service to work. The trip plugin solves the Traveling Salesman Problem using a greedy heuristic
(farthest-insertion algorithm) for 10 or _ more waypoints and uses brute force for less than 10
waypoints. The returned path does not have to be the shortest path, _ as TSP is NP-hard it is
only an approximation.
Note that all input coordinates have to be connected for the trip service to work.
**Parameters** **Parameters**
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the trip query. - `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the trip query.
- `options.roundtrip` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)]** Return route is a roundtrip. (optional, default `true`) - `options.steps` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** Return route steps for each route. (optional, default `false`)
- `options.source` **\[[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]** Return route starts at `any` coordinate. Can also be `first`. (optional, default `any`) - `options.geometries` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Returned route geometry format (influences overview and per step). Can also be `geojson`. (optional, default `polyline`)
- `options.destination` **\[[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]** Return route ends at `any` coordinate. Can also be `last`. (optional, default `any`) - `options.overview` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Add overview geometry either `full`, `simplified` (optional, default `simplified`)
- `options.steps` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)]** Return route steps for each route. (optional, default `false`) - `options.roundtrip` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** Return route is a roundtrip. (optional, default `true`)
- `options.annotations` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)] or \[[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>]** Return annotations for each route leg for duration, nodes, distance, weight, datasources and/or speed. Annotations can be `false` or `true` (no/full annotations) or an array of strings with `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`. (optional, default `false`) - `options.source` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Return route starts at `any` or `first` coordinate. (optional, default `any`)
- `options.geometries` **\[[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]** Returned route geometry format (influences overview - `options.destination` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Return route ends at `any` or `last` coordinate. (optional, default `any`)
and per step). Can also be `geojson`. (optional, default `polyline`) - `or` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** {Array} [options.annotations=false] Return annotations for each route leg. Can be `false`,
- `options.overview` **\[[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]** Add overview geometry either `full`, `simplified` (optional, default `simplified`) `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`.
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** - `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
**Fixing Start and End Points**
It is possible to explicitly set the start or end coordinate of the trip. When source is set to `first`, the first coordinate is used as start coordinate of the trip in the output. When destination is set to `last`, the last coordinate will be used as destination of the trip in the returned output. If you specify `any`, any of the coordinates can be used as the first or last coordinate in the output.
However, if `source=any&destination=any` the returned round-trip will still start at the first input coordinate by default.
Currently, not all combinations of `roundtrip`, `source` and `destination` are supported.
Right now, the following combinations are possible:
| roundtrip | source | destination | supported |
| :-- | :-- | :-- | :-- |
| true | first | last | **yes** |
| true | first | any | **yes** |
| true | any | last | **yes** |
| true | any | any | **yes** |
| false | first | last | **yes** |
| false | first | any | no |
| false | any | last | no |
| false | any | any | no |
**Examples** **Examples**
Roundtrip Request
```javascript ```javascript
var osrm = new OSRM('network.osrm'); var osrm = new OSRM('network.osrm');
var options = { var options = {
@ -265,69 +264,57 @@ osrm.trip(options, function(err, response) {
}); });
``` ```
Non Roundtrip Request
```javascript
var osrm = new OSRM('network.osrm');
var options = {
coordinates: [
[13.36761474609375, 52.51663871100423],
[13.374481201171875, 52.506191342034576]
],
source: "first",
destination: "last",
roundtrip: false
}
osrm.trip(options, function(err, response) {
if (err) throw err;
console.log(response.waypoints); // array of Waypoint objects
console.log(response.trips); // array of Route objects
});
```
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `waypoints` and `trips`. Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `waypoints` and `trips`.
**`waypoints`**: an array of [`Ẁaypoint`](#waypoint) objects representing all waypoints in input order. **`waypoints`**: an array of [`Waypoint`](#waypoint) objects representing all waypoints in input order.
Each Waypoint object has the following additional properties, 1) `trips_index`: index to trips of the Each Waypoint object has the following additional properties,
sub-trip the point was matched to, and 2) `waypoint_index`: index of the point in the trip. 1) `trips_index`: index to trips of the sub-trip the point was matched to,
and 2) `waypoint_index`: index of the point in the trip.
**`trips`**: an array of [`Route`](#route) objects that assemble the trace. **`trips`**: an array of [`Route`](#route) objects that assemble the trace.
# Responses ## Responses
Responses Responses
## Route ### Route
Represents a route through (potentially multiple) waypoints. Represents a route through (potentially multiple) waypoints.
**Parameters** **Parameters**
- `exteral` **documentation** in [`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#route) - `exteral` **documentation** in
[`osrm-backend`](../http.md#route)
## RouteLeg ### RouteLeg
Represents a route between two waypoints. Represents a route between two waypoints.
**Parameters** **Parameters**
- `exteral` **documentation** in [`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#routeleg) - `exteral` **documentation** in
[`osrm-backend`](../http.md#routeleg)
## RouteStep ### 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. 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.
**Parameters** **Parameters**
- `exteral` **documentation** in [`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#routestep) - `exteral` **documentation** in
[`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#routestep)
## StepManeuver ### StepManeuver
**Parameters** **Parameters**
- `exteral` **documentation** in [`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#stepmanuever) - `exteral` **documentation** in
[`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#stepmaneuver)
## Waypoint ### Waypoint
Object used to describe waypoint on a route. Object used to describe waypoint on a route.
**Parameters** **Parameters**
- `exteral` **documentation** in [`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#waypoint) - `exteral` **documentation** in
[`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#waypoint)

View File

@ -117,6 +117,7 @@ inline engine_config_ptr argumentsToEngineConfig(const Nan::FunctionCallbackInfo
{ {
engine_config->storage_config = engine_config->storage_config =
osrm::StorageConfig(*v8::String::Utf8Value(Nan::To<v8::String>(path).ToLocalChecked())); osrm::StorageConfig(*v8::String::Utf8Value(Nan::To<v8::String>(path).ToLocalChecked()));
engine_config->use_shared_memory = false;
} }
if (!shared_memory->IsUndefined()) if (!shared_memory->IsUndefined())
{ {
@ -138,6 +139,34 @@ inline engine_config_ptr argumentsToEngineConfig(const Nan::FunctionCallbackInfo
return engine_config_ptr(); return engine_config_ptr();
} }
auto algorithm = params->Get(Nan::New("algorithm").ToLocalChecked());
if (algorithm->IsString())
{
auto algorithm_str = Nan::To<v8::String>(algorithm).ToLocalChecked();
if (*v8::String::Utf8Value(algorithm_str) == std::string("CH"))
{
engine_config->algorithm = osrm::EngineConfig::Algorithm::CH;
}
else if (*v8::String::Utf8Value(algorithm_str) == std::string("CoreCH"))
{
engine_config->algorithm = osrm::EngineConfig::Algorithm::CoreCH;
}
else if (*v8::String::Utf8Value(algorithm_str) == std::string("MLD"))
{
engine_config->algorithm = osrm::EngineConfig::Algorithm::MLD;
}
else
{
Nan::ThrowError("algorithm option must be one of 'CH', 'CoreCH', or 'MLD'.");
return engine_config_ptr();
}
}
else if (!algorithm->IsUndefined())
{
Nan::ThrowError("algorithm option must be a string and one of 'CH', 'CoreCH', or 'MLD'.");
return engine_config_ptr();
}
return engine_config; return engine_config;
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "osrm", "name": "osrm",
"version": "5.7.0", "version": "5.7.0-latest",
"private": true, "private": true,
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.", "description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
"dependencies": { "dependencies": {
@ -8,15 +8,14 @@
"cucumber": "^1.2.1", "cucumber": "^1.2.1",
"d3-queue": "^2.0.3", "d3-queue": "^2.0.3",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"nan": "^2.1.0",
"node-cmake": "^1.2.1",
"node-pre-gyp": "^0.6.34",
"node-timeout": "0.0.4", "node-timeout": "0.0.4",
"polyline": "^0.2.0", "polyline": "^0.2.0",
"request": "^2.69.0", "request": "^2.69.0",
"rimraf": "^2.5.4", "rimraf": "^2.5.4",
"xmlbuilder": "^4.2.1", "xmlbuilder": "^4.2.1"
"nan": "^2.1.0",
"node-cmake": "^1.2.1",
"node-pre-gyp": "~0.6.30"
}, },
"bin": { "bin": {
"cucumber": "./node_modules/cucumber/bin/cucumber.js" "cucumber": "./node_modules/cucumber/bin/cucumber.js"
@ -32,17 +31,15 @@
"test": "npm run lint && node ./node_modules/cucumber/bin/cucumber.js features/ -p verify && node ./node_modules/cucumber/bin/cucumber.js features/ -p mld", "test": "npm run lint && node ./node_modules/cucumber/bin/cucumber.js features/ -p verify && node ./node_modules/cucumber/bin/cucumber.js features/ -p mld",
"clean-test": "rm -rf test/cache", "clean-test": "rm -rf test/cache",
"cucumber": "./node_modules/cucumber/bin/cucumber.js", "cucumber": "./node_modules/cucumber/bin/cucumber.js",
"build-api-docs": "./scripts/build_api_docs.sh", "docs": "./scripts/build_api_docs.sh",
"preinstall": "npm install node-pre-gyp",
"install": "node-pre-gyp install --fallback-to-build=false" "install": "node-pre-gyp install --fallback-to-build=false"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/Project-OSRM/osrm-backend.git" "url": "https://github.com/Project-OSRM/osrm-backend.git"
}, },
"author": "", "author": "Project OSRM Team",
"license": "ISC", "license": "BSD 2-Clause",
"bugs": { "bugs": {
"url": "https://github.com/Project-OSRM/osrm-backend/issues" "url": "https://github.com/Project-OSRM/osrm-backend/issues"
}, },
@ -51,12 +48,23 @@
"node": ">=4.0.0" "node": ">=4.0.0"
}, },
"devDependencies": { "devDependencies": {
"aws-sdk": "~2.0.31",
"babel-cli": "^6.24.0",
"babel-polyfill": "^6.23.0",
"babel-preset-es2015": "^6.24.0",
"babel-preset-react": "^6.23.0",
"babel-preset-stage-0": "^6.22.0",
"babelify": "^7.3.0",
"brfs": "^1.4.3",
"browserify": "^14.1.0",
"docbox": "^1.0.2", "docbox": "^1.0.2",
"eslint": "^2.4.0", "eslint": "^2.4.0",
"tape": "^4.2.2",
"aws-sdk": "~2.0.31", "uglifyjs": "^2.4.10"
"tape": "^4.2.2"
}, },
"bundleDependencies": [
"node-pre-gyp"
],
"main": "lib/index.js", "main": "lib/index.js",
"binary": { "binary": {
"module_name": "node-osrm", "module_name": "node-osrm",

View File

@ -14,6 +14,8 @@ babel -V >/dev/null 2>&1 || { echo >&2 "Can't find babel. Add node_modules/.bin
browserify --help >/dev/null 2>&1 || { echo >&2 "Can't find browserify. Add node_modules/.bin to your path, or run via \"npm run\""; exit 1; } browserify --help >/dev/null 2>&1 || { echo >&2 "Can't find browserify. Add node_modules/.bin to your path, or run via \"npm run\""; exit 1; }
uglifyjs -V >/dev/null 2>&1 || { echo >&2 "Can't find uglifyjs. Add node_modules/.bin to your path, or run via \"npm run\""; exit 1; } uglifyjs -V >/dev/null 2>&1 || { echo >&2 "Can't find uglifyjs. Add node_modules/.bin to your path, or run via \"npm run\""; exit 1; }
documentation build src/nodejs/node_osrm.cpp --polyglot -f md -o docs/nodejs/api.md
# Clean up previous version # Clean up previous version
rm -rf build/docs rm -rf build/docs

View File

@ -20,7 +20,7 @@ target_link_libraries(node-osrm osrm)
# node-osrm artifacts in ${BINDING_DIR} to depend targets on # node-osrm artifacts in ${BINDING_DIR} to depend targets on
set(ARTIFACTS "") set(ARTIFACTS "")
set(OSRM_BINARIES osrm-extract osrm-contract osrm-routed osrm-datastore osrm-components) set(OSRM_BINARIES osrm-extract osrm-contract osrm-routed osrm-datastore osrm-components osrm-partition osrm-customize)
foreach(binary ${OSRM_BINARIES}) foreach(binary ${OSRM_BINARIES})
add_custom_command(OUTPUT ${BINDING_DIR}/${binary} add_custom_command(OUTPUT ${BINDING_DIR}/${binary}
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${binary}> ${BINDING_DIR} COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${binary}> ${BINDING_DIR}

View File

@ -48,15 +48,14 @@ NAN_MODULE_INIT(Engine::Init)
Nan::Set(target, whoami, fn); Nan::Set(target, whoami, fn);
} }
// clang-format off
/** /**
* *
* The `OSRM` method is the main constructor for creating an OSRM instance. An OSRM instance * The `OSRM` method is the main constructor for creating an OSRM instance.
* requires a `.osrm` network, * An OSRM instance requires a `.osrm` dataset, which is prepared by the OSRM toolchain.
* which is prepared by the OSRM Backend C++ library. Once you have a complete `network.osrm` file, * The documentation on `osrm-extract` and `osrm-contract` for more information.
* you can calculate * Once you have a complete `network.osrm` file, you can calculate routes in javascript with this library using the methods below.
* networks in javascript with this library using the methods below. To create an OSRM instance with * To create an OSRM instance with your network you need to construct an instance like this:
* your network
* you need to construct an instance like this:
* *
* ```javascript * ```javascript
* var osrm = new OSRM('network.osrm'); * var osrm = new OSRM('network.osrm');
@ -78,27 +77,18 @@ NAN_MODULE_INIT(Engine::Init)
* Each OSRM method (except for `OSRM.tile()`) has set of general options as well as unique options, * Each OSRM method (except for `OSRM.tile()`) has set of general options as well as unique options,
* outlined below. * outlined below.
* *
* | Option | Values | Description * | Option | Values | Description | Format |
* | Format | * | ----------- | -----------------| ------------ | -------|
* | ----------- | ------------------------------------------------------- | * | coordinates | `array` of `coordinate` elements: `[{coordinate}, ...]` | The coordinates this request will use. | `array` with `[{lon},{lat}]` values, in decimal degrees |
* ------------------------------------------------------------------------------------------------------ * | bearings | `array` of `bearing` elements: `[{bearing}, ...]` | Limits the search to segments with given bearing in degrees towards true north in clockwise direction. | `null` or `array` with `[{value},{range}]` `integer 0 .. 360,integer 0 .. 180` |
* | ------------------------------------------------------------------------------ | * | radiuses | `array` of `radius` elements: `[{radius}, ...]` | Limits the search to given radius in meters. | `null` or `double >= 0` or `unlimited` (default) |
* | coordinates | `array` of `coordinate` elements: `[{coordinate}, ...]` | The coordinates this * | hints | `array` of `hint` elements: `[{hint}, ...]` | Hint to derive position in street network. | Base64 `string` |
* request will use. | `array` with
* `[{lon},{lat}]` values, in decimal degrees |
* | bearings | `array` of `bearing` elements: `[{bearing}, ...]` | Limits the search to
* segments with given bearing in degrees towards true north in clockwise direction. | `null` or
* `array` with `[{value},{range}]` `integer 0 .. 360,integer 0 .. 180` |
* | radiuses | `array` of `radius` elements: `[{radius}, ...]` | Limits the search to
* given radius in meters. | `null` or
* `double >= 0` or `unlimited` (default) |
* | hints | `array` of `hint` elements: `[{hint}, ...]` | Hint to derive position
* in street network. | Base64 `string`
* |
* *
* @class OSRM * @class OSRM
* *
*
*/ */
// clang-format on
NAN_METHOD(Engine::New) NAN_METHOD(Engine::New)
{ {
if (info.IsConstructCall()) if (info.IsConstructCall())
@ -195,6 +185,7 @@ inline void async(const Nan::FunctionCallbackInfo<v8::Value> &info,
Nan::AsyncQueueWorker(new Worker{self->this_, std::move(params), service, callback}); Nan::AsyncQueueWorker(new Worker{self->this_, std::move(params), service, callback});
} }
// clang-format off
/** /**
* Returns the fastest route between two or more coordinates while visiting the waypoints in order. * Returns the fastest route between two or more coordinates while visiting the waypoints in order.
* *
@ -205,19 +196,14 @@ inline void async(const Nan::FunctionCallbackInfo<v8::Value> &info,
* *Please note that even if an alternative route is requested, a result cannot be guaranteed.* * *Please note that even if an alternative route is requested, a result cannot be guaranteed.*
* @param {Boolean} [options.steps=false] Return route steps for each route leg. * @param {Boolean} [options.steps=false] Return route steps for each route leg.
* @param {Boolean} or {Array} [options.annotations=false] Return annotations for each route leg. * @param {Boolean} or {Array} [options.annotations=false] Return annotations for each route leg.
* Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, * Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`.
* `datasources`, `speed`. * @param {String} [options.geometries=polyline] Returned route geometry format (influences overview and per step). Can also be `geojson`.
* @param {String} [options.geometries=polyline] Returned route geometry format (influences overview * @param {String} [options.overview=simplified] Add overview geometry either `full`, `simplified` according to highest zoom level it could be display on, or not at all (`false`).
* and per step). Can also be `geojson`. * @param {Boolean} [options.continue_straight] 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.
* @param {String} [options.overview=simplified] Add overview geometry either `full`, `simplified`
* according to highest zoom level it could be display on, or not at all (`false`).
* @param {Boolean} [options.continue_straight] 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.
* `null`/`true`/`false` * `null`/`true`/`false`
* @param {Function} callback * @param {Function} callback
* *
* @returns {Object} An array of [Waypoint](#waypoint) objects representing all waypoints in order * @returns {Object} An array of [Waypoint](#waypoint) objects representing all waypoints in order AND an array of [`Route`](#route) objects ordered by descending recommendation rank.
* AND an array of [`Route`](#route) objects ordered by descending recommendation rank.
* *
* @example * @example
* var osrm = new OSRM("berlin-latest.osrm"); * var osrm = new OSRM("berlin-latest.osrm");
@ -227,11 +213,13 @@ inline void async(const Nan::FunctionCallbackInfo<v8::Value> &info,
* console.log(result.routes); // array of Route objects ordered by descending recommendation rank * console.log(result.routes); // array of Route objects ordered by descending recommendation rank
* }); * });
*/ */
// clang-format on
NAN_METHOD(Engine::route) // NAN_METHOD(Engine::route) //
{ {
async(info, &argumentsToRouteParameter, &osrm::OSRM::Route, true); async(info, &argumentsToRouteParameter, &osrm::OSRM::Route, true);
} }
// clang-format off
/** /**
* Snaps a coordinate to the street network and returns the nearest n matches. * Snaps a coordinate to the street network and returns the nearest n matches.
* *
@ -245,11 +233,8 @@ NAN_METHOD(Engine::route) //
* @param {Function} callback * @param {Function} callback
* *
* @returns {Object} containing `waypoints`. * @returns {Object} containing `waypoints`.
* **`waypoints`**: array of [`aypoint`](#waypoint) objects sorted by distance to the input * **`waypoints`**: array of [`aypoint`](#waypoint) objects sorted by distance to the input coordinate.
* coordinate. * Each object has an additional `distance` property, which is the distance in meters to the supplied input coordinate.
* Each object has an additional `distance` property, which is the distance in meters to the
* supplied
* input coordinate.
* *
* @example * @example
* var osrm = new OSRM('network.osrm'); * var osrm = new OSRM('network.osrm');
@ -262,11 +247,13 @@ NAN_METHOD(Engine::route) //
* console.log(response.waypoints); // array of Waypoint objects * console.log(response.waypoints); // array of Waypoint objects
* }); * });
*/ */
// clang-format on
NAN_METHOD(Engine::nearest) // NAN_METHOD(Engine::nearest) //
{ {
async(info, &argumentsToNearestParameter, &osrm::OSRM::Nearest, false); async(info, &argumentsToNearestParameter, &osrm::OSRM::Nearest, false);
} }
// clang-format off
/** /**
* Computes duration tables for the given locations. Allows for both symmetric and asymmetric * Computes duration tables for the given locations. Allows for both symmetric and asymmetric
* tables. * tables.
@ -282,11 +269,10 @@ NAN_METHOD(Engine::nearest) //
* @param {Function} callback * @param {Function} callback
* *
* @returns {Object} containing `durations`, `sources`, and `destinations`. * @returns {Object} containing `durations`, `sources`, and `destinations`.
* **`durations`**: array of arrays that stores the matrix in row-major order. `durations[i][j]` * **`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.
* gives the travel time from the i-th waypoint to the j-th waypoint. Values are given in seconds. * Values are given in seconds.
* **`sources`**: array of [`aypoint`](#waypoint) objects describing all sources in order. * **`sources`**: array of [`aypoint`](#waypoint) objects describing all sources in order.
* **`destinations`**: array of [`aypoint`](#waypoint) objects describing all destinations in * **`destinations`**: array of [`aypoint`](#waypoint) objects describing all destinations in order.
* order.
* *
* @example * @example
* var osrm = new OSRM('network.osrm'); * var osrm = new OSRM('network.osrm');
@ -303,11 +289,13 @@ NAN_METHOD(Engine::nearest) //
* console.log(response.destinations); // array of Waypoint objects * console.log(response.destinations); // array of Waypoint objects
* }); * });
*/ */
// clang-format on
NAN_METHOD(Engine::table) // NAN_METHOD(Engine::table) //
{ {
async(info, &argumentsToTableParameter, &osrm::OSRM::Table, true); async(info, &argumentsToTableParameter, &osrm::OSRM::Table, true);
} }
// clang-format off
/** /**
* This generates [Mapbox Vector Tiles](https://mapbox.com/vector-tiles) that can be viewed with a * This generates [Mapbox Vector Tiles](https://mapbox.com/vector-tiles) that can be viewed with a
* vector-tile capable slippy-map viewer. The tiles contain road geometries and metadata that can * vector-tile capable slippy-map viewer. The tiles contain road geometries and metadata that can
@ -318,11 +306,9 @@ NAN_METHOD(Engine::table) //
* *
* @name tile * @name tile
* @memberof OSRM * @memberof OSRM
* @param {Array} ZXY - an array consisting of `x`, `y`, and `z` values representing tile * @param {Array} ZXY - an array consisting of `x`, `y`, and `z` values representing tile coordinates like
* coordinates like
* [wiki.openstreetmap.org/wiki/Slippy_map_tilenames](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames) * [wiki.openstreetmap.org/wiki/Slippy_map_tilenames](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames)
* and are supported by vector tile viewers like [Mapbox GL * and are supported by vector tile viewers like [Mapbox GL JS](https://www.mapbox.com/mapbox-gl-js/api/).
* JS](https://www.mapbox.com/mapbox-gl-js/api/.
* @param {Function} callback * @param {Function} callback
* *
* @returns {Buffer} contains a Protocol Buffer encoded vector tile. * @returns {Buffer} contains a Protocol Buffer encoded vector tile.
@ -334,11 +320,13 @@ NAN_METHOD(Engine::table) //
* fs.writeFileSync('./tile.vector.pbf', response); // write the buffer to a file * fs.writeFileSync('./tile.vector.pbf', response); // write the buffer to a file
* }); * });
*/ */
// clang-format on
NAN_METHOD(Engine::tile) NAN_METHOD(Engine::tile)
{ {
async(info, &argumentsToTileParameters, &osrm::OSRM::Tile, {/*unused*/}); async(info, &argumentsToTileParameters, &osrm::OSRM::Tile, {/*unused*/});
} }
// clang-format off
/** /**
* Map matching matches given GPS points to the road network in the most plausible way. * 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 * Please note the request might result multiple sub-traces. Large jumps in the timestamps
@ -351,31 +339,21 @@ NAN_METHOD(Engine::tile)
* @param {Object} options - Object literal containing parameters for the match query. * @param {Object} options - Object literal containing parameters for the match query.
* @param {Boolean} [options.steps=false] Return route steps for each route. * @param {Boolean} [options.steps=false] Return route steps for each route.
* @param {Boolean} or {Array} [options.annotations=false] Return annotations for each route leg. * @param {Boolean} or {Array} [options.annotations=false] Return annotations for each route leg.
* Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, * Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`.
* `datasources`, `speed`. * @param {String} [options.geometries=polyline] Returned route geometry format (influences overview and per step). Can also be `geojson`.
* @param {String} [options.geometries=polyline] Returned route geometry format (influences overview * @param {String} [options.overview=simplified] Add overview geometry either `full`, `simplified` according to highest zoom level it could be display on, or not at all (`false`).
* and per step). Can also be `geojson`. * @param {Array<Number>} [options.timestamps] Timestamp of the input location (integers, UNIX-like timestamp).
* @param {String} [options.overview=simplified] Add overview geometry either `full`, `simplified` * @param {Array} [options.radiuses] Standard deviation of GPS precision used for map matching. If applicable use GPS accuracy (`double >= 0`, default `5m`).
* according to highest zoom level it could be display on, or not at all (`false`).
* @param {Array<Number>} [options.timestamps] Timestamp of the input location (integers, UNIX-like
* timestamp).
* @param {Array} [options.radiuses] Standard deviation of GPS precision used for map matching.
* If applicable use GPS accuracy (`double >= 0`, default `5m`).
* @param {Function} callback * @param {Function} callback
* *
* @returns {Object} containing `tracepoints` and `matchings`. * @returns {Object} containing `tracepoints` and `matchings`.
* **`tracepoints`** Array of [`aypoint`](#waypoint) objects representing all points of the trace * **`tracepoints`** Array of [`aypoint`](#waypoint) objects representing all points of the trace in order.
* in order.
* If the trace point was ommited by map matching because it is an outlier, the entry will be null. * If the trace point was ommited by map matching because it is an outlier, the entry will be null.
* Each * Each `Waypoint` object includes two additional properties, 1) `matchings_index`: Index to the
* `Waypoint` object includes two additional properties, 1) `matchings_index`: Index to the
* [`Route`](#route) object in matchings the sub-trace was matched to, 2) `waypoint_index`: Index of * [`Route`](#route) object in matchings the sub-trace was matched to, 2) `waypoint_index`: Index of
* the waypoint inside the matched route. * the waypoint inside the matched route.
* **`matchings`** is an array of [`Route`](#route) objects that * **`matchings`** is an array of [`Route`](#route) objects that assemble the trace. Each `Route` object has an additional `confidence` property,
* assemble the trace. Each `Route` object has an additional `confidence` property, which is the * which is the confidence of the matching. float value between `0` and `1`. `1` is very confident that the matching is correct.
* confidence of
* the matching. float value between `0` and `1`. `1` is very confident that the matching is
* correct.
* *
* @example * @example
* var osrm = new OSRM('network.osrm'); * var osrm = new OSRM('network.osrm');
@ -390,11 +368,13 @@ NAN_METHOD(Engine::tile)
* }); * });
* *
*/ */
// clang-format on
NAN_METHOD(Engine::match) // NAN_METHOD(Engine::match) //
{ {
async(info, &argumentsToMatchParameter, &osrm::OSRM::Match, true); async(info, &argumentsToMatchParameter, &osrm::OSRM::Match, true);
} }
// clang-format off
/** /**
* The trip plugin solves the Traveling Salesman Problem using a greedy heuristic * The trip plugin solves the Traveling Salesman Problem using a greedy heuristic
* (farthest-insertion algorithm) for 10 or * more waypoints and uses brute force for less than 10 * (farthest-insertion algorithm) for 10 or * more waypoints and uses brute force for less than 10
@ -406,11 +386,9 @@ NAN_METHOD(Engine::match) //
* @memberof OSRM * @memberof OSRM
* @param {Object} options - Object literal containing parameters for the trip query. * @param {Object} options - Object literal containing parameters for the trip query.
* @param {Boolean} [options.steps=false] Return route steps for each route. * @param {Boolean} [options.steps=false] Return route steps for each route.
* @param {Boolean} or {Array} [options.annotations=false] Return annotations for each route leg. * @param {Boolean} or {Array} [options.annotations=false] Return annotations for each route leg. Can be `false`,
* Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, * `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`.
* `datasources`, `speed`. * @param {String} [options.geometries=polyline] Returned route geometry format (influences overview and per step). Can also be `geojson`.
* @param {String} [options.geometries=polyline] Returned route geometry format (influences overview
* and per step). Can also be `geojson`.
* @param {String} [options.overview=simplified] Add overview geometry either `full`, `simplified` * @param {String} [options.overview=simplified] Add overview geometry either `full`, `simplified`
* @param {Function} callback * @param {Function} callback
* @param {Boolean} [options.roundtrip=true] Return route is a roundtrip. * @param {Boolean} [options.roundtrip=true] Return route is a roundtrip.
@ -418,11 +396,10 @@ NAN_METHOD(Engine::match) //
* @param {String} [options.destination=any] Return route ends at `any` or `last` coordinate. * @param {String} [options.destination=any] Return route ends at `any` or `last` coordinate.
* *
* @returns {Object} containing `waypoints` and `trips`. * @returns {Object} containing `waypoints` and `trips`.
* **`waypoints`**: an array of [`Waypoint`](#waypoint) objects representing all waypoints in input * **`waypoints`**: an array of [`Waypoint`](#waypoint) objects representing all waypoints in input order.
* order. * Each Waypoint object has the following additional properties,
* Each Waypoint object has the following additional properties, 1) `trips_index`: index to trips of * 1) `trips_index`: index to trips of the sub-trip the point was matched to,
* the * and 2) `waypoint_index`: index of the point in the trip.
* sub-trip the point was matched to, and 2) `waypoint_index`: index of the point in the trip.
* **`trips`**: an array of [`Route`](#route) objects that assemble the trace. * **`trips`**: an array of [`Route`](#route) objects that assemble the trace.
* *
* @example * @example
@ -439,6 +416,7 @@ NAN_METHOD(Engine::match) //
* console.log(response.trips); // array of Route objects * console.log(response.trips); // array of Route objects
* }); * });
*/ */
// clang-format on
NAN_METHOD(Engine::trip) // NAN_METHOD(Engine::trip) //
{ {
async(info, &argumentsToTripParameter, &osrm::OSRM::Trip, true); async(info, &argumentsToTripParameter, &osrm::OSRM::Trip, true);
@ -456,7 +434,7 @@ NAN_METHOD(Engine::trip) //
* @memberof Responses * @memberof Responses
* *
* @param {documentation} exteral in * @param {documentation} exteral in
* [`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#route) * [`osrm-backend`](../http.md#route)
* *
*/ */
@ -467,7 +445,7 @@ NAN_METHOD(Engine::trip) //
* @memberof Responses * @memberof Responses
* *
* @param {documentation} exteral in * @param {documentation} exteral in
* [`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#routeleg) * [`osrm-backend`](../http.md#routeleg)
* *
*/ */

View File

@ -1,6 +1,8 @@
var OSRM = require('../../'); var OSRM = require('../../');
var test = require('tape'); var test = require('tape');
var berlin_path = require('./osrm-data-path').data_path; var berlin_path = require('./osrm-data-path').data_path;
var berlin_mld_path = require('./osrm-data-path').mld_data_path;
var berlin_corech_path = require('./osrm-data-path').corech_data_path;
test('constructor: throws if new keyword is not used', function(assert) { test('constructor: throws if new keyword is not used', function(assert) {
assert.plan(1); assert.plan(1);
@ -23,7 +25,7 @@ test('constructor: does not accept more than one parameter', function(assert) {
test('constructor: throws if necessary files do not exist', function(assert) { test('constructor: throws if necessary files do not exist', function(assert) {
assert.plan(1); assert.plan(1);
assert.throws(function() { new OSRM("missing.osrm"); }, assert.throws(function() { new OSRM("missing.osrm"); },
/Invalid file paths/); /Error opening missing.osrm.names/);
}); });
test('constructor: takes a shared memory argument', function(assert) { test('constructor: takes a shared memory argument', function(assert) {
@ -34,22 +36,52 @@ test('constructor: takes a shared memory argument', function(assert) {
test('constructor: throws if shared_memory==false with no path defined', function(assert) { test('constructor: throws if shared_memory==false with no path defined', function(assert) {
assert.plan(1); assert.plan(1);
assert.throws(function() { var osrm = new OSRM({shared_memory: false}); }, assert.throws(function() { new OSRM({shared_memory: false}); },
/Shared_memory must be enabled if no path is specified/); /Shared_memory must be enabled if no path is specified/);
}); });
test('constructor: throws if given a non-bool shared_memory option', function(assert) { test('constructor: throws if given a non-bool shared_memory option', function(assert) {
assert.plan(1); assert.plan(1);
assert.throws(function() { var osrm = new OSRM({path: berlin_path, shared_memory: "a"}); }, assert.throws(function() { new OSRM({path: berlin_path, shared_memory: 'a'}); },
/Shared_memory option must be a boolean/); /Shared_memory option must be a boolean/);
}); });
test('constructor: throws if given a non-string/obj argument', function(assert) { test('constructor: throws if given a non-string/obj argument', function(assert) {
assert.plan(1); assert.plan(1);
assert.throws(function() { var osrm = new OSRM(true); }, assert.throws(function() { new OSRM(true); },
/Parameter must be a path or options object/); /Parameter must be a path or options object/);
}); });
test('constructor: throws if given an unkown algorithm', function(assert) {
assert.plan(1);
assert.throws(function() { new OSRM({algorithm: 'Foo', shared_memory: true}); },
/algorithm option must be one of 'CH', 'CoreCH', or 'MLD'/);
});
test('constructor: throws if given an invalid algorithm', function(assert) {
assert.plan(1);
assert.throws(function() { new OSRM({algorithm: 3, shared_memory: true}); },
/algorithm option must be a string and one of 'CH', 'CoreCH', or 'MLD'/);
});
test('constructor: loads MLD if given as algorithm', function(assert) {
assert.plan(1);
var osrm = new OSRM({algorithm: 'MLD', path: berlin_mld_path});
assert.ok(osrm);
});
test('constructor: loads CH if given as algorithm', function(assert) {
assert.plan(1);
var osrm = new OSRM({algorithm: 'CH', path: berlin_path});
assert.ok(osrm);
});
test('constructor: loads CoreCH if given as algorithm', function(assert) {
assert.plan(1);
var osrm = new OSRM({algorithm: 'CoreCH', path: berlin_corech_path});
assert.ok(osrm);
});
require('./route.js'); require('./route.js');
require('./trip.js'); require('./trip.js');
require('./match.js'); require('./match.js');

View File

@ -2,7 +2,11 @@ var path = require('path');
if (process.env.OSRM_DATA_PATH !== undefined) { if (process.env.OSRM_DATA_PATH !== undefined) {
exports.data_path = path.join(path.resolve(process.env.OSRM_DATA_PATH), "ch/berlin.osrm"); exports.data_path = path.join(path.resolve(process.env.OSRM_DATA_PATH), "ch/berlin.osrm");
exports.mld_data_path = path.join(path.resolve(process.env.OSRM_DATA_PATH), "mld/berlin.osrm");
exports.corech_data_path = path.join(path.resolve(process.env.OSRM_DATA_PATH), "corech/berlin.osrm");
console.log('Setting custom data path to ' + exports.data_path); console.log('Setting custom data path to ' + exports.data_path);
} else { } else {
exports.data_path = path.resolve(path.join(__dirname, "../data/ch/berlin.osrm")); exports.data_path = path.resolve(path.join(__dirname, "../data/ch/berlin.osrm"));
exports.mld_data_path = path.resolve(path.join(__dirname, "../data/mld/berlin.osrm"));
exports.corech_data_path = path.resolve(path.join(__dirname, "../data/corech/berlin.osrm"));
} }

View File

@ -1,6 +1,8 @@
var OSRM = require('../../'); var OSRM = require('../../');
var test = require('tape'); var test = require('tape');
var berlin_path = require('./osrm-data-path').data_path; var berlin_path = require('./osrm-data-path').data_path;
var berlin_mld_path = require('./osrm-data-path').mld_data_path;
var berlin_corech_path = require('./osrm-data-path').corech_data_path;
test('route: routes Berlin', function(assert) { test('route: routes Berlin', function(assert) {
assert.plan(5); assert.plan(5);
@ -14,6 +16,30 @@ test('route: routes Berlin', function(assert) {
}); });
}); });
test('route: routes Berlin on MLD', function(assert) {
assert.plan(5);
var osrm = new OSRM({path: berlin_mld_path, algorithm: 'MLD'});
osrm.route({coordinates: [[13.43864,52.51993],[13.415852,52.513191]]}, function(err, route) {
assert.ifError(err);
assert.ok(route.waypoints);
assert.ok(route.routes);
assert.ok(route.routes.length);
assert.ok(route.routes[0].geometry);
});
});
test('route: routes Berlin on CoreCH', function(assert) {
assert.plan(5);
var osrm = new OSRM({path: berlin_corech_path, algorithm: 'CoreCH'});
osrm.route({coordinates: [[13.43864,52.51993],[13.415852,52.513191]]}, function(err, route) {
assert.ifError(err);
assert.ok(route.waypoints);
assert.ok(route.routes);
assert.ok(route.routes.length);
assert.ok(route.routes[0].geometry);
});
});
test('route: throws with too few or invalid args', function(assert) { test('route: throws with too few or invalid args', function(assert) {
assert.plan(3); assert.plan(3);
var osrm = new OSRM(berlin_path); var osrm = new OSRM(berlin_path);