mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 14:25:27 +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,18 +35,31 @@ void GpsLocation::serviceEnable(bool toggle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MINTIME 600
|
||||||
|
#define MINDIST 200
|
||||||
|
|
||||||
void GpsLocation::newPosition(QGeoPositionInfo pos)
|
void GpsLocation::newPosition(QGeoPositionInfo pos)
|
||||||
{
|
{
|
||||||
|
time_t lastTime;
|
||||||
|
QGeoCoordinate lastCoord;
|
||||||
QString msg("received new position %1");
|
QString msg("received new position %1");
|
||||||
status(qPrintable(msg.arg(pos.coordinate().toString())));
|
status(qPrintable(msg.arg(pos.coordinate().toString())));
|
||||||
geoSettings.beginGroup("locations");
|
geoSettings.beginGroup("locations");
|
||||||
int nr = geoSettings.value("count", 0).toInt();
|
int nr = geoSettings.value("count", 0).toInt();
|
||||||
|
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("count", nr + 1);
|
||||||
geoSettings.setValue(QString("gpsFix%1_time").arg(nr), pos.timestamp().toTime_t());
|
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_lat").arg(nr), rint(pos.coordinate().latitude() * 1000000));
|
||||||
geoSettings.setValue(QString("gpsFix%1_lon").arg(nr), rint(pos.coordinate().longitude() * 1000000));
|
geoSettings.setValue(QString("gpsFix%1_lon").arg(nr), rint(pos.coordinate().longitude() * 1000000));
|
||||||
geoSettings.sync();
|
geoSettings.sync();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GpsLocation::updateTimeout()
|
void GpsLocation::updateTimeout()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue