X-Git-Url: https://git-public.kairo.at/?p=lantea.git;a=blobdiff_plain;f=js%2Fmap.js;h=983dff9c697c254c1e416ae7ce22cf2e75014a4c;hp=9f95971c37823d6102f5ad275eff40843e31add3;hb=HEAD;hpb=9292a1b76e7ff35b9c384c1f4f63bad881db166e
diff --git a/js/map.js b/js/map.js
index 9f95971..cddd395 100644
--- a/js/map.js
+++ b/js/map.js
@@ -6,10 +6,7 @@ var gGLMapCanvas, gTrackCanvas, gGeolocation;
var gDebug = false;
var gMinTrackAccuracy = 1000; // meters
-var gTrackWidth = 2; // pixels
-var gTrackColor = "#FF0000";
-var gCurLocSize = 6; // pixels
-var gCurLocColor = "#A00000";
+var gCenterDelayAfterMove = 3000; // milliseconds
var gMapStyles = {
// OSM tile usage policy: http://wiki.openstreetmap.org/wiki/Tile_usage_policy
@@ -47,11 +44,20 @@ var gMapStyles = {
url: "https://tilecache[1-4].kairo.at/mapqsat/{z}/{x}/{y}.png", // route through CORS+SSL tilecache @ kairo.at
//url: "http://otile[1-4].mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg",
copyright: 'Tiles Courtesy of MapQuest, portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency.'},
+ arcgis_world_imagery:
+ {name: "ArcGIS World Imagery", // see https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer
+ url: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",
+ copyright: 'Source: Esri, Maxar, GeoEye, Earthstar Geographics, CNES/Airbus DS, USDA, USGS, AeroGRID, IGN, and the GIS User Community.'},
osm_hot:
{name: "OSM HOT style",
url: "https://tilecache[1-4].kairo.at/osmhot/{z}/{x}/{y}.png", // route through CORS+SSL tilecache @ kairo.at
//url: "http://[a-c].tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", // https has CAcert which doesn't work in browsers
copyright: 'Map data and imagery © OpenStreetMap contributors, ODbL/CC-BY-SA'},
+ opentopomap:
+ {name: "OpenTopoMap",
+ //url: "https://tilecache[1-4].kairo.at/opentopomap/{z}/{x}/{y}.png", // route through tilecache @ kairo.at
+ url: "https://[a-c].tile.opentopomap.org/{z}/{x}/{y}.png",
+ copyright: 'Map data: © OpenStreetMap contributors, SRTM | map style: © OpenTopoMap (CC-BY-SA)'},
hikebike:
{name: "Hike and Bike (OSM)",
url: "https://tilecache[1-4].kairo.at/hikebike/{z}/{x}/{y}.png", // route through CORS+SSL tilecache @ kairo.at
@@ -92,6 +98,7 @@ var gGeoWatchID, gGPSWakeLock;
var gTrack = [];
var gLastTrackPoint;
var gCenterPosition = true;
+var gLastMoveAction = null;
function initMap() {
gGeolocation = navigator.geolocation;
@@ -648,7 +655,12 @@ var gTrackLayer = {
lastRequestedIndex: null, // may not have been actually drawn...
drawRequested: false,
restartDrawing: true,
+
maxDrawTime: 10, // max time allowed for drawing a section, in ms - 10 means we can do 100 fps smoothly
+ trackWidth: 2, // pixels
+ trackColor: "#FF0000",
+ curLocSize: 6, // pixels
+ curLocColor: "#A00000",
drawTrack: function(needRestart = true) {
// TODO: figure out if we can support reverse drawing while initially loading the track.
@@ -716,9 +728,9 @@ var gTrackLayer = {
}
}
if (!gTrackLayer.lastDrawnPoint || !gTrackLayer.lastDrawnPoint.optimized) {
- gTrackLayer.context.strokeStyle = gTrackColor;
+ gTrackLayer.context.strokeStyle = gTrackLayer.trackColor;
gTrackLayer.context.fillStyle = gTrackLayer.context.strokeStyle;
- gTrackLayer.context.lineWidth = gTrackWidth;
+ gTrackLayer.context.lineWidth = gTrackLayer.trackWidth;
gTrackLayer.context.lineCap = "round";
gTrackLayer.context.lineJoin = "round";
}
@@ -769,7 +781,7 @@ var gTrackLayer = {
// Only run this when visible and we are not drawing a track right now.
if (gTrackLayer.context && document.hidden != true && !gTrackLayer.drawRequested) {
var locpoint = gps2xy(trackPoint.coords.latitude, trackPoint.coords.longitude);
- var circleRadius = Math.round(gCurLocSize / 2);
+ var circleRadius = Math.round(gTrackLayer.curLocSize / 2);
var mappos = {x: Math.round((locpoint.x - gMap.pos.x) / gMap.zoomFactor + gMap.width / 2),
y: Math.round((locpoint.y - gMap.pos.y) / gMap.zoomFactor + gMap.height / 2)};
@@ -783,7 +795,7 @@ var gTrackLayer = {
mappos.y - circleRadius,
circleRadius * 2, circleRadius * 2)};
- gTrackLayer.context.strokeStyle = gCurLocColor;
+ gTrackLayer.context.strokeStyle = gTrackLayer.curLocColor;
gTrackLayer.context.fillStyle = gTrackLayer.context.strokeStyle;
gTrackLayer.context.beginPath();
gTrackLayer.context.arc(mappos.x, mappos.y,
@@ -973,6 +985,7 @@ var mapEvHandler = {
gLastMouseX = x;
gLastMouseY = y;
showUI();
+ gLastMoveAction = performance.now();
break;
case "mousemove":
case "touchmove":
@@ -1029,6 +1042,7 @@ var mapEvHandler = {
}
gLastMouseX = x;
gLastMouseY = y;
+ gLastMoveAction = performance.now();
break;
case "mouseup":
case "touchend":
@@ -1146,6 +1160,7 @@ var mapEvHandler = {
gMap.pos.x -= dX * gMap.zoomFactor;
gMap.pos.y -= dY * gMap.zoomFactor;
gMap.draw();
+ gLastMoveAction = performance.now();
}
break;
}
@@ -1237,7 +1252,7 @@ function startTracking() {
gTrack.push(tPoint);
try { gTrackStore.push(tPoint); } catch(e) {}
var redrawn = false;
- if (gCenterPosition) {
+ if (gCenterPosition && (!gLastMoveAction || performance.now() > gLastMoveAction + gCenterDelayAfterMove)) {
var posCoord = gps2xy(position.coords.latitude,
position.coords.longitude);
if (Math.abs(gMap.pos.x - posCoord.x) > gMap.width * gMap.zoomFactor / 4 ||