18 : _northing(n_), _easting(e_) {
19 if (std::isnan(_northing)) {
20 throw std::domain_error(
"northing must not be NaN");
22 if (std::isnan(_easting)) {
23 throw std::domain_error(
"easting must not be NaN");
28 double easting()
const {
return _easting; }
31 return a._northing == b._northing && a._easting == b._easting;
50 const double constrainedScale = std::pow(2.0, constrainedZoom);
59 const double m = 1 - 1e-15;
65 return {northing, easting};
75 return {latitude, longitude};
79 return project_(latLng,
worldSize(scale));
84 return project_(latLng, 1 <<
zoom);
ProjectedMeters(double n_=0, double e_=0)
friend bool operator==(const ProjectedMeters &a, const ProjectedMeters &b)
friend bool operator!=(const ProjectedMeters &a, const ProjectedMeters &b)
static ProjectedMeters projectedMetersForLatLng(const LatLng &latLng)
static LatLng latLngForProjectedMeters(const ProjectedMeters &projectedMeters)
static double worldSize(double scale)
static Point< double > project(const LatLng &latLng, int32_t zoom)
Returns point on tile.
static LatLng unproject(const Point< double > &p, double scale, LatLng::WrapMode wrapMode=LatLng::Unwrapped)
static double getMetersPerPixelAtLatitude(double lat, double zoom)
static Point< double > project(const LatLng &latLng, double scale)
std::unique_ptr< Expression > zoom()
T clamp(T value, T min_, T max_)
constexpr double deg2rad(double deg) noexcept
Converts degrees to radians.
constexpr double MAX_ZOOM
constexpr double rad2deg(double rad) noexcept
Converts radians to degrees.
constexpr double MIN_ZOOM
constexpr double DEGREES_MAX
constexpr double LONGITUDE_MAX
constexpr double EARTH_RADIUS_M
constexpr double tileSize_D
constexpr double LATITUDE_MAX
mapbox::geometry::point< T > Point