From 025eb02a6a0f60bcd826235b09ffca722bc23bd6 Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Thu, 20 Jan 2022 18:38:51 +0100 Subject: [PATCH] Fix stats tests by summarizing integer distances --- js/util/CheapRuler.js | 13 +++++++++++-- tests/format/Gpx.test.js | 1 + tests/util/CheapRuler.test.js | 2 +- tests/util/StdPath.test.js | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/js/util/CheapRuler.js b/js/util/CheapRuler.js index 3ac144d..ad12fd1 100644 --- a/js/util/CheapRuler.js +++ b/js/util/CheapRuler.js @@ -109,8 +109,17 @@ btools = {}; btools.util.CheapRuler.__static_initialize(); btools.util.CheapRuler.toIntegerLngLat = (coordinate) => { - const ilon = (coordinate[0] + 180) * 1e6; - const ilat = (coordinate[1] + 90) * 1e6; + const ilon = Math.round((coordinate[0] + 180) * 1e6); + const ilat = Math.round((coordinate[1] + 90) * 1e6); return [ilon, ilat]; }; + +btools.util.CheapRuler.calcDistance = (ilon1, ilat1, ilon2, ilat2) => { + const distanceFloat = btools.util.CheapRuler.distance(ilon1, ilat1, ilon2, ilat2); + + // Convert to integer (no decimals) values to match BRouter OsmPathElement.calcDistance: + // `(int)(CheapRuler.distance(ilon, ilat, p.getILon(), p.getILat()) + 1.0 );` + // https://github.com/abrensch/brouter/blob/1640bafa800f8bab7aebde797edc99fdbeea3b07/brouter-core/src/main/java/btools/router/OsmPathElement.java#L81 + return Math.trunc(distanceFloat + 1.0); +}; diff --git a/tests/format/Gpx.test.js b/tests/format/Gpx.test.js index df9d972..9235bf5 100644 --- a/tests/format/Gpx.test.js +++ b/tests/format/Gpx.test.js @@ -10,6 +10,7 @@ require('../../js/format/Gpx.js'); const fs = require('fs'); +// lonlats=8.467712,49.488117;8.470598,49.488849 + turnInstructionMode = 5 (gpsies-style) const geoJson = require('./data/track.json'); // lonlats=8.467712,49.488117;8.469354,49.488394;8.470556,49.488946;8.469982,49.489176 + turnInstructionMode = 5 // console log in Export._formatTrack diff --git a/tests/util/CheapRuler.test.js b/tests/util/CheapRuler.test.js index 3da5fbb..28b9498 100644 --- a/tests/util/CheapRuler.test.js +++ b/tests/util/CheapRuler.test.js @@ -30,7 +30,7 @@ test('total distance', () => { const [ilon1, ilat1] = btools.util.CheapRuler.toIntegerLngLat(coord1); const [ilon2, ilat2] = btools.util.CheapRuler.toIntegerLngLat(coord2); - const distance = btools.util.CheapRuler.distance(ilon1, ilat1, ilon2, ilat2); + const distance = btools.util.CheapRuler.calcDistance(ilon1, ilat1, ilon2, ilat2); totalDistance += distance; } diff --git a/tests/util/StdPath.test.js b/tests/util/StdPath.test.js index a0a4be1..9673a5c 100644 --- a/tests/util/StdPath.test.js +++ b/tests/util/StdPath.test.js @@ -19,7 +19,7 @@ test('simple track', () => { const [ilon1, ilat1] = btools.util.CheapRuler.toIntegerLngLat(coord1); const [ilon2, ilat2] = btools.util.CheapRuler.toIntegerLngLat(coord2); - const distance = btools.util.CheapRuler.distance(ilon1, ilat1, ilon2, ilat2); + const distance = btools.util.CheapRuler.calcDistance(ilon1, ilat1, ilon2, ilat2); const deltaHeight = coord2[2] - coord1[2]; stdPath.computeKinematic(rc, distance, deltaHeight, true);