1
0
Fork 0

GPS POI Logger - A simple app to log points of interest with their GPS coordinates and read them back onto your PC. Based on the https://www.espruino.com/Bangle.js+Storage tutorial

master
Gordon Williams 2020-06-11 13:37:55 +01:00
parent f4859dc269
commit cb4df2d7c6
6 changed files with 151 additions and 0 deletions

View File

@ -1918,5 +1918,18 @@
{"name":"magnav.img","url":"magnav-icon.js","evaluate":true} {"name":"magnav.img","url":"magnav-icon.js","evaluate":true}
], ],
"data":[{"name":"magnav.json"}] "data":[{"name":"magnav.json"}]
},
{ "id": "gpspoilog",
"name": "GPS POI Logger",
"shortName":"GPS POI Log",
"icon": "app.png",
"version":"0.01",
"description": "A simple app to log points of interest with their GPS coordinates and read them back onto your PC. Based on the https://www.espruino.com/Bangle.js+Storage tutorial",
"tags": "outdoors",
"interface": "interface.html",
"storage": [
{"name":"gpspoilog.app.js","url":"app.js"},
{"name":"gpspoilog.img","url":"app-icon.js","evaluate":true}
]
} }
] ]

1
apps/gpspoilog/ChangeLog Normal file
View File

@ -0,0 +1 @@
0.01: New App!

View File

@ -0,0 +1 @@
require("heatshrink").decompress(atob("mEwxH+AH4A/AEeGAAwttGMotLGMItPGLwuTGDQuVGDIfHq9RAAgvfDw+AFwtRq4weFZYAIwAvYJIguPSowvavl8F8qpFF6wwSF44AFvl9vo3GF8l80+t1unGAovkvovDvovrAAQvqR4IACR9TviGAovHABIuXF/4vgGAmAFx+AFzDxGACYvVGDAuWF+AwWFzAvwGCguaGCYucF+AwQFzwvwGBwugGBouiF+AwKF0gwJF0wwHF1AvwGAguqGAYusAH4A/AFI="))

67
apps/gpspoilog/app.js Normal file
View File

@ -0,0 +1,67 @@
var menuItems = {
"":{title:"GPS POI Log"},
" ":{value:"No Fix"},
"Tree" : ()=>addItem("Tree"),
"Gate" : ()=>addItem("Gate"),
"Flower" : ()=>addItem("Flower"),
"Plant" : ()=>addItem("Plant"),
"Bus Stop" : ()=>addItem("Bus Stop"),
"Pub" : ()=>addItem("Pub")
};
var menu = E.showMenu(menuItems);
var gps = { fix : 0};
var gpsCount = 0;
var file = require("Storage").open("gpspoilog.csv","a");
function setStatus(msg) {
menuItems[" "].value = msg;
menu.draw();
}
Bangle.on('GPS',function(g) {
gps = g;
gpsCount++;
var msg;
if (g.fix) {
msg = g.satellites + " Satellites";
} else {
msg = "No Fix";
}
setStatus(msg+" "+"-\\|/"[gpsCount&3]);
});
function addItem(name) {
if (!gps.fix) {
setStatus("Ignored - no fix");
return; // don't do anything as no fix
}
// The fields we want to put in out CSV file
var csv = [
0|getTime(), // Time to the nearest second
gps.lat,
gps.lon,
gps.alt,
name
];
// Write data here
file.write(csv.join(",")+"\n");
setStatus("Written");
}
Bangle.loadWidgets();
Bangle.drawWidgets();
Bangle.setGPSPower(1);
function getData(callback) {
var f = require("Storage").open("gpspoilog.csv","r");
var l = f.readLine();
while (l!==undefined) {
callback(l);
l = f.readLine();
}
}

BIN
apps/gpspoilog/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,69 @@
<html>
<head>
<link rel="stylesheet" href="../../css/spectre.min.css">
</head>
<body>
<div id="data"></div>
<button class="btn btn-default" id="btnSave">Save</button>
<button class="btn btn-default" id="btnDelete">Delete</button>
<script src="../../lib/interface.js"></script>
<script>
var dataElement = document.getElementById("data");
var csvData = "";
function getData() {
// show loading window
Util.showModal("Loading...");
// get the data
dataElement.innerHTML = "";
Util.readStorageFile(`gpspoilog.csv`,data=>{
csvData = data.trim();
// remove window
Util.hideModal();
// If no data, report it and exit
if (data.length==0) {
dataElement.innerHTML = "<b>No data found</b>";
return;
}
// Otherwise parse the data and output it as a table
dataElement.innerHTML = `<table>
<tr>
<th>Time</th>
<th>Lat</th>
<th>Lon</th>
<th>Alt</th>
<th>Type</th>
</tr>`+data.trim().split("\n").map(l=>{
l = l.split(",");
return `<tr>
<td>${(new Date(l[0]*1000)).toLocaleString()}</td>
<td>${l[1]}</td>
<td>${l[2]}</td>
<td>${l[3]}</td>
<td>${l[4]}</td>
</tr>`
}).join("\n")+"</table>";
});
}
// You can call a utility function to save the data
document.getElementById("btnSave").addEventListener("click", function() {
Util.saveCSV("gpsdata", csvData);
});
// Or you can also delete the file
document.getElementById("btnDelete").addEventListener("click", function() {
Util.showModal("Deleting...");
Util.eraseStorageFile("gpspoilog.csv", function() {
Util.hideModal();
getData();
});
});
// Called when app starts
function onInit() {
getData();
}
</script>
</body>
</html>