mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-08-31 23:53:25 +00:00
68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
import { GPXFileAttributes, GPXFileType, Link, Metadata, TrackExtensions, TrackPoint, TrackSegmentType, TrackType, Waypoint } from "./types";
|
|
|
|
export class GPXFile {
|
|
attributes: GPXFileAttributes;
|
|
metadata: Metadata;
|
|
wpt: Waypoint[];
|
|
trk: Track[];
|
|
|
|
constructor(gpx: GPXFileType | GPXFile) {
|
|
this.attributes = gpx.attributes;
|
|
this.metadata = gpx.metadata;
|
|
this.wpt = gpx.wpt;
|
|
this.trk = gpx.trk.map((track) => new Track(track));
|
|
}
|
|
|
|
reverse(): void {
|
|
for (let i = 0; i < this.trk.length; i++) {
|
|
this.trk[i].reverse();
|
|
}
|
|
this.trk.reverse();
|
|
}
|
|
|
|
clone(): GPXFile {
|
|
return new GPXFile(structuredClone(this));
|
|
}
|
|
};
|
|
|
|
export class Track {
|
|
name?: string;
|
|
cmt?: string;
|
|
desc?: string;
|
|
src?: string;
|
|
link?: Link;
|
|
type?: string;
|
|
trkseg: TrackSegment[];
|
|
extensions?: TrackExtensions;
|
|
|
|
constructor(track: TrackType) {
|
|
this.name = track.name;
|
|
this.cmt = track.cmt;
|
|
this.desc = track.desc;
|
|
this.src = track.src;
|
|
this.link = track.link;
|
|
this.type = track.type;
|
|
this.trkseg = track.trkseg.map((seg) => new TrackSegment(seg));
|
|
this.extensions = track.extensions;
|
|
}
|
|
|
|
reverse(): void {
|
|
for (let i = 0; i < this.trkseg.length; i++) {
|
|
this.trkseg[i].reverse();
|
|
}
|
|
this.trkseg.reverse();
|
|
}
|
|
};
|
|
|
|
|
|
export class TrackSegment {
|
|
trkpt: TrackPoint[];
|
|
|
|
constructor(segment: TrackSegmentType) {
|
|
this.trkpt = segment.trkpt;
|
|
}
|
|
|
|
reverse(): void {
|
|
this.trkpt.reverse();
|
|
}
|
|
}; |