diff options
author | stuebinm | 2022-01-18 09:43:24 +0100 |
---|---|---|
committer | stuebinm | 2022-01-20 13:19:44 +0100 |
commit | 0bcabe1c4b1dd74af233674dfa6c6ec3011ce2c0 (patch) | |
tree | 5c58943f99245ff7f745f50b46c34ae288c3e503 /chaski/ilztal.live/geolocation/index.html | |
parent | db83a406bc6e63289e47ff5d2228c08430832655 (diff) |
restructuring directories
Diffstat (limited to 'chaski/ilztal.live/geolocation/index.html')
-rw-r--r-- | chaski/ilztal.live/geolocation/index.html | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/chaski/ilztal.live/geolocation/index.html b/chaski/ilztal.live/geolocation/index.html new file mode 100644 index 0000000..052a9fa --- /dev/null +++ b/chaski/ilztal.live/geolocation/index.html @@ -0,0 +1,179 @@ +<!doctype html> +<html class="no-js" lang=""> + <head> + <meta charset="utf-8"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + <title>geolocation tracker test</title> + <meta name="description" content=""> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <link rel="apple-touch-icon" href="/apple-touch-icon.png"> + <!-- Place favicon.ico in the root directory --> + + </head> + <body> + <!--[if lt IE 8]> + <p class="browserupgrade"> + You are using an <strong>outdated</strong> browser. Please + <a href="http://browsehappy.com/">upgrade your browser</a> to improve + your experience. + </p> + <![endif]--> + + <button id = "initialise">Start Tracking</button><br/> + <p id = "status"></p> + <a id = "map-link" target="_blank"></a> + + <p> + Latitude: <span id="latitude"></span><br> + Longitude: <span id="longitude"></span><br> + Altitude: <span id="altitude"></span><br> + Accuracy: <span id="accuracy"></span><br> + Speed: <span id="speed"></span><br> + Angle: <span id="angle"></span><br> + </p> + + <input id="note" placeholder="enter note here"> + <button id="submit-note">Submit</button> + + <p> + <button id="download">Download Log</button> + <button id="reset">Reset History</button> + </p> + <p id="error"></p> + </body> + <script> + + /* TODO: + / - how to push things to rocket? (probably just http post for now …) + / - how to rate-limit new positions (either count dates, or option in geolocation?) + / - how to get closest point on path? + */ + + let lat = document.getElementById("latitude"); + let long = document.getElementById("longitude"); + let speed = document.getElementById("speed"); + let acc = document.getElementById("accuracy"); + let angle = document.getElementById("angle"); + let alt = document.getElementById("altitude"); + + let status = document.querySelector('#status'); + let mapLink = document.querySelector('#map-link'); + + function resetDisplay () { + lat.innerText = "-"; + long.innerText = "-"; + speed.innerText = "-"; + acc.innerText = "-"; + angle.innerText = "-"; + alt.innerText = "-"; + } + + function init() { + + mapLink.href = ''; + mapLink.textContent = ''; + + resetDisplay(); + + if(!navigator.geolocation) { + status.textContent = 'Error: Geolocation API is not supported!'; + } else { + status.textContent = 'Initialising …'; + trackPosition(); + } + + } + var errcount = 1; + var geolog = []; + + function trackPosition() { + function success(position) { + const latitude = position.coords.latitude; + const longitude = position.coords.longitude; + errcount = 0; + + status.textContent = ''; + mapLink.href = `https://www.openstreetmap.org/#map=18/${latitude}/${longitude}`; + mapLink.textContent = `Latitude: ${latitude} °, Longitude: ${longitude} °`; + + lat.innerText = position.coords.latitude; + long.innerText = position.coords.longitude; + alt.innerText = position.coords.altitude; + acc.innerText = position.coords.accuracy; + speed.innerText = position.coords.speed; + angle.innerText = position.coords.heading; + + document.getElementById("error").innerText = JSON.stringify(position.coords); + + let datapoint = { + timestamp: new Date().toISOString(), + data: { + latitude: position.coords.latitude, + longitude: position.coords.longitude, + altitude: position.coords.altitude, + accuracy: position.coords.accuracy, + altitudeAccuracy: position.coords.altitudeAccuracy, + heading: position.coords.heading, + speed: position.coords.speed + } + }; + + geolog.push(datapoint); + fetch( + "https://ilztal.live/geoloc/push", + { method: "POST", body: JSON.stringify(datapoint)} + ).then(() => console.log("pushed position")) + .catch(e => console.log("some error: ", e)) + } + + function error() { + status.textContent = "("+errcount+") Error: Getting Location failed, retrying …"; + resetDisplay(); + errcount += 1; + setTimeout(trackPosition, 3000); + } + + navigator.geolocation.watchPosition(success, error); + } + + function downloadHistory () { + let json = JSON.stringify(geolog); + let a = document.createElement("a"); + console.log("attempting download!", geolog); + a.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(json)); + a.setAttribute("download","history.json"); + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + } + + document.getElementById("initialise").addEventListener('click', init); + + document.getElementById("submit-note").onclick = (a) => { + let input = document.getElementById("note"); + let text = input.value; + console.log("submitting note:", text); + geolog.push(text); + fetch("https://ilztal.live/geoloc/push", + {method:"POST", body: JSON.stringify({ + //ty: "note", + timestamp: new Date().toISOString(), + data: text + })} + ).then(() => input.value = "") + .catch(e => { + document.getElementById("error").innerText = "error:" + e; + console.log("error occurred"); + }); + }; + + document.getElementById("download").onclick = (a) => downloadHistory(); + + document.getElementById("reset").onclick = (a) => geolog = []; + + </script> + + + </body> +</html> |