diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-02-09 17:42:38 +0200 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-03-01 20:58:54 +0000 |
commit | 411a562061f404fa7174222f38a1a9a13a396fd9 (patch) | |
tree | fcbc295f48d48d86f75ced98b8a9ad137cf5bce0 | |
parent | 9955087767d226c09816d562be39be1f1a1e84c5 (diff) | |
download | qtlocation-mapboxgl-411a562061f404fa7174222f38a1a9a13a396fd9.tar.gz |
[core] Enforce constants usage
Use 'LATITUDE_MAX', 'LONGITUDE_MAX', 'DEG2RAD' and 'RAD2DEG' whenever
possible.
-rw-r--r-- | include/mbgl/util/constants.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/layer/custom_layer.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/map/map.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/map/transform.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/map/transform_state.cpp | 28 | ||||
-rw-r--r-- | src/mbgl/renderer/painter_raster.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/source/source_info.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/text/quads.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/util/constants.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/util/geo.cpp | 6 | ||||
-rw-r--r-- | test/map/transform.cpp | 33 | ||||
-rw-r--r-- | test/util/geo.cpp | 31 |
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()); } } |