gpstrek - Autosearch for a limited distance to keep it fast

pull/2768/head
Martin Boonk 2023-06-10 14:54:22 +02:00
parent d683cff4fc
commit e6785f1f65
1 changed files with 8 additions and 4 deletions

View File

@ -23,7 +23,7 @@ const SETTINGS = {
waypointChangeDist: 50, //distance in m to next waypoint before advancing automatically 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 queueWaitingTime: 5, // waiting time during processing of task queue items when running with timeouts
autosearch: true, autosearch: true,
maxDistForWaypointSearch: 300, maxDistForAutosearch: 300,
autosearchLimit: 3 autosearchLimit: 3
}; };
@ -1299,7 +1299,7 @@ let setSlicesPage = function(change){
drawInTimeout(); drawInTimeout();
}; };
let setClosestWaypoint = function(route, startindex, progress){ let setClosestWaypoint = function(route, startindex, progress, maxDist){
let s = WIDGETS.gpstrek.getState(); let s = WIDGETS.gpstrek.getState();
let stopSearchAfterFirstMatch = !isFinite(startindex); let stopSearchAfterFirstMatch = !isFinite(startindex);
@ -1311,7 +1311,8 @@ let setClosestWaypoint = function(route, startindex, progress){
set(route, startindex); set(route, startindex);
return; return;
} }
let minDist = SETTINGS.maxDistForWaypointSearch; if (!maxDist) maxDist = Number.MAX_VALUE;
let minDist = maxDist;
let mincount = 0; let mincount = 0;
let currentPos = s.currentPos; let currentPos = s.currentPos;
@ -1322,6 +1323,9 @@ let setClosestWaypoint = function(route, startindex, progress){
wp = getNext(route, startindex, count); wp = getNext(route, startindex, count);
if (!wp) break; if (!wp) break;
let curDist = distance(currentPos, wp); let curDist = distance(currentPos, wp);
if (curDist > maxDist) {
break;
}
if (curDist < minDist){ if (curDist < minDist){
minDist = curDist; minDist = curDist;
mincount = count; mincount = count;
@ -1437,7 +1441,7 @@ let updateRouting = function() {
} }
if (SETTINGS.autosearch && autosearchCounter < SETTINGS.autosearchLimit && !isMapOverview && lastSearch + 15000 < Date.now() && minimumDistance < currentDistanceToTarget - SETTINGS.waypointChangeDist){ if (SETTINGS.autosearch && autosearchCounter < SETTINGS.autosearchLimit && !isMapOverview && lastSearch + 15000 < Date.now() && minimumDistance < currentDistanceToTarget - SETTINGS.waypointChangeDist){
Bangle.buzz(1000); Bangle.buzz(1000);
setClosestWaypoint(s.route, getWaypointIndex(s.route)); setClosestWaypoint(s.route, getWaypointIndex(s.route), null, SETTINGS.maxDistForAutosearch);
minimumDistance = Number.MAX_VALUE; minimumDistance = Number.MAX_VALUE;
lastSearch = Date.now(); lastSearch = Date.now();
autosearchCounter++; autosearchCounter++;