summaryrefslogtreecommitdiff
path: root/include/mbgl/util
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-10 18:59:04 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-13 10:11:20 +0300
commit9b6c2e6940ed33a87a20274eda19320e8c688fdf (patch)
tree949d871c2f159849b0cd4c7955a3c257edd069a0 /include/mbgl/util
parent62d355ab15e292462db6453578e07f06b0eafd6b (diff)
downloadqtlocation-mapboxgl-9b6c2e6940ed33a87a20274eda19320e8c688fdf.tar.gz
[test] Added Projection tests
Diffstat (limited to 'include/mbgl/util')
-rw-r--r--include/mbgl/util/geo.hpp8
-rw-r--r--include/mbgl/util/projection.hpp8
2 files changed, 11 insertions, 5 deletions
diff --git a/include/mbgl/util/geo.hpp b/include/mbgl/util/geo.hpp
index 7e15d5c2f1..5db307e482 100644
--- a/include/mbgl/util/geo.hpp
+++ b/include/mbgl/util/geo.hpp
@@ -67,8 +67,8 @@ inline bool operator!=(const LatLng& a, const LatLng& b) {
class ProjectedMeters {
public:
- double northing = 0;
- double easting = 0;
+ double northing;
+ double easting;
ProjectedMeters(double n = 0, double e = 0)
: northing(n), easting(e) {}
@@ -78,6 +78,10 @@ public:
}
};
+inline bool operator==(const ProjectedMeters& a, const ProjectedMeters& b) {
+ return a.northing == b.northing && a.easting == b.easting;
+}
+
class LatLngBounds {
public:
// Return a bounds covering the entire (unwrapped) world.
diff --git a/include/mbgl/util/projection.hpp b/include/mbgl/util/projection.hpp
index 8e1c994657..76c60f5cd8 100644
--- a/include/mbgl/util/projection.hpp
+++ b/include/mbgl/util/projection.hpp
@@ -12,19 +12,20 @@ class Projection {
public:
static inline double getMetersPerPixelAtLatitude(double lat, double zoom) {
- const double mapPixelWidthAtZoom = std::pow(2.0, zoom) * util::tileSize;
+ const double constrainedZoom = util::clamp(zoom, util::MIN_ZOOM, util::MAX_ZOOM);
+ const double mapPixelWidthAtZoom = std::pow(2.0, constrainedZoom) * util::tileSize;
const double constrainedLatitude = util::clamp(lat, -util::LATITUDE_MAX, util::LATITUDE_MAX);
-
return std::cos(constrainedLatitude * util::DEG2RAD) * util::M2PI * util::EARTH_RADIUS_M / mapPixelWidthAtZoom;
}
static inline ProjectedMeters projectedMetersForLatLng(const LatLng& latLng) {
const double constrainedLatitude = util::clamp(latLng.latitude, -util::LATITUDE_MAX, util::LATITUDE_MAX);
+ const double constrainedLongitude = util::clamp(latLng.longitude, -util::LONGITUDE_MAX, util::LONGITUDE_MAX);
const double m = 1 - 1e-15;
const double f = util::clamp(std::sin(util::DEG2RAD * constrainedLatitude), -m, m);
- const double easting = util::EARTH_RADIUS_M * latLng.longitude * util::DEG2RAD;
+ const double easting = util::EARTH_RADIUS_M * constrainedLongitude * util::DEG2RAD;
const double northing = 0.5 * util::EARTH_RADIUS_M * std::log((1 + f) / (1 - f));
return ProjectedMeters(northing, easting);
@@ -35,6 +36,7 @@ public:
double longitude = projectedMeters.easting * util::RAD2DEG / util::EARTH_RADIUS_M;
latitude = util::clamp(latitude, -util::LATITUDE_MAX, util::LATITUDE_MAX);
+ longitude = util::clamp(longitude, -util::LONGITUDE_MAX, util::LONGITUDE_MAX);
return LatLng(latitude, longitude);
}