summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Wolff <oliver.wolff@qt.io>2018-11-22 10:37:27 +0100
committerOliver Wolff <oliver.wolff@qt.io>2018-11-28 06:36:13 +0000
commitc83f4565687e4ab3de87248362305d833ca8eea1 (patch)
tree88046a3fbaf581ae13d08df3196e5cd93cf87541
parent536668aef188df181cc6986355db195579f44206 (diff)
downloadqtlocation-c83f4565687e4ab3de87248362305d833ca8eea1.tar.gz
winrt: Replace deprecated functions
get_Altitude and the like are marked deprecated and thus should not be used. Use proper replacement functions as advised in Microsoft's documentation. Change-Id: I2166611a3133cadf9fb110242f231d76ca517932 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp51
1 files changed, 31 insertions, 20 deletions
diff --git a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
index 2ce06a8b..21e0fddd 100644
--- a/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
+++ b/src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp
@@ -436,38 +436,49 @@ HRESULT QGeoPositionInfoSourceWinRT::onPositionChanged(IGeolocator *locator, IPo
Q_UNUSED(locator);
HRESULT hr;
- ComPtr<IGeoposition> pos;
- hr = args->get_Position(&pos);
+ ComPtr<IGeoposition> position;
+ hr = args->get_Position(&position);
RETURN_HR_IF_FAILED("Could not access position object.");
QGeoPositionInfo currentInfo;
ComPtr<IGeocoordinate> coord;
- hr = pos->get_Coordinate(&coord);
+ hr = position->get_Coordinate(&coord);
if (FAILED(hr))
qErrnoWarning(hr, "Could not access coordinate");
- DOUBLE lat;
- hr = coord->get_Latitude(&lat);
+ ComPtr<IGeocoordinateWithPoint> pointCoordinate;
+ hr = coord.As(&pointCoordinate);
if (FAILED(hr))
- qErrnoWarning(hr, "Could not access latitude");
+ qErrnoWarning(hr, "Could not cast coordinate.");
- DOUBLE lon;
- hr = coord->get_Longitude(&lon);
+ ComPtr<IGeopoint> point;
+ hr = pointCoordinate->get_Point(&point);
if (FAILED(hr))
- qErrnoWarning(hr, "Could not access longitude");
-
- // Depending on data source altitude can
- // be identified or not
- IReference<double> *alt;
- hr = coord->get_Altitude(&alt);
- if (SUCCEEDED(hr) && alt) {
- double altd;
- hr = alt->get_Value(&altd);
- currentInfo.setCoordinate(QGeoCoordinate(lat, lon, altd));
- } else {
- currentInfo.setCoordinate(QGeoCoordinate(lat, lon));
+ qErrnoWarning(hr, "Could not obtain coordinate's point.");
+
+ BasicGeoposition pos;
+ hr = point->get_Position(&pos);
+ if (FAILED(hr))
+ qErrnoWarning(hr, "Could not obtain point's position.");
+
+ DOUBLE lat = pos.Latitude;
+ DOUBLE lon = pos.Longitude;
+ DOUBLE alt = pos.Altitude;
+
+ bool altitudeAvailable = false;
+ ComPtr<IGeoshape> shape;
+ hr = point.As(&shape);
+ if (SUCCEEDED(hr) && shape) {
+ AltitudeReferenceSystem altitudeSystem;
+ hr = shape->get_AltitudeReferenceSystem(&altitudeSystem);
+ if (SUCCEEDED(hr) && altitudeSystem == AltitudeReferenceSystem_Geoid)
+ altitudeAvailable = true;
}
+ if (altitudeAvailable)
+ currentInfo.setCoordinate(QGeoCoordinate(lat, lon, alt));
+ else
+ currentInfo.setCoordinate(QGeoCoordinate(lat, lon));
DOUBLE accuracy;
hr = coord->get_Accuracy(&accuracy);