1
0
Fork 0

recorder 0.11: Fix KML and GPX export when there is no GPS data

master
Gordon Williams 2022-02-07 10:36:28 +00:00
parent 2292de4809
commit f5e4cf8a56
3 changed files with 10 additions and 6 deletions

View File

@ -14,3 +14,4 @@
0.08: Memory usage improvements for recorder app itself
0.09: Show correct number for log in overwrite prompt
0.10: Fix broken recorder settings (when launched from settings app)
0.11: Fix KML and GPX export when there is no GPS data

View File

@ -10,6 +10,9 @@
var domTracks = document.getElementById("tracks");
function saveKML(track,title) {
// only include data points with GPS values
track=track.filter(pt=>pt.Latitude!="" && pt.Longitude!="");
// Now output KML
var kml = `<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
@ -37,7 +40,6 @@ ${track.map(pt=>` <when>${pt.Time.toISOString()}</when>\n`).join("")}
${track.map(pt=>` <gx:coord>${pt.Longitude} ${pt.Latitude} ${pt.Altitude}</gx:coord>\n`).join("")}
<ExtendedData>
<SchemaData schemaUrl="#schema">
${track[0].Heartrate!==undefined ? `<gx:SimpleArrayData name="heartrate">
${track.map(pt=>` <gx:value>${0|pt.Heartrate}</gx:value>\n`).join("")}
</gx:SimpleArrayData>`:``}
@ -80,7 +82,7 @@ function saveGPX(track, title) {
<name>${title}</name>
<trkseg>`;
track.forEach(pt=>{
gpx += `
if (pt.Latitude!="" && pt.Longitude!="") gpx += `
<trkpt lat="${pt.Latitude}" lon="${pt.Longitude}">
<ele>${pt.Altitude}</ele>
<time>${pt.Time.toISOString()}</time>
@ -122,6 +124,7 @@ function saveCSV(track, title) {
}
function trackLineToObject(headers, l) {
if (l===undefined) return {};
var t = l.trim().split(",");
var o = {};
headers.forEach((header,i) => o[header] = t[i]);
@ -155,7 +158,7 @@ function getTrackList() {
Util.showModal(`Loading Track ${trackNo}...`);
Puck.eval(`(function(fn) {
var f = require("Storage").open(fn,"r");
var headers = f.readLine();
var headers = f.readLine().trim();
var data = f.readLine();
var lIdx = headers.split(",").indexOf("Latitude");
if (lIdx >= 0) {
@ -184,14 +187,14 @@ function getTrackList() {
var html = `<div class="container">
<div class="columns">\n`;
trackList.forEach(track => {
var trackData = trackLineToObject(track.info.headers, track.info.l);
console.log("track", track);
var trackData = trackLineToObject(track.info.headers, track.info.l);
console.log("trackData", trackData);
html += `
<div class="column col-12">
<div class="card-header">
<div class="card-title h5">Track ${track.number}</div>
<div class="card-subtitle text-gray">${trackData.Time.toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}</div>
<div class="card-subtitle text-gray">${trackData.Time?trackData.Time.toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }):"No track data"}</div>
</div>
${trackData.Latitude ? `
<div class="card-image">

View File

@ -2,7 +2,7 @@
"id": "recorder",
"name": "Recorder",
"shortName": "Recorder",
"version": "0.10",
"version": "0.11",
"description": "Record GPS position, heart rate and more in the background, then download to your PC.",
"icon": "app.png",
"tags": "tool,outdoors,gps,widget",