diff options
author | Paolo Angelelli <paolo.angelelli@theqtcompany.com> | 2016-09-27 18:45:49 +0200 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2016-10-06 08:33:06 +0000 |
commit | a7c7a9bfc1f1d75f23f1e67ba3859e698e2e8965 (patch) | |
tree | bc7855bd5807a69a443f113038b74a19c5696108 /src/positioning | |
parent | 26b2f917861e63091cf97a5acba04d7b813c2fed (diff) | |
download | qtlocation-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.h | 93 |
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. |