Firstattempt to reduce te number of points when recording a track (#13): the minimal distance is now 10m and a filter with a minimal time of 15s has been added.

This should now be tested on the road !
This commit is contained in:
Eric van der Vlist 2022-10-02 21:52:02 +02:00
parent 924dd47395
commit 11c2a1713f
2 changed files with 37 additions and 19 deletions

View File

@ -1,4 +1,4 @@
import React, { Fragment, useRef, useState } from 'react'; import React, { Fragment, useEffect, useRef, useState } from 'react';
import { useDB, useFind } from 'react-pouchdb'; import { useDB, useFind } from 'react-pouchdb';
@ -28,6 +28,12 @@ import { enterAnimation, leaveAnimation } from '../../lib/animation';
import { useDispatch } from 'react-redux'; import { useDispatch } from 'react-redux';
import { mapActions } from '../../store/map'; import { mapActions } from '../../store/map';
const MIN_TIME_BETWEEN_LOCATIONS = 15 * 1000;
declare global {
var $lastValidLocationTime: number;
}
const GpxRecord: React.FC<{}> = () => { const GpxRecord: React.FC<{}> = () => {
const db = useDB(); const db = useDB();
@ -59,27 +65,39 @@ const GpxRecord: React.FC<{}> = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const newLocationHandler = (location: any) => { const newLocationHandler = (location: any) => {
appendTrkpt(db, { console.log(
$: { `Location filtering, elapsed time: ${
lat: location.latitude, location.time - globalThis.$lastValidLocationTime
lon: location.longitude, }`
},
ele: location.altitude,
time: new Date(location.time).toISOString(),
extensions: {
speed: location.speed,
accuracy: location.accuracy,
},
});
dispatch(
mapActions.setCurrent({
lat: location.latitude,
lon: location.longitude,
})
); );
if (
location.time - globalThis.$lastValidLocationTime >
MIN_TIME_BETWEEN_LOCATIONS
) {
globalThis.$lastValidLocationTime = location.time;
appendTrkpt(db, {
$: {
lat: location.latitude,
lon: location.longitude,
},
ele: location.altitude,
time: new Date(location.time).toISOString(),
extensions: {
speed: location.speed,
accuracy: location.accuracy,
},
});
dispatch(
mapActions.setCurrent({
lat: location.latitude,
lon: location.longitude,
})
);
}
}; };
const startRecording = () => { const startRecording = () => {
globalThis.$lastValidLocationTime = 0;
startBackgroundGeolocation(newLocationHandler).then((result) => { startBackgroundGeolocation(newLocationHandler).then((result) => {
setWatcher_id(result); setWatcher_id(result);
}); });

View File

@ -31,7 +31,7 @@ const backgroundGeolocationConfig = {
// The minimum number of metres between subsequent locations. Defaults // The minimum number of metres between subsequent locations. Defaults
// to 0. // to 0.
distanceFilter: 5, distanceFilter: 10,
}; };
export const startBackgroundGeolocation = async (newLocationHandler: any) => { export const startBackgroundGeolocation = async (newLocationHandler: any) => {