From 26af7265c3e995fb5d09fc5f7e13dd73ae4660b3 Mon Sep 17 00:00:00 2001 From: xylosper Date: Tue, 12 Feb 2019 11:18:50 +0900 Subject: [PATCH] [qt] add global projection functions There are 3 methods in QMapboxGL which can be static method. QMapboxGL::metersPerPixelAtLatitude QMapboxGL::projectedMetersForCoordinate QMapboxGL::coordinateForProjectedMeters Add these functions into QMapbox namespace as global functions. The methods in QMapboxGL are kept for backward compatibility. --- platform/qt/include/qmapbox.hpp | 4 ++++ platform/qt/src/qmapbox.cpp | 27 +++++++++++++++++++++++++++ platform/qt/src/qmapboxgl.cpp | 8 +++----- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/platform/qt/include/qmapbox.hpp b/platform/qt/include/qmapbox.hpp index c1fbf52ae..475c591de 100644 --- a/platform/qt/include/qmapbox.hpp +++ b/platform/qt/include/qmapbox.hpp @@ -127,6 +127,10 @@ public: virtual void deinitialize() = 0; }; +double metersPerPixelAtLatitude(double latitude, double zoom); +ProjectedMeters projectedMetersForCoordinate(const Coordinate &); +Coordinate coordinateForProjectedMeters(const ProjectedMeters &); + } // namespace QMapbox Q_DECLARE_METATYPE(QMapbox::Coordinate); diff --git a/platform/qt/src/qmapbox.cpp b/platform/qt/src/qmapbox.cpp index d0f80818c..34cb5e86b 100644 --- a/platform/qt/src/qmapbox.cpp +++ b/platform/qt/src/qmapbox.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -222,4 +223,30 @@ QVector >& defaultStyles() return styles; } +/*! + Returns the amount of meters per pixel from a given \a latitude and \a zoom. +*/ +double metersPerPixelAtLatitude(double latitude, double zoom) +{ + return mbgl::Projection::getMetersPerPixelAtLatitude(latitude, zoom); +} + +/*! + Return the projected meters for a given \a coordinate object. +*/ +ProjectedMeters projectedMetersForCoordinate(const Coordinate &coordinate) +{ + auto projectedMeters = mbgl::Projection::projectedMetersForLatLng(mbgl::LatLng { coordinate.first, coordinate.second }); + return QMapbox::ProjectedMeters(projectedMeters.northing(), projectedMeters.easting()); +} + +/*! + Returns the coordinate for a given \a projectedMeters object. +*/ +Coordinate coordinateForProjectedMeters(const ProjectedMeters &projectedMeters) +{ + auto latLng = mbgl::Projection::latLngForProjectedMeters(mbgl::ProjectedMeters { projectedMeters.first, projectedMeters.second }); + return QMapbox::Coordinate(latLng.latitude(), latLng.longitude()); +} + } // namespace QMapbox diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index e430912ef..721bba8ff 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -1169,7 +1169,7 @@ void QMapboxGL::addAnnotationIcon(const QString &name, const QImage &icon) */ double QMapboxGL::metersPerPixelAtLatitude(double latitude_, double zoom_) const { - return mbgl::Projection::getMetersPerPixelAtLatitude(latitude_, zoom_); + return QMapbox::metersPerPixelAtLatitude(latitude_, zoom_); } /*! @@ -1177,8 +1177,7 @@ double QMapboxGL::metersPerPixelAtLatitude(double latitude_, double zoom_) const */ QMapbox::ProjectedMeters QMapboxGL::projectedMetersForCoordinate(const QMapbox::Coordinate &coordinate_) const { - auto projectedMeters = mbgl::Projection::projectedMetersForLatLng(mbgl::LatLng { coordinate_.first, coordinate_.second }); - return QMapbox::ProjectedMeters(projectedMeters.northing(), projectedMeters.easting()); + return QMapbox::projectedMetersForCoordinate(coordinate_); } /*! @@ -1186,8 +1185,7 @@ QMapbox::ProjectedMeters QMapboxGL::projectedMetersForCoordinate(const QMapbox:: */ QMapbox::Coordinate QMapboxGL::coordinateForProjectedMeters(const QMapbox::ProjectedMeters &projectedMeters) const { - auto latLng = mbgl::Projection::latLngForProjectedMeters(mbgl::ProjectedMeters { projectedMeters.first, projectedMeters.second }); - return QMapbox::Coordinate(latLng.latitude(), latLng.longitude()); + return QMapbox::coordinateForProjectedMeters(projectedMeters); } /*!