Allow option to include GPX entries even when there is no corresponding GPS info

master
Gordon Williams 2022-07-14 17:10:59 +01:00
parent 1be93fe5e3
commit b02947dc93
1 changed files with 33 additions and 5 deletions

View File

@ -12,9 +12,22 @@
<script> <script>
var domTracks = document.getElementById("tracks"); var domTracks = document.getElementById("tracks");
function saveKML(track,title) { function filterGPSCoordinates(track) {
// only include data points with GPS values // only include data points with GPS values
track=track.filter(pt=>pt.Latitude!="" && pt.Longitude!=""); var allowNoGPS = localStorage.getItem("recorder-allow-no-gps")=="true";
if (!allowNoGPS)
return track.filter(pt=>pt.Latitude!="" && pt.Longitude!="");
return track.map(pt => {
if (!isFinite(parseFloat(pt.Latitude))) pt.Latitude=0;
if (!isFinite(parseFloat(pt.Longitude))) pt.Longitude=0;
if (!isFinite(parseFloat(pt.Altitude))) pt.Altitude=0;
return pt;
})
}
function saveKML(track,title) {
// filter out coords with no GPS (or allow, but force to 0)
track = filterGPSCoordinates(track);
// Now output KML // Now output KML
var kml = `<?xml version="1.0" encoding="UTF-8"?> var kml = `<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <kml xmlns="http://www.opengis.net/kml/2.2">
@ -81,7 +94,9 @@ function saveGPX(track, title) {
showToast("Error in trackfile.", "error"); showToast("Error in trackfile.", "error");
return; return;
} }
// filter out coords with no GPS (or allow, but force to 0)
track = filterGPSCoordinates(track);
// Output GPX
var gpx = `<?xml version="1.0" encoding="UTF-8"?> var gpx = `<?xml version="1.0" encoding="UTF-8"?>
<gpx creator="Bangle.js" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"> <gpx creator="Bangle.js" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
<metadata> <metadata>
@ -91,7 +106,7 @@ function saveGPX(track, title) {
<name>${title}</name> <name>${title}</name>
<trkseg>`; <trkseg>`;
track.forEach(pt=>{ track.forEach(pt=>{
if (pt.Latitude!="" && pt.Longitude!="") gpx += ` gpx += `
<trkpt lat="${pt.Latitude}" lon="${pt.Longitude}"> <trkpt lat="${pt.Latitude}" lon="${pt.Longitude}">
<ele>${pt.Altitude}</ele> <ele>${pt.Altitude}</ele>
<time>${pt.Time.toISOString()}</time> <time>${pt.Time.toISOString()}</time>
@ -199,7 +214,9 @@ function getTrackList() {
// ================================================ // ================================================
// When 'promise' completes we now have all the info in trackList // When 'promise' completes we now have all the info in trackList
promise.then(() => { promise.then(() => {
var html = `<div class="container"> var html = `
<div class="container">
<h2>Tracks</h2>
<div class="columns">\n`; <div class="columns">\n`;
trackList.forEach(track => { trackList.forEach(track => {
console.log("track", track); console.log("track", track);
@ -242,9 +259,20 @@ ${trackData.Latitude ? `
`; `;
} }
html += ` html += `
</div><!-- columns -->
<h2>Settings</h2>
<div class="form-group">
<label class="form-switch">
<input type="checkbox" id="settings-allow-no-gps" ${(localStorage.getItem("recorder-allow-no-gps")=="true")?"checked":""}>
<i class="form-icon"></i> Include GPX/KML entries even when there's no GPS info
</label>
</div> </div>
</div>`; </div>`;
domTracks.innerHTML = html; domTracks.innerHTML = html;
document.getElementById("settings-allow-no-gps").addEventListener("change",event=>{
var allowNoGPS = event.target.checked;
localStorage.setItem("recorder-allow-no-gps", allowNoGPS);
});
Util.hideModal(); Util.hideModal();
var buttons = domTracks.querySelectorAll("button"); var buttons = domTracks.querySelectorAll("button");
for (var i=0;i<buttons.length;i++) { for (var i=0;i<buttons.length;i++) {