From 4b12da3a7069591d3ec6aceb4a949c97bc7549f2 Mon Sep 17 00:00:00 2001 From: Robert Kaiser Date: Fri, 20 Jan 2012 01:51:44 +0100 Subject: [PATCH] improve debugging, make geofake do dmaller tracks, use correct GPX MIME type, add a dump function to debug, make touch events actually work --- index.html | 4 +++- js/map.js | 53 +++++++++++++++++++++++++++++++++--------------- js/ui.js | 10 ++++++++- style/lantea.css | 4 ++++ 4 files changed, 53 insertions(+), 18 deletions(-) diff --git a/index.html b/index.html index 4f8643b..c7a4f62 100644 --- a/index.html +++ b/index.html @@ -26,6 +26,8 @@
Track +
-

+

diff --git a/js/map.js b/js/map.js index 8ebb14a..cb659f9 100644 --- a/js/map.js +++ b/js/map.js @@ -2,7 +2,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -var gCanvas, gContext; +var gCanvas, gContext, gGeolocation; +var gDebug = false; var gTileSize = 256; var gMaxZoom = 18; // The minimum is 0. @@ -49,7 +50,7 @@ var gLoadingTile; var gMapPrefsLoaded = false; var gDragging = false; -var gZoomTouchID; +var gDragTouchID; var gGeoWatchID; var gTrack = []; @@ -57,11 +58,22 @@ var gLastTrackPoint; var gCenterPosition = true; function initMap() { + gGeolocation = navigator.geolocation; gCanvas = document.getElementById("map"); gContext = gCanvas.getContext("2d"); if (!gActiveMap) gActiveMap = "osm_mapnik"; + //gDebug = true; + if (gDebug) { + gGeolocation = geofake; + var hiddenList = document.getElementsByClassName("debugHide"); + // last to first - list of elements with that class is changing! + for (var i = hiddenList.length - 1; i >= 0; i--) { + hiddenList[i].classList.remove("debugHide"); + } + } + var loopCnt = 0; var getPersistentPrefs = function() { if (mainDB) { @@ -308,21 +320,21 @@ var mapEvHandler = { return; // Bail out if the started touch can't be found. - if (touchEvent && zoomstart && - !aEvent.changedTouches.identifiedTouch(gZoomTouchID)) + if (touchEvent && gDragging && + !aEvent.changedTouches.identifiedTouch(gDragTouchID)) return; } var coordObj = touchEvent ? - aEvent.changedTouches.identifiedTouch(gZoomTouchID) : + aEvent.changedTouches.identifiedTouch(gDragTouchID) : aEvent; switch (aEvent.type) { case "mousedown": case "touchstart": if (touchEvent) { - zoomTouchID = aEvent.changedTouches.item(0).identifier; - coordObj = aEvent.changedTouches.identifiedTouch(gZoomTouchID); + gDragTouchID = aEvent.changedTouches.item(0).identifier; + coordObj = aEvent.changedTouches.identifiedTouch(gDragTouchID); } var x = coordObj.clientX - gCanvas.offsetLeft; var y = coordObj.clientY - gCanvas.offsetTop; @@ -400,14 +412,24 @@ var mapEvHandler = { var geofake = { tracking: false, + lastPos: {x: undefined, y: undefined}, watchPosition: function(aSuccessCallback, aErrorCallback, aPrefObject) { this.tracking = true; var watchCall = function() { + // calc new position in lat/lon degrees + // 90° on Earth surface are ~10,000 km at the equator, + // so try moving at most 10m at a time + if (geofake.lastPos.x) + geofake.lastPos.x += (Math.random() - .5) * 90 / 1000000 + else + geofake.lastPos.x = 48.208174 + if (geofake.lastPos.y) + geofake.lastPos.y += (Math.random() - .5) * 90 / 1000000 + else + geofake.lastPos.y = 16.373819 aSuccessCallback({timestamp: Date.now(), - coords: {latitude: 48.208174 + - (Math.random() - .5) / 5, - longitude: 16.373819 + - (Math.random() - .5) / 5, + coords: {latitude: geofake.lastPos.x, + longitude: geofake.lastPos.y, accuracy: 20}}); if (geofake.tracking) setTimeout(watchCall, 1000); @@ -440,7 +462,8 @@ function startTracking() { var getStoredTrack = function() { if (mainDB) gTrackStore.getList(function(aTPoints) { - //document.getElementById("debug").textContent = aTPoints.length + " points loaded."; + if (gDebug) + document.getElementById("debug").textContent = aTPoints.length + " points loaded."; if (aTPoints.length) { gTrack = aTPoints; } @@ -453,8 +476,7 @@ function startTracking() { }; getStoredTrack(); if (navigator.geolocation) { - //gGeoWatchID = geofake.watchPosition( - gGeoWatchID = navigator.geolocation.watchPosition( + gGeoWatchID = gGeolocation.watchPosition( function(position) { // Coords spec: https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoPositionCoords var tPoint = {time: position.timestamp, @@ -486,8 +508,7 @@ function startTracking() { function endTracking() { if (gGeoWatchID) { - //geofake.clearWatch(gGeoWatchID); - navigator.geolocation.clearWatch(gGeoWatchID); + gGeolocation.clearWatch(gGeoWatchID); } } diff --git a/js/ui.js b/js/ui.js index 9dfcdc7..d484274 100644 --- a/js/ui.js +++ b/js/ui.js @@ -105,11 +105,19 @@ function saveTrack() { out += ' ' + "\n"; out += ' ' + "\n"; out += '' + "\n"; - var outDataURI = "data:application/octet-stream," + encodeURIComponent(out); + var outDataURI = "data:application/gpx+xml," + encodeURIComponent(out); window.open(outDataURI, 'GPX Track'); } } +function saveTrackDump() { + if (gTrack.length) { + var out = JSON.stringify(gTrack); + var outDataURI = "data:application/json," + encodeURIComponent(out); + window.open(outDataURI, 'JSON dump'); + } +} + var gPrefs = { objStore: "prefs", diff --git a/style/lantea.css b/style/lantea.css index acff337..4913302 100644 --- a/style/lantea.css +++ b/style/lantea.css @@ -56,6 +56,10 @@ h1 { margin: 0; } +.debugHide { + display: none; +} + #copyright { position: absolute; bottom: .5em; -- 2.43.0