mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 06:15:26 +00:00
Location service: only store gps fix after certain time or distance
This should be configurable in the preferences at some point. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
62f7ec11d7
commit
24ea1e9c67
1 changed files with 18 additions and 5 deletions
|
@ -35,17 +35,30 @@ void GpsLocation::serviceEnable(bool toggle)
|
|||
}
|
||||
}
|
||||
|
||||
#define MINTIME 600
|
||||
#define MINDIST 200
|
||||
|
||||
void GpsLocation::newPosition(QGeoPositionInfo pos)
|
||||
{
|
||||
time_t lastTime;
|
||||
QGeoCoordinate lastCoord;
|
||||
QString msg("received new position %1");
|
||||
status(qPrintable(msg.arg(pos.coordinate().toString())));
|
||||
geoSettings.beginGroup("locations");
|
||||
int nr = geoSettings.value("count", 0).toInt();
|
||||
geoSettings.setValue("count", nr + 1);
|
||||
geoSettings.setValue(QString("gpsFix%1_time").arg(nr), pos.timestamp().toTime_t());
|
||||
geoSettings.setValue(QString("gpsFix%1_lat").arg(nr), rint(pos.coordinate().latitude() * 1000000));
|
||||
geoSettings.setValue(QString("gpsFix%1_lon").arg(nr), rint(pos.coordinate().longitude() * 1000000));
|
||||
geoSettings.sync();
|
||||
if (nr) {
|
||||
lastCoord.setLatitude(geoSettings.value(QString("gpsFix%1_lat").arg(nr)).toInt() / 1000000.0);
|
||||
lastCoord.setLongitude(geoSettings.value(QString("gpsFix%1_lon").arg(nr)).toInt() / 1000000.0);
|
||||
time_t lastTime = geoSettings.value(QString("gpsFix%1_time").arg(nr)).toULongLong();
|
||||
}
|
||||
// if we have no record stored or if at least 10 minutes have passed or we moved at least 200m
|
||||
if (!nr || pos.timestamp().toTime_t() > lastTime + MINTIME || lastCoord.distanceTo(pos.coordinate()) > MINDIST) {
|
||||
geoSettings.setValue("count", nr + 1);
|
||||
geoSettings.setValue(QString("gpsFix%1_time").arg(nr), pos.timestamp().toTime_t());
|
||||
geoSettings.setValue(QString("gpsFix%1_lat").arg(nr), rint(pos.coordinate().latitude() * 1000000));
|
||||
geoSettings.setValue(QString("gpsFix%1_lon").arg(nr), rint(pos.coordinate().longitude() * 1000000));
|
||||
geoSettings.sync();
|
||||
}
|
||||
}
|
||||
|
||||
void GpsLocation::updateTimeout()
|
||||
|
|
Loading…
Add table
Reference in a new issue