From e6785f1f65c71ce13f330ceb76060b0ece44562c Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 10 Jun 2023 14:54:22 +0200 Subject: [PATCH] gpstrek - Autosearch for a limited distance to keep it fast --- apps/gpstrek/app.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/gpstrek/app.js b/apps/gpstrek/app.js index 5a84eac1d..6da3231cf 100644 --- a/apps/gpstrek/app.js +++ b/apps/gpstrek/app.js @@ -23,7 +23,7 @@ const SETTINGS = { waypointChangeDist: 50, //distance in m to next waypoint before advancing automatically queueWaitingTime: 5, // waiting time during processing of task queue items when running with timeouts autosearch: true, - maxDistForWaypointSearch: 300, + maxDistForAutosearch: 300, autosearchLimit: 3 }; @@ -1299,7 +1299,7 @@ let setSlicesPage = function(change){ drawInTimeout(); }; -let setClosestWaypoint = function(route, startindex, progress){ +let setClosestWaypoint = function(route, startindex, progress, maxDist){ let s = WIDGETS.gpstrek.getState(); let stopSearchAfterFirstMatch = !isFinite(startindex); @@ -1311,7 +1311,8 @@ let setClosestWaypoint = function(route, startindex, progress){ set(route, startindex); return; } - let minDist = SETTINGS.maxDistForWaypointSearch; + if (!maxDist) maxDist = Number.MAX_VALUE; + let minDist = maxDist; let mincount = 0; let currentPos = s.currentPos; @@ -1322,6 +1323,9 @@ let setClosestWaypoint = function(route, startindex, progress){ wp = getNext(route, startindex, count); if (!wp) break; let curDist = distance(currentPos, wp); + if (curDist > maxDist) { + break; + } if (curDist < minDist){ minDist = curDist; mincount = count; @@ -1437,7 +1441,7 @@ let updateRouting = function() { } if (SETTINGS.autosearch && autosearchCounter < SETTINGS.autosearchLimit && !isMapOverview && lastSearch + 15000 < Date.now() && minimumDistance < currentDistanceToTarget - SETTINGS.waypointChangeDist){ Bangle.buzz(1000); - setClosestWaypoint(s.route, getWaypointIndex(s.route)); + setClosestWaypoint(s.route, getWaypointIndex(s.route), null, SETTINGS.maxDistForAutosearch); minimumDistance = Number.MAX_VALUE; lastSearch = Date.now(); autosearchCounter++;