summaryrefslogtreecommitdiff
path: root/src/positioning
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@theqtcompany.com>2016-09-27 18:45:49 +0200
committerPaolo Angelelli <paolo.angelelli@qt.io>2016-10-06 08:33:06 +0000
commita7c7a9bfc1f1d75f23f1e67ba3859e698e2e8965 (patch)
treebc7855bd5807a69a443f113038b74a19c5696108 /src/positioning
parent26b2f917861e63091cf97a5acba04d7b813c2fed (diff)
downloadqtlocation-a7c7a9bfc1f1d75f23f1e67ba3859e698e2e8965.tar.gz
Add OSRMv5 support in osm plugin
This patch adds support for the OSRMv5 protocol (the only one currently available on the OSRM demo server router.project.osrm.org). Support for the old v4 protocol is retained, in case of users who supply their own osm.routing.host parameter pointing at a self hosted OSRMv4 server. The support for OSRMv4 and v5 has been moved away from the osm plugin and into the location module because this should be used in the mapbox plugin in a subsequent patch (the routing support in the mapbox plugin currently uses the text direction coming from the server, which does not support i18n) Task-number: QTBUG-56119 Change-Id: Id30fd536c7fd434011795f643221f55becfc9e18 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
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 8c39463f..31df06fe 100644
--- a/src/positioning/qlocationutils_p.h
+++ b/src/positioning/qlocationutils_p.h
@@ -45,6 +45,7 @@
//
#include <QtCore/QtGlobal>
+#include <math.h>
QT_BEGIN_NAMESPACE
class QTime;
@@ -54,6 +55,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;
}
@@ -77,6 +97,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.