summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/util/constants.hpp1
-rw-r--r--src/mbgl/layer/custom_layer.cpp2
-rw-r--r--src/mbgl/map/map.cpp10
-rw-r--r--src/mbgl/map/transform.cpp2
-rw-r--r--src/mbgl/map/transform_state.cpp28
-rw-r--r--src/mbgl/renderer/painter_raster.cpp2
-rw-r--r--src/mbgl/renderer/symbol_bucket.cpp2
-rw-r--r--src/mbgl/source/source_info.hpp2
-rw-r--r--src/mbgl/text/quads.cpp5
-rw-r--r--src/mbgl/util/constants.cpp3
-rw-r--r--src/mbgl/util/geo.cpp6
-rw-r--r--test/map/transform.cpp33
-rw-r--r--test/util/geo.cpp31
13 files changed, 66 insertions, 61 deletions
diff --git a/include/mbgl/util/constants.hpp b/include/mbgl/util/constants.hpp
index fef68fcf8c..27a92181d2 100644
--- a/include/mbgl/util/constants.hpp
+++ b/include/mbgl/util/constants.hpp
@@ -19,6 +19,7 @@ extern const double RAD2DEG;
extern const double M2PI;
extern const double EARTH_RADIUS_M;
extern const double LATITUDE_MAX;
+extern const double LONGITUDE_MAX;
extern const double PITCH_MAX;
extern const double MIN_ZOOM;
extern const double MAX_ZOOM;
diff --git a/src/mbgl/layer/custom_layer.cpp b/src/mbgl/layer/custom_layer.cpp
index 0b6de51e67..3b683bf833 100644
--- a/src/mbgl/layer/custom_layer.cpp
+++ b/src/mbgl/layer/custom_layer.cpp
@@ -44,7 +44,7 @@ void CustomLayer::render(const TransformState& state) const {
parameters.latitude = state.getLatLng().latitude;
parameters.longitude = state.getLatLng().longitude;
parameters.zoom = state.getZoom();
- parameters.bearing = -state.getAngle() / M_PI * 180;
+ parameters.bearing = -state.getAngle() * util::RAD2DEG;
parameters.pitch = state.getPitch();
parameters.altitude = state.getAltitude();
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index c3123fb3be..fe6a611742 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -349,17 +349,17 @@ void Map::setBearing(double degrees, const Duration& duration) {
}
void Map::setBearing(double degrees, const PrecisionPoint& center, const Duration& duration) {
- transform->setAngle(-degrees * M_PI / 180, center, duration);
+ transform->setAngle(-degrees * util::DEG2RAD, center, duration);
update(Update::Repaint);
}
void Map::setBearing(double degrees, const EdgeInsets& padding, const Duration& duration) {
- transform->setAngle(-degrees * M_PI / 180, padding, duration);
+ transform->setAngle(-degrees * util::DEG2RAD, padding, duration);
update(Update::Repaint);
}
double Map::getBearing() const {
- return -transform->getAngle() / M_PI * 180;
+ return -transform->getAngle() * util::RAD2DEG;
}
void Map::resetNorth(const Duration& duration) {
@@ -375,12 +375,12 @@ void Map::setPitch(double pitch, const Duration& duration) {
}
void Map::setPitch(double pitch, const PrecisionPoint& anchor, const Duration& duration) {
- transform->setPitch(pitch * M_PI / 180, anchor, duration);
+ transform->setPitch(pitch * util::DEG2RAD, anchor, duration);
update(Update::Repaint);
}
double Map::getPitch() const {
- return transform->getPitch() / M_PI * 180;
+ return transform->getPitch() * util::RAD2DEG;
}
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp
index 0f7af8c9e9..216b3dc9eb 100644
--- a/src/mbgl/map/transform.cpp
+++ b/src/mbgl/map/transform.cpp
@@ -333,7 +333,7 @@ void Transform::flyTo(const CameraOptions &camera, const AnimationOptions &anima
coordinate so that interpolating between the two endpoints will cross it. */
void Transform::unwrapLatLng(LatLng& latLng) {
LatLng startLatLng = getLatLng();
- if (std::abs(startLatLng.longitude) + std::abs(latLng.longitude) > 180) {
+ if (std::abs(startLatLng.longitude) + std::abs(latLng.longitude) > util::LONGITUDE_MAX) {
if (startLatLng.longitude > 0 && latLng.longitude < 0) {
latLng.longitude += 360;
} else if (startLatLng.longitude < 0 && latLng.longitude > 0) {
diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp
index 087defabda..1a0704b0a3 100644
--- a/src/mbgl/map/transform_state.cpp
+++ b/src/mbgl/map/transform_state.cpp
@@ -96,8 +96,8 @@ LatLng TransformState::getLatLng() const {
ll.latitude = util::RAD2DEG * (2 * std::atan(std::exp(y / Cc)) - 0.5 * M_PI);
// adjust for world wrap
- while (ll.longitude > 180) ll.longitude -= 180;
- while (ll.longitude < -180) ll.longitude += 180;
+ while (ll.longitude > util::LONGITUDE_MAX) ll.longitude -= util::LONGITUDE_MAX;
+ while (ll.longitude < -util::LONGITUDE_MAX) ll.longitude += util::LONGITUDE_MAX;
// adjust for date line
double w = util::tileSize * scale / 2;
@@ -106,18 +106,18 @@ LatLng TransformState::getLatLng() const {
while (x_ > w) {
x_ -= w;
if (ll.longitude < 0) {
- ll.longitude += 180;
+ ll.longitude += util::LONGITUDE_MAX;
} else if (ll.longitude > 0) {
- ll.longitude -= 180;
+ ll.longitude -= util::LONGITUDE_MAX;
}
}
} else if (x_ < -w) {
while (x_ < -w) {
x_ += w;
if (ll.longitude < 0) {
- ll.longitude -= 180;
+ ll.longitude -= util::LONGITUDE_MAX;
} else if (ll.longitude > 0) {
- ll.longitude -= 180;
+ ll.longitude -= util::LONGITUDE_MAX;
}
}
}
@@ -220,21 +220,21 @@ bool TransformState::isGestureInProgress() const {
#pragma mark - Projection
double TransformState::lngX(double lng) const {
- return (180.0f + lng) * worldSize() / 360.0f;
+ return (util::LONGITUDE_MAX + lng) * worldSize() / 360.0f;
}
double TransformState::latY(double lat) const {
- double y_ = 180.0f / M_PI * std::log(std::tan(M_PI / 4 + lat * M_PI / 360.0f));
- return (180.0f - y_) * worldSize() / 360.0f;
+ double y_ = util::RAD2DEG * std::log(std::tan(M_PI / 4 + lat * M_PI / 360.0f));
+ return (util::LONGITUDE_MAX - y_) * worldSize() / 360.0f;
}
double TransformState::xLng(double x_, double worldSize_) const {
- return x_ * 360.0f / worldSize_ - 180.0f;
+ return x_ * 360.0f / worldSize_ - util::LONGITUDE_MAX;
}
double TransformState::yLat(double y_, double worldSize_) const {
- double y2 = 180.0f - y_ * 360.0f / worldSize_;
- return 360.0f / M_PI * std::atan(std::exp(y2 * M_PI / 180.0f)) - 90.0f;
+ double y2 = util::LONGITUDE_MAX - y_ * 360.0f / worldSize_;
+ return 360.0f / M_PI * std::atan(std::exp(y2 * util::DEG2RAD)) - 90.0f;
}
double TransformState::zoomScale(double zoom) const {
@@ -271,8 +271,8 @@ LatLng TransformState::coordinateToLatLng(const TileCoordinate& coord) const {
yLat(coord.row, worldSize_),
xLng(coord.column, worldSize_)
};
- while (latLng.longitude < -180.0f) latLng.longitude += 360.0f;
- while (latLng.longitude > 180.0f) latLng.longitude -= 360.0f;
+ while (latLng.longitude < -util::LONGITUDE_MAX) latLng.longitude += 360.0f;
+ while (latLng.longitude > util::LONGITUDE_MAX) latLng.longitude -= 360.0f;
return latLng;
}
diff --git a/src/mbgl/renderer/painter_raster.cpp b/src/mbgl/renderer/painter_raster.cpp
index 377b2c005c..827229d3a5 100644
--- a/src/mbgl/renderer/painter_raster.cpp
+++ b/src/mbgl/renderer/painter_raster.cpp
@@ -49,7 +49,7 @@ float Painter::contrastFactor(float contrast) {
}
std::array<float, 3> Painter::spinWeights(float spin) {
- spin *= M_PI / 180;
+ spin *= util::DEG2RAD;
float s = std::sin(spin);
float c = std::cos(spin);
std::array<float, 3> spin_weights = {{
diff --git a/src/mbgl/renderer/symbol_bucket.cpp b/src/mbgl/renderer/symbol_bucket.cpp
index 683a6f4b11..67c1bf3150 100644
--- a/src/mbgl/renderer/symbol_bucket.cpp
+++ b/src/mbgl/renderer/symbol_bucket.cpp
@@ -285,7 +285,7 @@ void SymbolBucket::addFeature(const std::vector<std::vector<Coordinate>> &lines,
const bool avoidEdges = layout.avoidEdges && layout.placement != PlacementType::Line;
const float textPadding = layout.text.padding * tilePixelRatio;
const float iconPadding = layout.icon.padding * tilePixelRatio;
- const float textMaxAngle = layout.text.maxAngle * M_PI / 180;
+ const float textMaxAngle = layout.text.maxAngle * util::DEG2RAD;
const bool textAlongLine =
layout.text.rotationAlignment == RotationAlignmentType::Map &&
layout.placement == PlacementType::Line;
diff --git a/src/mbgl/source/source_info.hpp b/src/mbgl/source/source_info.hpp
index ea134c0210..9e905d2b9e 100644
--- a/src/mbgl/source/source_info.hpp
+++ b/src/mbgl/source/source_info.hpp
@@ -20,7 +20,7 @@ public:
uint16_t maxZoom = 22;
std::string attribution;
std::array<double, 3> center = { { 0, 0, 0 } };
- std::array<double, 4> bounds = { { -180, -90, 180, 90 } };
+ std::array<double, 4> bounds = { { -util::LONGITUDE_MAX, -util::LATITUDE_MAX, util::LONGITUDE_MAX, util::LATITUDE_MAX } };
};
} // namespace mbgl
diff --git a/src/mbgl/text/quads.cpp b/src/mbgl/text/quads.cpp
index 92866566d8..1950f41fc7 100644
--- a/src/mbgl/text/quads.cpp
+++ b/src/mbgl/text/quads.cpp
@@ -3,6 +3,7 @@
#include <mbgl/geometry/anchor.hpp>
#include <mbgl/layer/symbol_layer.hpp>
#include <mbgl/util/math.hpp>
+#include <mbgl/util/constants.hpp>
#include <cassert>
namespace mbgl {
@@ -26,7 +27,7 @@ SymbolQuads getIconQuads(Anchor& anchor, const PositionedIcon& shapedIcon,
vec2<float> bl{left, bottom};
- float angle = layout.icon.rotate * M_PI / 180.0f;
+ float angle = layout.icon.rotate * util::DEG2RAD;
if (alongLine) {
assert(static_cast<unsigned int>(anchor.segment) < line.size());
const Coordinate &prev= line[anchor.segment];
@@ -134,7 +135,7 @@ SymbolQuads getGlyphQuads(Anchor& anchor, const Shaping& shapedText,
const float boxScale, const std::vector<Coordinate>& line, const SymbolLayoutProperties& layout,
const bool alongLine, const GlyphPositions& face) {
- const float textRotate = layout.text.rotate * M_PI / 180;
+ const float textRotate = layout.text.rotate * util::DEG2RAD;
const bool keepUpright = layout.text.keepUpright;
SymbolQuads quads;
diff --git a/src/mbgl/util/constants.cpp b/src/mbgl/util/constants.cpp
index 85f9856a3a..ead115532f 100644
--- a/src/mbgl/util/constants.cpp
+++ b/src/mbgl/util/constants.cpp
@@ -24,7 +24,8 @@ const double DEG2RAD = M_PI / 180.0;
const double RAD2DEG = 180.0 / M_PI;
const double M2PI = 2 * M_PI;
const double EARTH_RADIUS_M = 6378137;
-const double LATITUDE_MAX = 85.05112878;
+const double LATITUDE_MAX = 85.051128779806604;
+const double LONGITUDE_MAX = 180;
const double PITCH_MAX = M_PI / 3;
const double MIN_ZOOM = 0.0;
const double MAX_ZOOM = 25.5;
diff --git a/src/mbgl/util/geo.cpp b/src/mbgl/util/geo.cpp
index 25e795e4ef..6a279c823d 100644
--- a/src/mbgl/util/geo.cpp
+++ b/src/mbgl/util/geo.cpp
@@ -7,9 +7,9 @@
namespace mbgl {
LatLng::LatLng(const TileID& id) {
- longitude = id.x / std::pow(2.0, id.z) * 360.0 - 180;
+ longitude = id.x / std::pow(2.0, id.z) * 360.0 - util::LONGITUDE_MAX;
const double n = M_PI - 2.0 * M_PI * id.y / std::pow(2.0, id.z);
- latitude = 180.0 / M_PI * std::atan(0.5 * (std::exp(n) - std::exp(-n)));
+ latitude = util::RAD2DEG * std::atan(0.5 * (std::exp(n) - std::exp(-n)));
}
PrecisionPoint LatLng::project() const {
@@ -17,7 +17,7 @@ PrecisionPoint LatLng::project() const {
const double constrainedLatitude = ::fmin(::fmax(latitude, -util::LATITUDE_MAX), util::LATITUDE_MAX);
// Project a coordinate into unit space in a square map.
- const double sine = std::sin(constrainedLatitude * M_PI / 180.0);
+ const double sine = std::sin(constrainedLatitude * util::DEG2RAD);
const double x = longitude / 360.0 + 0.5;
const double y = 0.5 - 0.25 * std::log((1.0 + sine) / (1.0 - sine)) / M_PI;
return { x, y };
diff --git a/test/map/transform.cpp b/test/map/transform.cpp
index 3eb1c1bee1..1d3309e7e2 100644
--- a/test/map/transform.cpp
+++ b/test/map/transform.cpp
@@ -109,8 +109,9 @@ TEST(Transform, InvalidBearing) {
TEST(Transform, PerspectiveProjection) {
MockView view;
- Transform transform(view, ConstrainMode::HeightOnly);
+ LatLng loc;
+ Transform transform(view, ConstrainMode::HeightOnly);
transform.resize({{ 1000, 1000 }});
transform.setScale(2 << 9);
transform.setPitch(0.9);
@@ -118,7 +119,7 @@ TEST(Transform, PerspectiveProjection) {
// expected values are from mapbox-gl-js
- LatLng loc = transform.getState().pointToLatLng({ 500, 500 });
+ loc = transform.getLatLng();
ASSERT_NEAR(-77, loc.longitude, 0.0001);
ASSERT_NEAR(38, loc.latitude, 0.0001);
@@ -145,17 +146,17 @@ TEST(Transform, ConstrainHeightOnly) {
Transform transform(view, ConstrainMode::HeightOnly);
transform.resize({{ 1000, 1000 }});
- transform.setScale(1024);
+ transform.setScale(std::pow(2, util::MAX_ZOOM));
transform.setLatLng(LatLngBounds::world().southwest());
- loc = transform.getState().pointToLatLng({ 500, 500 });
- ASSERT_NEAR(-85.021422866378714, loc.latitude, 0.0001);
- ASSERT_NEAR(180, std::abs(loc.longitude), 0.0001);
+ loc = transform.getLatLng();
+ ASSERT_NEAR(-util::LATITUDE_MAX, loc.latitude, 0.001);
+ ASSERT_NEAR(-util::LONGITUDE_MAX, loc.longitude, 0.001);
transform.setLatLng(LatLngBounds::world().northeast());
- loc = transform.getState().pointToLatLng({ 500, 500 });
- ASSERT_NEAR(85.021422866378742, loc.latitude, 0.0001);
- ASSERT_NEAR(180, std::abs(loc.longitude), 0.0001);
+ loc = transform.getLatLng();
+ ASSERT_NEAR(util::LATITUDE_MAX, loc.latitude, 0.001);
+ ASSERT_NEAR(util::LONGITUDE_MAX, std::abs(loc.longitude), 0.001);
}
TEST(Transform, ConstrainWidthAndHeight) {
@@ -164,17 +165,17 @@ TEST(Transform, ConstrainWidthAndHeight) {
Transform transform(view, ConstrainMode::WidthAndHeight);
transform.resize({{ 1000, 1000 }});
- transform.setScale(1024);
+ transform.setScale(std::pow(2, util::MAX_ZOOM));
transform.setLatLng(LatLngBounds::world().southwest());
- loc = transform.getState().pointToLatLng({ 500, 500 });
- ASSERT_NEAR(-85.021422866378714, loc.latitude, 0.0001);
- ASSERT_NEAR(-179.65667724609375, loc.longitude, 0.0001);
+ loc = transform.getLatLng();
+ ASSERT_NEAR(-util::LATITUDE_MAX, loc.latitude, 0.001);
+ ASSERT_NEAR(-util::LONGITUDE_MAX, loc.longitude, 0.001);
transform.setLatLng(LatLngBounds::world().northeast());
- loc = transform.getState().pointToLatLng({ 500, 500 });
- ASSERT_NEAR(85.021422866378742, loc.latitude, 0.0001);
- ASSERT_NEAR(179.65667724609358, std::abs(loc.longitude), 0.0001);
+ loc = transform.getLatLng();
+ ASSERT_NEAR(util::LATITUDE_MAX, loc.latitude, 0.001);
+ ASSERT_NEAR(util::LONGITUDE_MAX, std::abs(loc.longitude), 0.001);
}
TEST(Transform, Anchor) {
diff --git a/test/util/geo.cpp b/test/util/geo.cpp
index 96335c5dba..86f448ebbc 100644
--- a/test/util/geo.cpp
+++ b/test/util/geo.cpp
@@ -1,5 +1,6 @@
#include "../fixtures/util.hpp"
+#include <mbgl/util/constants.hpp>
#include <mbgl/util/geo.hpp>
#include <mbgl/map/tile_id.hpp>
@@ -87,36 +88,36 @@ TEST(LatLngBounds, Northwest) {
TEST(LatLng, FromTileID) {
for (int i = 0; i < 20; i++) {
const LatLng ll{ TileID(i, 0, 0, 0) };
- ASSERT_DOUBLE_EQ(-180, ll.longitude);
- ASSERT_DOUBLE_EQ(85.051128779806604, ll.latitude);
+ ASSERT_DOUBLE_EQ(-util::LONGITUDE_MAX, ll.longitude);
+ ASSERT_DOUBLE_EQ(util::LATITUDE_MAX, ll.latitude);
}
{
const LatLng ll{ TileID(0, 1, 0, 0) };
- ASSERT_DOUBLE_EQ(180, ll.longitude);
- ASSERT_DOUBLE_EQ(85.051128779806604, ll.latitude);
+ ASSERT_DOUBLE_EQ(util::LONGITUDE_MAX, ll.longitude);
+ ASSERT_DOUBLE_EQ(util::LATITUDE_MAX, ll.latitude);
}
{
const LatLng ll{ TileID(0, -1, 0, 0) };
ASSERT_DOUBLE_EQ(-540, ll.longitude);
- ASSERT_DOUBLE_EQ(85.051128779806604, ll.latitude);
+ ASSERT_DOUBLE_EQ(util::LATITUDE_MAX, ll.latitude);
}
}
TEST(LatLngBounds, FromTileID) {
{
const LatLngBounds bounds{ TileID(0, 0, 0, 0) };
- ASSERT_DOUBLE_EQ(-180, bounds.west());
- ASSERT_DOUBLE_EQ(-85.051128779806604, bounds.south());
- ASSERT_DOUBLE_EQ(180, bounds.east());
- ASSERT_DOUBLE_EQ(85.051128779806604, bounds.north());
+ ASSERT_DOUBLE_EQ(-util::LONGITUDE_MAX, bounds.west());
+ ASSERT_DOUBLE_EQ(-util::LATITUDE_MAX, bounds.south());
+ ASSERT_DOUBLE_EQ(util::LONGITUDE_MAX, bounds.east());
+ ASSERT_DOUBLE_EQ(util::LATITUDE_MAX, bounds.north());
}
{
const LatLngBounds bounds{ TileID(1, 0, 1, 0) };
- ASSERT_DOUBLE_EQ(-180, bounds.west());
- ASSERT_DOUBLE_EQ(-85.051128779806604, bounds.south());
+ ASSERT_DOUBLE_EQ(-util::LONGITUDE_MAX, bounds.west());
+ ASSERT_DOUBLE_EQ(-util::LATITUDE_MAX, bounds.south());
ASSERT_DOUBLE_EQ(0, bounds.east());
ASSERT_DOUBLE_EQ(0, bounds.north());
}
@@ -124,16 +125,16 @@ TEST(LatLngBounds, FromTileID) {
{
const LatLngBounds bounds{ TileID(1, 1, 1, 0) };
ASSERT_DOUBLE_EQ(0, bounds.west());
- ASSERT_DOUBLE_EQ(-85.051128779806604, bounds.south());
- ASSERT_DOUBLE_EQ(180, bounds.east());
+ ASSERT_DOUBLE_EQ(-util::LATITUDE_MAX, bounds.south());
+ ASSERT_DOUBLE_EQ(util::LONGITUDE_MAX, bounds.east());
ASSERT_DOUBLE_EQ(0, bounds.north());
}
{
const LatLngBounds bounds{ TileID(1, 0, 0, 0) };
- ASSERT_DOUBLE_EQ(-180, bounds.west());
+ ASSERT_DOUBLE_EQ(-util::LONGITUDE_MAX, bounds.west());
ASSERT_DOUBLE_EQ(0, bounds.south());
ASSERT_DOUBLE_EQ(0, bounds.east());
- ASSERT_DOUBLE_EQ(85.051128779806604, bounds.north());
+ ASSERT_DOUBLE_EQ(util::LATITUDE_MAX, bounds.north());
}
}