mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-09-01 08:12:32 +00:00
more refactoring
This commit is contained in:
@@ -806,30 +806,8 @@ export class TrackSegment extends GPXTreeLeaf {
|
|||||||
return distanceWindowSmoothingWithDistanceAccumulator(points, 50, (accumulated, start, end) => 100 * ((points[end].ele ?? 0) - (points[start].ele ?? 0)) / (accumulated > 0 ? accumulated : 1));
|
return distanceWindowSmoothingWithDistanceAccumulator(points, 50, (accumulated, start, end) => 100 * ((points[end].ele ?? 0) - (points[start].ele ?? 0)) / (accumulated > 0 ? accumulated : 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
_computeSlopeSegments(statistics: GPXStatistics, epsilon = 20): [number[], number[]] {
|
_computeSlopeSegments(statistics: GPXStatistics): [number[], number[]] {
|
||||||
// x-coordinates are given by: statistics.local.distance.total[point._data.index] * 1000
|
let simplified = ramerDouglasPeucker(this.trkpt, 20, getElevationDistanceFunction(statistics));
|
||||||
// y-coordinates are given by: point.ele
|
|
||||||
// Compute the distance between point3 and the line defined by point1 and point2
|
|
||||||
function elevationDistance(point1: TrackPoint, point2: TrackPoint, point3: TrackPoint): number {
|
|
||||||
if (point1.ele === undefined || point2.ele === undefined || point3.ele === undefined) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
let x1 = statistics.local.distance.total[point1._data.index] * 1000;
|
|
||||||
let x2 = statistics.local.distance.total[point2._data.index] * 1000;
|
|
||||||
let x3 = statistics.local.distance.total[point3._data.index] * 1000;
|
|
||||||
let y1 = point1.ele;
|
|
||||||
let y2 = point2.ele;
|
|
||||||
let y3 = point3.ele;
|
|
||||||
|
|
||||||
let dist = Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2));
|
|
||||||
if (dist === 0) {
|
|
||||||
return Math.sqrt(Math.pow(x3 - x1, 2) + Math.pow(y3 - y1, 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.abs((y2 - y1) * x3 - (x2 - x1) * y3 + x2 * y1 - y2 * x1) / dist;
|
|
||||||
}
|
|
||||||
|
|
||||||
let simplified = ramerDouglasPeucker(this.trkpt, 20, elevationDistance);
|
|
||||||
|
|
||||||
let slope = [];
|
let slope = [];
|
||||||
let length = [];
|
let length = [];
|
||||||
@@ -1463,6 +1441,30 @@ export function distance(coord1: TrackPoint | Coordinates, coord2: TrackPoint |
|
|||||||
return maxMeters;
|
return maxMeters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getElevationDistanceFunction(statistics: GPXStatistics) {
|
||||||
|
// x-coordinates are given by: statistics.local.distance.total[point._data.index] * 1000
|
||||||
|
// y-coordinates are given by: point.ele
|
||||||
|
// Compute the distance between point3 and the line defined by point1 and point2
|
||||||
|
return (point1: TrackPoint, point2: TrackPoint, point3: TrackPoint) => {
|
||||||
|
if (point1.ele === undefined || point2.ele === undefined || point3.ele === undefined) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
let x1 = statistics.local.distance.total[point1._data.index] * 1000;
|
||||||
|
let x2 = statistics.local.distance.total[point2._data.index] * 1000;
|
||||||
|
let x3 = statistics.local.distance.total[point3._data.index] * 1000;
|
||||||
|
let y1 = point1.ele;
|
||||||
|
let y2 = point2.ele;
|
||||||
|
let y3 = point3.ele;
|
||||||
|
|
||||||
|
let dist = Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2));
|
||||||
|
if (dist === 0) {
|
||||||
|
return Math.sqrt(Math.pow(x3 - x1, 2) + Math.pow(y3 - y1, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.abs((y2 - y1) * x3 - (x2 - x1) * y3 + x2 * y1 - y2 * x1) / dist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function distanceWindowSmoothing(points: TrackPoint[], distanceWindow: number, accumulate: (index: number) => number, compute: (accumulated: number, start: number, end: number) => number, remove?: (index: number) => number): number[] {
|
function distanceWindowSmoothing(points: TrackPoint[], distanceWindow: number, accumulate: (index: number) => number, compute: (accumulated: number, start: number, end: number) => number, remove?: (index: number) => number): number[] {
|
||||||
let result = [];
|
let result = [];
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user