Mercurial > gemma
changeset 677:3605af94d1ee
fix: prepare profile calculation algorithm fixed
The x-value of a point is determined according to its reference point
* in case of the first segment, it is the first element of the line string
* in case of consecutive segments it is the last point of the previous segment
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Wed, 19 Sep 2018 16:37:03 +0200 |
parents | bd215c4325ce |
children | 899116318d58 89b497d0ee0f |
files | client/src/application/lib/geo.js client/tests/unit/geo/geo.spec.js |
diffstat | 2 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/client/src/application/lib/geo.js Wed Sep 19 16:09:09 2018 +0200 +++ b/client/src/application/lib/geo.js Wed Sep 19 16:37:03 2018 +0200 @@ -61,6 +61,11 @@ * c) calculating the total length of the given profile * d) transposes the datapoints given to the first point of the first section * + * The calculation of total equals the sum of partial distances between points + * The x-value of a point is determined according to its reference point + * in case of the first segment, it is the first element of the line string + * in case of consecutive segments it is the last point of the previous segment + * * @param {object} feature */ const transform = feature => { @@ -73,8 +78,9 @@ for (let section of sections) { let sectionCoordinates = []; let previousPoint = generatePoint(section[0]); + let currentPoint = null; for (let coords of section) { - const currentPoint = generatePoint(coords); + currentPoint = generatePoint(coords); let x = distanceBetween(firstPoint, currentPoint); let y = coords[2]; sectionCoordinates.push({ @@ -87,6 +93,7 @@ if (y > maxAlt) maxAlt = y; } coordinates.push(sectionCoordinates); + firstPoint = currentPoint; } return { coordinates, totalLength, minAlt, maxAlt }; };
--- a/client/tests/unit/geo/geo.spec.js Wed Sep 19 16:09:09 2018 +0200 +++ b/client/tests/unit/geo/geo.spec.js Wed Sep 19 16:37:03 2018 +0200 @@ -330,9 +330,20 @@ o = o.concat(y); return o; }, []); + const growing = values => { + let first = values[0].x; + for (let v of values) { + if (first > v.x) return false; + } + return true; + }; const minAlt = Math.min(...alts); const maxAlt = Math.max(...alts); expect(result.points.length).toBe(3); + expect(growing(result.points[0])).toBe(true); + expect(growing(result.points[1])).toBe(true); + expect(growing([...result.points[0], ...result.points[1]])).toBe(true); + expect(growing([...result.points[1], ...result.points[2]])).toBe(false); // because of corrupt testdata expect(result.totalLength).toBe(160.06814078495722); expect(result.minAlt).toBe(minAlt); expect(result.maxAlt).toBe(maxAlt);