[core] Inline LatLng::project definition the one place it's used
This commit is contained in:
@@ -48,8 +48,6 @@ public:
|
||||
|
||||
// Constructs a LatLng object with the top left position of the specified tile.
|
||||
LatLng(const TileID& id);
|
||||
|
||||
ScreenCoordinate project() const;
|
||||
};
|
||||
|
||||
inline bool operator==(const LatLng& a, const LatLng& b) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <mbgl/annotation/point_annotation_impl.hpp>
|
||||
#include <mbgl/annotation/annotation_tile.hpp>
|
||||
#include <mbgl/math/clamp.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
@@ -12,7 +13,15 @@ void PointAnnotationImpl::updateLayer(const TileID& tileID, AnnotationTileLayer&
|
||||
std::unordered_map<std::string, std::string> featureProperties;
|
||||
featureProperties.emplace("sprite", point.icon.empty() ? std::string("default_marker") : point.icon);
|
||||
|
||||
mbgl::ScreenCoordinate projected = point.position.project();
|
||||
// Clamp to the latitude limits of Web Mercator.
|
||||
const double constrainedLatitude = util::clamp(point.position.latitude, -util::LATITUDE_MAX, util::LATITUDE_MAX);
|
||||
|
||||
// Project a coordinate into unit space in a square map.
|
||||
const double sine = std::sin(constrainedLatitude * util::DEG2RAD);
|
||||
const double x = point.position.longitude / util::DEGREES_MAX + 0.5;
|
||||
const double y = 0.5 - 0.25 * std::log((1.0 + sine) / (1.0 - sine)) / M_PI;
|
||||
|
||||
vec2<double> projected(x, y);
|
||||
projected *= std::pow(2, tileID.z);
|
||||
projected.x = std::fmod(projected.x, 1);
|
||||
projected.y = std::fmod(projected.y, 1);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#include <mbgl/math/clamp.hpp>
|
||||
#include <mbgl/util/geo.hpp>
|
||||
#include <mbgl/util/constants.hpp>
|
||||
#include <mbgl/map/tile_id.hpp>
|
||||
@@ -13,17 +12,6 @@ LatLng::LatLng(const TileID& id) {
|
||||
latitude = util::RAD2DEG * std::atan(0.5 * (std::exp(n) - std::exp(-n)));
|
||||
}
|
||||
|
||||
ScreenCoordinate LatLng::project() const {
|
||||
// Clamp to the latitude limits of Web Mercator.
|
||||
const double constrainedLatitude = util::clamp(latitude, -util::LATITUDE_MAX, util::LATITUDE_MAX);
|
||||
|
||||
// Project a coordinate into unit space in a square map.
|
||||
const double sine = std::sin(constrainedLatitude * util::DEG2RAD);
|
||||
const double x = longitude / util::DEGREES_MAX + 0.5;
|
||||
const double y = 0.5 - 0.25 * std::log((1.0 + sine) / (1.0 - sine)) / M_PI;
|
||||
return { x, y };
|
||||
}
|
||||
|
||||
LatLngBounds::LatLngBounds(const TileID& id)
|
||||
: sw(TileID{ id.z, id.x, id.y + 1, id.sourceZ }),
|
||||
ne(TileID{ id.z, id.x + 1, id.y, id.sourceZ }) {
|
||||
|
||||
Reference in New Issue
Block a user