Merge pull request #2549 from oxidase/issue/2546

Fix omitting the last point's coordinates in the geometry field
This commit is contained in:
Patrick Niklaus 2016-06-21 16:41:35 +02:00 committed by GitHub
commit ec4dcee8bd
4 changed files with 36 additions and 3 deletions

View File

@ -1,5 +1,6 @@
var util = require('util');
var d3 = require('d3-queue');
var polyline = require('polyline');
module.exports = function () {
this.When(/^I match I should get$/, (table, callback) => {
@ -35,6 +36,7 @@ module.exports = function () {
route = '',
duration = '',
annotation = '',
geometry = '',
OSMIDs = '';
@ -63,6 +65,11 @@ module.exports = function () {
annotation = this.annotationList(json.matchings[0]);
}
if (headers.has('geometry')) {
if (json.matchings.length != 1) throw new Error('*** Checking geometry only supported for matchings with one subtrace');
geometry = json.matchings[0].geometry;
}
if (headers.has('OSM IDs')) {
if (json.matchings.length != 1) throw new Error('*** CHecking annotation only supported for matchings with one subtrace');
OSMIDs = this.OSMIDList(json.matchings[0]);
@ -85,6 +92,13 @@ module.exports = function () {
got.annotation = annotation.toString();
}
if (headers.has('geometry')) {
if (this.queryParams['geometries'] === 'polyline')
got.geometry = polyline.decode(geometry).toString();
else
got.geometry = geometry;
}
if (headers.has('OSM IDs')) {
got['OSM IDs'] = OSMIDs;
}

View File

@ -128,3 +128,21 @@ Feature: Basic Map Matching
| trace | matchings | OSM IDs |
| abeh | abcedgh | 1,2,3,2,3,4,5,4,5,6,7 |
| abci | abc,ci | 1,2,3,2,3,8,3,8 |
Scenario: Testbot - Geometry details
Given the query options
| overview | full |
| geometries | polyline |
Given the node map
| a | b | c |
| | d | |
And the ways
| nodes | oneway |
| abc | no |
| bd | no |
When I match I should get
| trace | matchings | geometry |
| abd | abd | 1,1,1,1.00009,1,1.00009,0.99991,1.00009 |

View File

@ -9,7 +9,8 @@
"node-timeout": "0.0.4",
"request": "^2.69.0",
"xmlbuilder": "^4.2.1",
"chalk": "^1.1.3"
"chalk": "^1.1.3",
"polyline": "^0.2.0"
},
"bin": {
"cucumber": "./node_modules/cucumber/bin/cucumber.js"

View File

@ -85,12 +85,12 @@ std::vector<util::Coordinate> assembleOverview(const std::vector<LegGeometry> &l
std::vector<util::Coordinate> overview_geometry;
overview_geometry.reserve(overview_size);
auto leg_index = 0UL;
auto leg_reverse_index = leg_geometries.size();
for (const auto &geometry : leg_geometries)
{
auto begin = geometry.locations.begin();
auto end = geometry.locations.end();
if (leg_index < leg_geometries.size() - 1)
if (--leg_reverse_index > 0)
{
end = std::prev(end);
}