summaryrefslogtreecommitdiff
path: root/src/positioning
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@qt.io>2016-11-02 13:14:00 +0100
committerAlex Blasche <alexander.blasche@qt.io>2016-11-02 13:14:06 +0100
commit1c0b494ae0d780230e2ed410ef74353dc1a2ea77 (patch)
treededac7c676ebd9dafdfc2879e5a330e4f69ba367 /src/positioning
parent315b4325d0b55d1104d1615fa6f7ecc12465f8f2 (diff)
parent16423f84f970d7dac644a4b041e3ebe2ac0f6e22 (diff)
downloadqtlocation-1c0b494ae0d780230e2ed410ef74353dc1a2ea77.tar.gz
Merge remote-tracking branch 'gerrit/5.7' into 5.8
Conflicts: tests/auto/declarative_ui/BLACKLIST Change-Id: I0f6c9228c899c4d1d55fffc596c661ee0f6c2b66
Diffstat (limited to 'src/positioning')
-rw-r--r--src/positioning/qlocationutils_p.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/positioning/qlocationutils_p.h b/src/positioning/qlocationutils_p.h
index b5d90b93..00c4d3e3 100644
--- a/src/positioning/qlocationutils_p.h
+++ b/src/positioning/qlocationutils_p.h
@@ -51,6 +51,7 @@
//
#include <QtCore/QtGlobal>
+#include <math.h>
QT_BEGIN_NAMESPACE
class QTime;
@@ -60,6 +61,25 @@ class QGeoPositionInfo;
class QLocationUtils
{
public:
+ enum CardinalDirection {
+ CardinalN,
+ CardinalE,
+ CardinalS,
+ CardinalW,
+ CardinalNE,
+ CardinalSE,
+ CardinalSW,
+ CardinalNW,
+ CardinalNNE,
+ CardinalENE,
+ CardinalESE,
+ CardinalSSE,
+ CardinalSSW,
+ CardinalWSW,
+ CardinalWNW,
+ CardinalNNW
+ };
+
inline static bool isValidLat(double lat) {
return lat >= -90 && lat <= 90;
}
@@ -83,6 +103,79 @@ public:
return lng;
}
+ inline static CardinalDirection azimuthToCardinalDirection4(double azimuth)
+ {
+ azimuth = fmod(azimuth, 360.0);
+ if (azimuth < 45.0 || azimuth > 315.0 )
+ return CardinalN;
+ else if (azimuth < 135.0)
+ return CardinalE;
+ else if (azimuth < 225.0)
+ return CardinalS;
+ else
+ return CardinalW;
+ }
+
+ inline static CardinalDirection azimuthToCardinalDirection8(double azimuth)
+ {
+ azimuth = fmod(azimuth, 360.0);
+ if (azimuth < 22.5 || azimuth > 337.5 )
+ return CardinalN;
+ else if (azimuth < 67.5)
+ return CardinalNE;
+ else if (azimuth < 112.5)
+ return CardinalE;
+ else if (azimuth < 157.5)
+ return CardinalSE;
+ else if (azimuth < 202.5)
+ return CardinalS;
+
+ else if (azimuth < 247.5)
+ return CardinalSW;
+ else if (azimuth < 292.5)
+ return CardinalW;
+ else
+ return CardinalNW;
+ }
+
+ inline static CardinalDirection azimuthToCardinalDirection16(double azimuth)
+ {
+ azimuth = fmod(azimuth, 360.0);
+ if (azimuth < 11.5 || azimuth > 348.75 )
+ return CardinalN;
+ else if (azimuth < 33.75)
+ return CardinalNNE;
+ else if (azimuth < 56.25)
+ return CardinalNE;
+ else if (azimuth < 78.75)
+ return CardinalENE;
+ else if (azimuth < 101.25)
+ return CardinalE;
+ else if (azimuth < 123.75)
+ return CardinalESE;
+ else if (azimuth < 146.25)
+ return CardinalSE;
+ else if (azimuth < 168.75)
+ return CardinalSSE;
+ else if (azimuth < 191.25)
+ return CardinalS;
+
+ else if (azimuth < 213.75)
+ return CardinalSSW;
+ else if (azimuth < 236.25)
+ return CardinalSW;
+ else if (azimuth < 258.75)
+ return CardinalWSW;
+ else if (azimuth < 281.25)
+ return CardinalW;
+ else if (azimuth < 303.75)
+ return CardinalWNW;
+ else if (azimuth < 326.25)
+ return CardinalNW;
+ else
+ return CardinalNNW;
+ }
+
/*
Creates a QGeoPositionInfo from a GGA, GLL, RMC, VTG or ZDA sentence.