Skip to content

Commit

Permalink
Fixing compression issue with multiple trkseg entries. #504
Browse files Browse the repository at this point in the history
  • Loading branch information
bpatrik committed Mar 23, 2023
1 parent c72aec7 commit 5d87b21
Showing 1 changed file with 19 additions and 14 deletions.
33 changes: 19 additions & 14 deletions src/backend/model/fileprocessing/GPXProcessing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,8 @@ export class GPXProcessing {
await fsp.mkdir(outDir, {recursive: true});
const gpxStr = await fsp.readFile(filePath);
const gpxObj = await (new xml2js.Parser()).parseStringPromise(gpxStr);
const items: gpxEntry[] = gpxObj.gpx?.trk?.[0]?.trkseg[0]?.trkpt;

if (items) { // only compress paths
if (gpxObj.gpx?.trk?.[0].trkseg[0]) { // only compress paths if there is any
const distance = (entry1: gpxEntry, entry2: gpxEntry) => {
const lat1 = parseFloat(entry1.$.lat);
const lon1 = parseFloat(entry1.$.lon);
Expand Down Expand Up @@ -137,18 +136,24 @@ export class GPXProcessing {
return !(deviation < Config.MetaFile.GPXCompressing.maxMiddleDeviance); // keep if deviation is too big
};

gpxObj.gpx.trk[0].trkseg[0].trkpt = items.filter(gpxEntryFilter).map((v) => {
v.$.lon = parseFloat(v.$.lon).toFixed(this.GPX_FLOAT_ACCURACY);
v.$.lat = parseFloat(v.$.lat).toFixed(this.GPX_FLOAT_ACCURACY);
delete v.ele;
delete v.extensions;
return v;
});

for (let i = 0; i < gpxObj.gpx.trk[0].trkseg[0].trkpt.length; ++i) {
if (!postFilter(i, gpxObj.gpx.trk[0].trkseg[0].trkpt)) {
gpxObj.gpx.trk[0].trkseg[0].trkpt.splice(i, 1);
--i;
for (let i = 0; i < gpxObj.gpx.trk.length; ++i) {
for (let j = 0; j < gpxObj.gpx.trk[0].trkseg.length; ++j) {
const trkseg: { trkpt: gpxEntry[] } = gpxObj.gpx.trk[i].trkseg[j];

trkseg.trkpt = trkseg.trkpt.filter(gpxEntryFilter).map((v) => {
v.$.lon = parseFloat(v.$.lon).toFixed(this.GPX_FLOAT_ACCURACY);
v.$.lat = parseFloat(v.$.lat).toFixed(this.GPX_FLOAT_ACCURACY);
delete v.ele;
delete v.extensions;
return v;
});

for (let i = 0; i < trkseg.trkpt.length; ++i) {
if (!postFilter(i, trkseg.trkpt)) {
trkseg.trkpt.splice(i, 1);
--i;
}
}
}
}
}
Expand Down

0 comments on commit 5d87b21

Please sign in to comment.