diff options
Diffstat (limited to 'qt-mobile/gpslocation.cpp')
-rw-r--r-- | qt-mobile/gpslocation.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/qt-mobile/gpslocation.cpp b/qt-mobile/gpslocation.cpp index eb0f15292..d9132f28e 100644 --- a/qt-mobile/gpslocation.cpp +++ b/qt-mobile/gpslocation.cpp @@ -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() |