diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2018-11-22 10:37:27 +0100 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2018-11-28 06:36:13 +0000 |
commit | c83f4565687e4ab3de87248362305d833ca8eea1 (patch) | |
tree | 88046a3fbaf581ae13d08df3196e5cd93cf87541 /src/plugins/position/winrt | |
parent | 536668aef188df181cc6986355db195579f44206 (diff) | |
download | qtlocation-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>
Diffstat (limited to 'src/plugins/position/winrt')
-rw-r--r-- | src/plugins/position/winrt/qgeopositioninfosource_winrt.cpp | 51 |
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); |