diff options
Diffstat (limited to 'boost/geometry/strategies/geographic/area.hpp')
-rw-r--r-- | boost/geometry/strategies/geographic/area.hpp | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/boost/geometry/strategies/geographic/area.hpp b/boost/geometry/strategies/geographic/area.hpp index 44dc2e6945..40d6c8243e 100644 --- a/boost/geometry/strategies/geographic/area.hpp +++ b/boost/geometry/strategies/geographic/area.hpp @@ -15,12 +15,11 @@ #include <boost/geometry/core/srs.hpp> #include <boost/geometry/formulas/area_formulas.hpp> -#include <boost/geometry/formulas/flattening.hpp> +#include <boost/geometry/formulas/authalic_radius_sqr.hpp> +#include <boost/geometry/formulas/eccentricity_sqr.hpp> #include <boost/geometry/strategies/geographic/parameters.hpp> -#include <boost/math/special_functions/atanh.hpp> - namespace boost { namespace geometry { @@ -88,31 +87,16 @@ protected : inline spheroid_constants(Spheroid const& spheroid) : m_spheroid(spheroid) , m_a2(math::sqr(get_radius<0>(spheroid))) - , m_e2(formula::flattening<CT>(spheroid) - * (CT(2.0) - CT(formula::flattening<CT>(spheroid)))) + , m_e2(formula::eccentricity_sqr<CT>(spheroid)) , m_ep2(m_e2 / (CT(1.0) - m_e2)) , m_ep(math::sqrt(m_ep2)) - , m_c2(authalic_radius(spheroid, m_a2, m_e2)) + , m_c2(formula_dispatch::authalic_radius_sqr + < + CT, Spheroid, srs_spheroid_tag + >::apply(m_a2, m_e2)) {} }; - static inline CT authalic_radius(Spheroid const& sph, CT const& a2, CT const& e2) - { - CT const c0 = 0; - - if (math::equals(e2, c0)) - { - return a2; - } - - CT const sqrt_e2 = math::sqrt(e2); - CT const c2 = 2; - - return (a2 / c2) + - ((math::sqr(get_radius<2>(sph)) * boost::math::atanh(sqrt_e2)) - / (c2 * sqrt_e2)); - } - struct area_sums { CT m_excess_sum; @@ -190,8 +174,10 @@ public : state.m_correction_sum += result.ellipsoidal_term; // Keep track whenever a segment crosses the prime meridian - geometry::formula::area_formulas<CT> - ::crosses_prime_meridian(p1, p2, state); + if (area_formulas::crosses_prime_meridian(p1, p2)) + { + state.m_crosses_prime_meridian++; + } } } |