]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/geometry/strategies/geographic/area.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / geometry / strategies / geographic / area.hpp
index d40a30cf22bf18dab3bca57602f368d05cf00926..600c73945492e509bf0527cbb12b7052330ad0b6 100644 (file)
-// Boost.Geometry (aka GGL, Generic Geometry Library)
+// Boost.Geometry
 
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2020, Oracle and/or its affiliates.
 
-// Copyright (c) 2016-2018 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
 
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
 
 #ifndef BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AREA_HPP
 #define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AREA_HPP
 
 
-#include <boost/geometry/srs/spheroid.hpp>
+#include <boost/config/pragma_message.hpp>
+BOOST_PRAGMA_MESSAGE("This include file is deprecated and will be removed in the future.")
 
-#include <boost/geometry/formulas/area_formulas.hpp>
-#include <boost/geometry/formulas/authalic_radius_sqr.hpp>
-#include <boost/geometry/formulas/eccentricity_sqr.hpp>
 
-#include <boost/geometry/strategies/area.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
+#include <boost/geometry/strategy/geographic/area.hpp>
 
 
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace area
-{
-
-/*!
-\brief Geographic area calculation
-\ingroup strategies
-\details Geographic area calculation by trapezoidal rule plus integral
-         approximation that gives the ellipsoidal correction
-\tparam FormulaPolicy Formula used to calculate azimuths
-\tparam SeriesOrder The order of approximation of the geodesic integral
-\tparam Spheroid The spheroid model
-\tparam CalculationType \tparam_calculation
-\author See
-- Danielsen JS, The area under the geodesic. Surv Rev 30(232): 61–66, 1989
-- Charles F.F Karney, Algorithms for geodesics, 2011 https://arxiv.org/pdf/1109.4448.pdf
-
-\qbk{
-[heading See also]
-\* [link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)]
-\* [link geometry.reference.srs.srs_spheroid srs::spheroid]
-}
-*/
-template
-<
-    typename FormulaPolicy = strategy::andoyer,
-    std::size_t SeriesOrder = strategy::default_order<FormulaPolicy>::value,
-    typename Spheroid = srs::spheroid<double>,
-    typename CalculationType = void
->
-class geographic
-{
-    // Switch between two kinds of approximation(series in eps and n v.s.series in k ^ 2 and e'^2)
-    static const bool ExpandEpsN = true;
-    // LongSegment Enables special handling of long segments
-    static const bool LongSegment = false;
-
-    //Select default types in case they are not set
-
-public:
-    template <typename Geometry>
-    struct result_type
-        : strategy::area::detail::result_type
-            <
-                Geometry,
-                CalculationType
-            >
-    {};
-
-protected :
-    struct spheroid_constants
-    {
-        typedef typename boost::mpl::if_c
-            <
-                boost::is_void<CalculationType>::value,
-                typename geometry::radius_type<Spheroid>::type,
-                CalculationType
-            >::type calc_t;
-
-        Spheroid m_spheroid;
-        calc_t const m_a2;  // squared equatorial radius
-        calc_t const m_e2;  // squared eccentricity
-        calc_t const m_ep2; // squared second eccentricity
-        calc_t const m_ep;  // second eccentricity
-        calc_t const m_c2;  // squared authalic radius
-
-        inline spheroid_constants(Spheroid const& spheroid)
-            : m_spheroid(spheroid)
-            , m_a2(math::sqr(get_radius<0>(spheroid)))
-            , m_e2(formula::eccentricity_sqr<calc_t>(spheroid))
-            , m_ep2(m_e2 / (calc_t(1.0) - m_e2))
-            , m_ep(math::sqrt(m_ep2))
-            , m_c2(formula_dispatch::authalic_radius_sqr
-                    <
-                        calc_t, Spheroid, srs_spheroid_tag
-                    >::apply(m_a2, m_e2))
-        {}
-    };
-
-public:
-    template <typename Geometry>
-    class state
-    {
-        friend class geographic;
-
-        typedef typename result_type<Geometry>::type return_type;
-
-    public:
-        inline state()
-            : m_excess_sum(0)
-            , m_correction_sum(0)
-            , m_crosses_prime_meridian(0)
-        {}
-
-    private:
-        inline return_type area(spheroid_constants const& spheroid_const) const
-        {
-            return_type result;
-
-            return_type sum = spheroid_const.m_c2 * m_excess_sum
-                   + spheroid_const.m_e2 * spheroid_const.m_a2 * m_correction_sum;
-
-            // If encircles some pole
-            if (m_crosses_prime_meridian % 2 == 1)
-            {
-                std::size_t times_crosses_prime_meridian
-                        = 1 + (m_crosses_prime_meridian / 2);
-
-                result = return_type(2.0)
-                         * geometry::math::pi<return_type>()
-                         * spheroid_const.m_c2
-                         * return_type(times_crosses_prime_meridian)
-                         - geometry::math::abs(sum);
-
-                if (geometry::math::sign<return_type>(sum) == 1)
-                {
-                    result = - result;
-                }
-
-            }
-            else
-            {
-                result = sum;
-            }
-
-            return result;
-        }
-
-        return_type m_excess_sum;
-        return_type m_correction_sum;
-
-        // Keep track if encircles some pole
-        std::size_t m_crosses_prime_meridian;
-    };
-
-public :
-    explicit inline geographic(Spheroid const& spheroid = Spheroid())
-        : m_spheroid_constants(spheroid)
-    {}
-
-    template <typename PointOfSegment, typename Geometry>
-    inline void apply(PointOfSegment const& p1,
-                      PointOfSegment const& p2,
-                      state<Geometry>& st) const
-    {
-        if (! geometry::math::equals(get<0>(p1), get<0>(p2)))
-        {
-            typedef geometry::formula::area_formulas
-                <
-                    typename result_type<Geometry>::type,
-                    SeriesOrder, ExpandEpsN
-                > area_formulas;
-
-            typename area_formulas::return_type_ellipsoidal result =
-                     area_formulas::template ellipsoidal<FormulaPolicy::template inverse>
-                                             (p1, p2, m_spheroid_constants);
-
-            st.m_excess_sum += result.spherical_term;
-            st.m_correction_sum += result.ellipsoidal_term;
-
-            // Keep track whenever a segment crosses the prime meridian
-            if (area_formulas::crosses_prime_meridian(p1, p2))
-            {
-                st.m_crosses_prime_meridian++;
-            }
-        }
-    }
-
-    template <typename Geometry>
-    inline typename result_type<Geometry>::type
-        result(state<Geometry> const& st) const
-    {
-        return st.area(m_spheroid_constants);
-    }
-
-private:
-    spheroid_constants m_spheroid_constants;
-
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-
-template <>
-struct default_strategy<geographic_tag>
-{
-    typedef strategy::area::geographic<> type;
-};
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-}
-
-}} // namespace strategy::area
-
-
-
-
-}} // namespace boost::geometry
-
 #endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AREA_HPP