return speed annotations
This commit is contained in:
parent
1ed1bae249
commit
921ff43acf
@ -147,7 +147,7 @@ module.exports = function () {
|
|||||||
// if header matches 'a:*', parse out the values for *
|
// if header matches 'a:*', parse out the values for *
|
||||||
// and return in that header
|
// and return in that header
|
||||||
headers.forEach((k) => {
|
headers.forEach((k) => {
|
||||||
let whitelist = ['duration', 'distance', 'datasources', 'nodes', 'weight'];
|
let whitelist = ['duration', 'distance', 'datasources', 'nodes', 'weight', 'speed'];
|
||||||
if (k.match(/^a:/)) {
|
if (k.match(/^a:/)) {
|
||||||
let a_type = k.slice(2);
|
let a_type = k.slice(2);
|
||||||
if (whitelist.indexOf(a_type) == -1)
|
if (whitelist.indexOf(a_type) == -1)
|
||||||
|
@ -39,7 +39,7 @@ Feature: Weight tests
|
|||||||
# FIXME include/engine/guidance/assemble_geometry.hpp:95
|
# FIXME include/engine/guidance/assemble_geometry.hpp:95
|
||||||
Scenario: Start and target on the same and adjacent edge
|
Scenario: Start and target on the same and adjacent edge
|
||||||
Given the query options
|
Given the query options
|
||||||
| annotations | distance,duration,weight,nodes |
|
| annotations | distance,duration,weight,nodes,speed |
|
||||||
|
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
@ -53,11 +53,11 @@ Feature: Weight tests
|
|||||||
| abc |
|
| abc |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | distances | weights | times | a:distance | a:duration | a:weight |
|
| waypoints | route | distances | weights | times | a:distance | a:duration | a:weight | a:speed |
|
||||||
| s,t | abc,abc | 20m,0m | 2.1,0 | 2.1s,0s | 20.017685 | 3 | 3 |
|
| s,t | abc,abc | 20m,0m | 2.1,0 | 2.1s,0s | 20.017685 | 3 | 3 | 6.672562 |
|
||||||
| t,s | abc,abc | 20m,0m | 2.1,0 | 2.1s,0s | 20.017685 | 3.1 | 3.1 |
|
| t,s | abc,abc | 20m,0m | 2.1,0 | 2.1s,0s | 20.017685 | 3.1 | 3.1 | 6.457318 |
|
||||||
| s,e | abc,abc | 40m,0m | 4.1,0 | 4.1s,0s | 30.026527:10.008842 | 3.1:1 | 3.1:1 |
|
| s,e | abc,abc | 40m,0m | 4.1,0 | 4.1s,0s | 30.026527:10.008842 | 3.1:1 | 3.1:1 | 9.685976:10.008842 |
|
||||||
| e,s | abc,abc | 40m,0m | 4.1,0 | 4.1s,0s | 10.008842:30.026527 | 1:3.1 | 1:3.1 |
|
| e,s | abc,abc | 40m,0m | 4.1,0 | 4.1s,0s | 10.008842:30.026527 | 1:3.1 | 1:3.1 | 10.008842:9.685976 |
|
||||||
|
|
||||||
|
|
||||||
Scenario: Step weights -- way_function: fail if no weight or weight_per_meter property
|
Scenario: Step weights -- way_function: fail if no weight or weight_per_meter property
|
||||||
|
@ -235,6 +235,14 @@ class RouteAPI : public BaseAPI
|
|||||||
auto &leg_geometry = leg_geometries[idx];
|
auto &leg_geometry = leg_geometries[idx];
|
||||||
util::json::Object annotation;
|
util::json::Object annotation;
|
||||||
|
|
||||||
|
if (parameters.annotations_type & RouteParameters::AnnotationsType::Speed)
|
||||||
|
{
|
||||||
|
annotation.values["speed"] = GetAnnotations(
|
||||||
|
leg_geometry, [](const guidance::LegGeometry::Annotation &anno) {
|
||||||
|
return anno.distance / anno.duration;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (parameters.annotations_type & RouteParameters::AnnotationsType::Duration)
|
if (parameters.annotations_type & RouteParameters::AnnotationsType::Duration)
|
||||||
{
|
{
|
||||||
annotation.values["duration"] = GetAnnotations(
|
annotation.values["duration"] = GetAnnotations(
|
||||||
|
@ -75,7 +75,8 @@ struct RouteParameters : public BaseParameters
|
|||||||
Distance = 0x04,
|
Distance = 0x04,
|
||||||
Weight = 0x08,
|
Weight = 0x08,
|
||||||
Datasources = 0x10,
|
Datasources = 0x10,
|
||||||
All = Duration | Nodes | Distance | Weight | Datasources
|
Speed = 0x20,
|
||||||
|
All = Duration | Nodes | Distance | Weight | Datasources | Speed
|
||||||
};
|
};
|
||||||
|
|
||||||
RouteParameters() = default;
|
RouteParameters() = default;
|
||||||
|
@ -61,7 +61,8 @@ struct RouteParametersGrammar : public BaseParametersGrammar<Iterator, Signature
|
|||||||
|
|
||||||
annotations_type.add("duration", AnnotationsType::Duration)(
|
annotations_type.add("duration", AnnotationsType::Duration)(
|
||||||
"nodes", AnnotationsType::Nodes)("distance", AnnotationsType::Distance)(
|
"nodes", AnnotationsType::Nodes)("distance", AnnotationsType::Distance)(
|
||||||
"weight", AnnotationsType::Weight)("datasources", AnnotationsType::Datasources);
|
"weight", AnnotationsType::Weight)("datasources", AnnotationsType::Datasources)(
|
||||||
|
"speed", AnnotationsType::Speed);
|
||||||
|
|
||||||
base_rule =
|
base_rule =
|
||||||
BaseGrammar::base_rule(qi::_r1) |
|
BaseGrammar::base_rule(qi::_r1) |
|
||||||
|
@ -350,6 +350,21 @@ BOOST_AUTO_TEST_CASE(valid_route_urls)
|
|||||||
true);
|
true);
|
||||||
BOOST_CHECK_EQUAL(result_15->annotations, true);
|
BOOST_CHECK_EQUAL(result_15->annotations, true);
|
||||||
|
|
||||||
|
RouteParameters reference_speed{};
|
||||||
|
reference_speed.annotations_type = RouteParameters::AnnotationsType::Duration;
|
||||||
|
reference_speed.coordinates = coords_1;
|
||||||
|
auto result_speed =
|
||||||
|
parseParameters<RouteParameters>("1,2;3,4?geometries=polyline&"
|
||||||
|
"overview=simplified&annotations=duration,distance,speed");
|
||||||
|
BOOST_CHECK(result_speed);
|
||||||
|
BOOST_CHECK_EQUAL(reference_speed.geometries, result_speed->geometries);
|
||||||
|
BOOST_CHECK_EQUAL(reference_speed.overview, result_speed->overview);
|
||||||
|
BOOST_CHECK_EQUAL(result_speed->annotations_type == (RouteParameters::AnnotationsType::Duration |
|
||||||
|
RouteParameters::AnnotationsType::Distance |
|
||||||
|
RouteParameters::AnnotationsType::Speed),
|
||||||
|
true);
|
||||||
|
BOOST_CHECK_EQUAL(result_speed->annotations, true);
|
||||||
|
|
||||||
// parse multiple annotations correctly
|
// parse multiple annotations correctly
|
||||||
RouteParameters reference_16{};
|
RouteParameters reference_16{};
|
||||||
reference_16.annotations_type = RouteParameters::AnnotationsType::Duration |
|
reference_16.annotations_type = RouteParameters::AnnotationsType::Duration |
|
||||||
|
Loading…
Reference in New Issue
Block a user