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:
Dirk Hohndel 2015-11-11 15:44:58 -08:00
parent 62f7ec11d7
commit 24ea1e9c67

View file

@ -35,17 +35,30 @@ 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();
geoSettings.setValue("count", nr + 1); if (nr) {
geoSettings.setValue(QString("gpsFix%1_time").arg(nr), pos.timestamp().toTime_t()); lastCoord.setLatitude(geoSettings.value(QString("gpsFix%1_lat").arg(nr)).toInt() / 1000000.0);
geoSettings.setValue(QString("gpsFix%1_lat").arg(nr), rint(pos.coordinate().latitude() * 1000000)); lastCoord.setLongitude(geoSettings.value(QString("gpsFix%1_lon").arg(nr)).toInt() / 1000000.0);
geoSettings.setValue(QString("gpsFix%1_lon").arg(nr), rint(pos.coordinate().longitude() * 1000000)); time_t lastTime = geoSettings.value(QString("gpsFix%1_time").arg(nr)).toULongLong();
geoSettings.sync(); }
// 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() void GpsLocation::updateTimeout()