diff --git a/docs/nodejs/api.md b/docs/nodejs/api.md
index bbe8fcb45..fd6ab418e 100644
--- a/docs/nodejs/api.md
+++ b/docs/nodejs/api.md
@@ -1,18 +1,30 @@
-# OSRM
+
-The `OSRM` method is the main constructor for creating an OSRM instance. An OSRM instance requires a `.osrm` network,
-which is prepared by the OSRM Backend C++ library.
+### Table of Contents
-You can create such a `.osrm` file by running the OSRM binaries we ship in `node_modules/osrm/lib/binding/` and default
-profiles (e.g. for setting speeds and determining road types to route on) in `node_modules/osrm/profiles/`:
+- [OSRM](#osrm)
+ - - [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
- node_modules/osrm/lib/binding/osrm-contract data.osrm
+## OSRM
-Consult the [osrm-backend](https://github.com/Project-OSRM/osrm-backend) documentation or further details.
-
-Once you have a complete `network.osrm` file, you can calculate networks 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:
+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.
+The documentation on `osrm-extract` and `osrm-contract` for more information.
+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
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.table`](#table) | computes distance tables for given coordinates |
| [`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 |
#### 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 |
-| --------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
-| 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) |
-| 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` |
+| Option | Values | Description | 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) |
+| hints | `array` of `hint` elements: `[{hint}, ...]` | Hint to derive position in street network. | Base64 `string` |
-## route
+### route
Returns the fastest route between two or more coordinates while visiting the waypoints in order.
**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.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.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.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)<[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.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.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.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.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`
+- `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)**
**Examples**
```javascript
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;
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
@@ -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.
-## nearest
+### nearest
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**
- `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`)
- `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`.
**`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
-input coordinate.
+ Each object has an additional `distance` property, which is the distance in meters to the supplied 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**
- `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.
- - `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)**
**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`.
-**`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.
+**`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 [`Ẁaypoint`](#waypoint) objects describing all sources 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
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,
+so are in sync with actual routing results, and let you examine which roads are actually
+routable,
and what weights they have applied.
**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
- [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]\(.
+ [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/).
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
**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.
-## match
+### 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
@@ -175,15 +193,13 @@ if they can not be matched successfully.
**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.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)<[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.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.timestamps` **\[[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)>]** Timestamp of the input location (integers, UNIX-like timestamp).
- - `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`).
+ - `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.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.timestamps` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)>?** Timestamp of the input location (integers, UNIX-like timestamp).
+ - `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`).
+- `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)**
**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`.
**`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
-`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
-the waypoint inside the matched route.
-**`matchings`** is an array of [`Route`](#route) objects that
-assemble the trace. Each `Route` object has an additional `confidence` property, which is the confidence of
-the matching. float value between `0` and `1`. `1` is very confident that the matching is correct.
+ If the trace point was ommited by map matching because it is an outlier, the entry will be null.
+ 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
+ the waypoint inside the matched route.
+**`matchings`** is an array of [`Route`](#route) objects that assemble the trace. Each `Route` object has an additional `confidence` property,
+ which is the confidence of 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.roundtrip` **\[[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)]** Return route is a roundtrip. (optional, default `true`)
- - `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.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.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)<[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.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.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` (optional, default `simplified`)
+ - `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.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.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`)
+- `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)**
-**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**
-Roundtrip Request
```javascript
var osrm = new OSRM('network.osrm');
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`.
-**`waypoints`**: an array of [`Ẁaypoint`](#waypoint) objects representing all waypoints in input order.
-Each Waypoint object has the following additional properties, 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.
+**`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 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.
-# Responses
+## Responses
Responses
-## Route
+### Route
Represents a route through (potentially multiple) waypoints.
**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.
**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**
-- `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**
-- `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.
**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)
diff --git a/include/nodejs/node_osrm_support.hpp b/include/nodejs/node_osrm_support.hpp
index 2ddde9a36..adf128674 100644
--- a/include/nodejs/node_osrm_support.hpp
+++ b/include/nodejs/node_osrm_support.hpp
@@ -117,6 +117,7 @@ inline engine_config_ptr argumentsToEngineConfig(const Nan::FunctionCallbackInfo
{
engine_config->storage_config =
osrm::StorageConfig(*v8::String::Utf8Value(Nan::To(path).ToLocalChecked()));
+ engine_config->use_shared_memory = false;
}
if (!shared_memory->IsUndefined())
{
@@ -138,6 +139,34 @@ inline engine_config_ptr argumentsToEngineConfig(const Nan::FunctionCallbackInfo
return engine_config_ptr();
}
+ auto algorithm = params->Get(Nan::New("algorithm").ToLocalChecked());
+ if (algorithm->IsString())
+ {
+ auto algorithm_str = Nan::To(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;
}
diff --git a/package.json b/package.json
index bc65c0b7b..1d4ebe478 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "osrm",
- "version": "5.7.0",
+ "version": "5.7.0-latest",
"private": true,
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
"dependencies": {
@@ -8,15 +8,14 @@
"cucumber": "^1.2.1",
"d3-queue": "^2.0.3",
"mkdirp": "^0.5.1",
+ "nan": "^2.1.0",
+ "node-cmake": "^1.2.1",
+ "node-pre-gyp": "^0.6.34",
"node-timeout": "0.0.4",
"polyline": "^0.2.0",
"request": "^2.69.0",
"rimraf": "^2.5.4",
- "xmlbuilder": "^4.2.1",
-
- "nan": "^2.1.0",
- "node-cmake": "^1.2.1",
- "node-pre-gyp": "~0.6.30"
+ "xmlbuilder": "^4.2.1"
},
"bin": {
"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",
"clean-test": "rm -rf test/cache",
"cucumber": "./node_modules/cucumber/bin/cucumber.js",
- "build-api-docs": "./scripts/build_api_docs.sh",
-
- "preinstall": "npm install node-pre-gyp",
+ "docs": "./scripts/build_api_docs.sh",
"install": "node-pre-gyp install --fallback-to-build=false"
},
"repository": {
"type": "git",
"url": "https://github.com/Project-OSRM/osrm-backend.git"
},
- "author": "",
- "license": "ISC",
+ "author": "Project OSRM Team",
+ "license": "BSD 2-Clause",
"bugs": {
"url": "https://github.com/Project-OSRM/osrm-backend/issues"
},
@@ -51,12 +48,23 @@
"node": ">=4.0.0"
},
"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",
"eslint": "^2.4.0",
-
- "aws-sdk": "~2.0.31",
- "tape": "^4.2.2"
+ "tape": "^4.2.2",
+ "uglifyjs": "^2.4.10"
},
+ "bundleDependencies": [
+ "node-pre-gyp"
+ ],
"main": "lib/index.js",
"binary": {
"module_name": "node-osrm",
diff --git a/scripts/build_api_docs.sh b/scripts/build_api_docs.sh
index 46a71c542..2d14bd402 100755
--- a/scripts/build_api_docs.sh
+++ b/scripts/build_api_docs.sh
@@ -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; }
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
rm -rf build/docs
diff --git a/src/nodejs/CMakeLists.txt b/src/nodejs/CMakeLists.txt
index b21917fa7..fe39eee6c 100644
--- a/src/nodejs/CMakeLists.txt
+++ b/src/nodejs/CMakeLists.txt
@@ -20,7 +20,7 @@ target_link_libraries(node-osrm osrm)
# node-osrm artifacts in ${BINDING_DIR} to depend targets on
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})
add_custom_command(OUTPUT ${BINDING_DIR}/${binary}
COMMAND ${CMAKE_COMMAND} -E copy $ ${BINDING_DIR}
diff --git a/src/nodejs/node_osrm.cpp b/src/nodejs/node_osrm.cpp
index d70af09e9..fce2eaf4e 100644
--- a/src/nodejs/node_osrm.cpp
+++ b/src/nodejs/node_osrm.cpp
@@ -48,15 +48,14 @@ NAN_MODULE_INIT(Engine::Init)
Nan::Set(target, whoami, fn);
}
+// clang-format off
/**
*
- * The `OSRM` method is the main constructor for creating an OSRM instance. An OSRM instance
- * requires a `.osrm` network,
- * which is prepared by the OSRM Backend C++ library. Once you have a complete `network.osrm` file,
- * you can calculate
- * networks 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:
+ * 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.
+ * The documentation on `osrm-extract` and `osrm-contract` for more information.
+ * 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
* 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,
* outlined below.
*
- * | Option | Values | Description
- * | 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) |
- * | hints | `array` of `hint` elements: `[{hint}, ...]` | Hint to derive position
- * in street network. | Base64 `string`
- * |
+ * | Option | Values | Description | 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) |
+ * | hints | `array` of `hint` elements: `[{hint}, ...]` | Hint to derive position in street network. | Base64 `string` |
*
* @class OSRM
*
+ *
*/
+// clang-format on
NAN_METHOD(Engine::New)
{
if (info.IsConstructCall())
@@ -195,6 +185,7 @@ inline void async(const Nan::FunctionCallbackInfo &info,
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.
*
@@ -205,19 +196,14 @@ inline void async(const Nan::FunctionCallbackInfo &info,
* *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} 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`,
- * `datasources`, `speed`.
- * @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`
- * 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`
+ * Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`.
+ * @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` 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`
* @param {Function} callback
*
- * @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.
+ * @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.
*
* @example
* var osrm = new OSRM("berlin-latest.osrm");
@@ -227,11 +213,13 @@ inline void async(const Nan::FunctionCallbackInfo &info,
* console.log(result.routes); // array of Route objects ordered by descending recommendation rank
* });
*/
+// clang-format on
NAN_METHOD(Engine::route) //
{
async(info, &argumentsToRouteParameter, &osrm::OSRM::Route, true);
}
+// clang-format off
/**
* Snaps a coordinate to the street network and returns the nearest n matches.
*
@@ -245,11 +233,8 @@ NAN_METHOD(Engine::route) //
* @param {Function} callback
*
* @returns {Object} containing `waypoints`.
- * **`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
- * 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 input coordinate.
*
* @example
* var osrm = new OSRM('network.osrm');
@@ -262,11 +247,13 @@ NAN_METHOD(Engine::route) //
* console.log(response.waypoints); // array of Waypoint objects
* });
*/
+// clang-format on
NAN_METHOD(Engine::nearest) //
{
async(info, &argumentsToNearestParameter, &osrm::OSRM::Nearest, false);
}
+// clang-format off
/**
* Computes duration tables for the given locations. Allows for both symmetric and asymmetric
* tables.
@@ -282,11 +269,10 @@ NAN_METHOD(Engine::nearest) //
* @param {Function} callback
*
* @returns {Object} containing `durations`, `sources`, and `destinations`.
- * **`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.
+ * **`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 [`Ẁ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.
*
* @example
* var osrm = new OSRM('network.osrm');
@@ -303,11 +289,13 @@ NAN_METHOD(Engine::nearest) //
* console.log(response.destinations); // array of Waypoint objects
* });
*/
+// clang-format on
NAN_METHOD(Engine::table) //
{
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
* 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
* @memberof OSRM
- * @param {Array} ZXY - 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)
- * and are supported by vector tile viewers like [Mapbox GL
- * JS](https://www.mapbox.com/mapbox-gl-js/api/.
+ * @param {Array} ZXY - 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)
+ * and are supported by vector tile viewers like [Mapbox GL JS](https://www.mapbox.com/mapbox-gl-js/api/).
* @param {Function} callback
*
* @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
* });
*/
+// clang-format on
NAN_METHOD(Engine::tile)
{
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.
* 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 {Boolean} [options.steps=false] Return route steps for each route.
* @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`,
- * `datasources`, `speed`.
- * @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`
- * according to highest zoom level it could be display on, or not at all (`false`).
- * @param {Array} [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`).
+ * Can be `false`, `true` or an array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed`.
+ * @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` according to highest zoom level it could be display on, or not at all (`false`).
+ * @param {Array} [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
*
* @returns {Object} containing `tracepoints` and `matchings`.
- * **`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
- * `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
- * the waypoint inside the matched route.
- * **`matchings`** is an array of [`Route`](#route) objects that
- * assemble the trace. Each `Route` object has an additional `confidence` property, which is the
- * confidence of
- * the matching. float value between `0` and `1`. `1` is very confident that the matching is
- * correct.
+ * **`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 `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
+ * the waypoint inside the matched route.
+ * **`matchings`** is an array of [`Route`](#route) objects that assemble the trace. Each `Route` object has an additional `confidence` property,
+ * which is the confidence of the matching. float value between `0` and `1`. `1` is very confident that the matching is correct.
*
* @example
* var osrm = new OSRM('network.osrm');
@@ -390,11 +368,13 @@ NAN_METHOD(Engine::tile)
* });
*
*/
+// clang-format on
NAN_METHOD(Engine::match) //
{
async(info, &argumentsToMatchParameter, &osrm::OSRM::Match, true);
}
+// clang-format off
/**
* 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
@@ -406,11 +386,9 @@ NAN_METHOD(Engine::match) //
* @memberof OSRM
* @param {Object} options - Object literal containing parameters for the trip query.
* @param {Boolean} [options.steps=false] Return route steps for each route.
- * @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`,
- * `datasources`, `speed`.
- * @param {String} [options.geometries=polyline] Returned route geometry format (influences overview
- * and per step). Can also be `geojson`.
+ * @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`, `datasources`, `speed`.
+ * @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 {Function} callback
* @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.
*
* @returns {Object} containing `waypoints` and `trips`.
- * **`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
- * sub-trip the point was matched to, and 2) `waypoint_index`: index of the point in the trip.
+ * **`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 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.
*
* @example
@@ -439,6 +416,7 @@ NAN_METHOD(Engine::match) //
* console.log(response.trips); // array of Route objects
* });
*/
+// clang-format on
NAN_METHOD(Engine::trip) //
{
async(info, &argumentsToTripParameter, &osrm::OSRM::Trip, true);
@@ -456,7 +434,7 @@ NAN_METHOD(Engine::trip) //
* @memberof Responses
*
* @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
*
* @param {documentation} exteral in
- * [`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#routeleg)
+ * [`osrm-backend`](../http.md#routeleg)
*
*/
diff --git a/test/nodejs/index.js b/test/nodejs/index.js
index 7cca6f93c..2ea1b859c 100644
--- a/test/nodejs/index.js
+++ b/test/nodejs/index.js
@@ -1,6 +1,8 @@
var OSRM = require('../../');
var test = require('tape');
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) {
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) {
assert.plan(1);
assert.throws(function() { new OSRM("missing.osrm"); },
- /Invalid file paths/);
+ /Error opening missing.osrm.names/);
});
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) {
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/);
});
test('constructor: throws if given a non-bool shared_memory option', function(assert) {
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/);
});
test('constructor: throws if given a non-string/obj argument', function(assert) {
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/);
});
+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('./trip.js');
require('./match.js');
diff --git a/test/nodejs/osrm-data-path.js b/test/nodejs/osrm-data-path.js
index b6220b764..d443e8e8a 100644
--- a/test/nodejs/osrm-data-path.js
+++ b/test/nodejs/osrm-data-path.js
@@ -2,7 +2,11 @@ var path = require('path');
if (process.env.OSRM_DATA_PATH !== undefined) {
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);
} else {
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"));
}
diff --git a/test/nodejs/route.js b/test/nodejs/route.js
index e83920678..8cc26f57c 100644
--- a/test/nodejs/route.js
+++ b/test/nodejs/route.js
@@ -1,6 +1,8 @@
var OSRM = require('../../');
var test = require('tape');
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) {
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) {
assert.plan(3);
var osrm = new OSRM(berlin_path);