X-Git-Url: https://git-public.kairo.at//?a=blobdiff_plain;f=js%2Fmap.js;h=2532a034aeb76d92b1bdc5e6141cfd99cce604fb;hb=852bc801f08c0f6dfcec29a7f92d517a5578aa2b;hp=f9ce632f83c9ecdb2d497bc159b16025a52d0177;hpb=7a076538678eb75b90e066df5e2d51346067927d;p=lantea.git diff --git a/js/map.js b/js/map.js index f9ce632..2532a03 100644 --- a/js/map.js +++ b/js/map.js @@ -661,7 +661,7 @@ function drawTrack() { if (gTrack.length) { for (var i = 0; i < gTrack.length; i++) { drawTrackPoint(gTrack[i].coords.latitude, gTrack[i].coords.longitude, - (i + 1 >= gTrack.length)); + (i + 1 >= gTrack.length || gTrack[i+1].beginSegment)); } } } @@ -681,22 +681,23 @@ function drawTrackPoint(aLatitude, aLongitude, lastPoint) { gTrackContext.lineCap = "round"; gTrackContext.lineJoin = "round"; } + // This breaks optimiziation, so make sure to reset optimization. if (!gLastDrawnPoint || gLastDrawnPoint == trackpoint) { - // This breaks optimiziation, so make sure to close path and reset optimization. - if (gLastDrawnPoint && gLastDrawnPoint.optimized) + trackpoint.optimized = false; + // Close path if one was open. + if (gLastDrawnPoint && gLastDrawnPoint.optimized) { gTrackContext.stroke(); + } + } + if (!gLastDrawnPoint || (gLastDrawnPoint == trackpoint) || !gLastDrawnPoint.optimized) { + // Start drawing a segment. gTrackContext.beginPath(); - trackpoint.optimized = false; gTrackContext.arc(mappos.x, mappos.y, gTrackContext.lineWidth, 0, Math.PI * 2, false); gTrackContext.fill(); } else { - if (!gLastDrawnPoint || !gLastDrawnPoint.optimized) { - gTrackContext.beginPath(); - gTrackContext.moveTo(Math.round((gLastDrawnPoint.x - gMap.pos.x) / gMap.zoomFactor + gMap.width / 2), - Math.round((gLastDrawnPoint.y - gMap.pos.y) / gMap.zoomFactor + gMap.height / 2)); - } + // Continue drawing segment, close if needed. gTrackContext.lineTo(mappos.x, mappos.y); if (!trackpoint.optimized) gTrackContext.stroke(); @@ -745,7 +746,9 @@ function calcTrackDuration() { var tDuration = 0; if (gTrack.length > 1) { for (var i = 1; i < gTrack.length; i++) { - tDuration += (gTrack[i].time - gTrack[i-1].time); + if (!gTrack[i].beginSegment) { + tDuration += (gTrack[i].time - gTrack[i-1].time); + } } } return Math.round(tDuration / 1000); // The timestamps are in ms but we return seconds. @@ -756,7 +759,9 @@ function calcTrackLength() { var tLength = 0; if (gTrack.length > 1) { for (var i = 1; i < gTrack.length; i++) { - tLength += getPointDistance(gTrack[i-1].coords, gTrack[i].coords); + if (!gTrack[i].beginSegment) { + tLength += getPointDistance(gTrack[i-1].coords, gTrack[i].coords); + } } } return tLength;