Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:35:41

0001 // Boost.Geometry - gis-projections (based on PROJ4)
0002 
0003 // Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
0004 
0005 // This file was modified by Oracle on 2017, 2018, 2019.
0006 // Modifications copyright (c) 2017-2019, Oracle and/or its affiliates.
0007 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
0008 
0009 // Use, modification and distribution is subject to the Boost Software License,
0010 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
0011 // http://www.boost.org/LICENSE_1_0.txt)
0012 
0013 // This file is converted from PROJ4, http://trac.osgeo.org/proj
0014 // PROJ4 is originally written by Gerald Evenden (then of the USGS)
0015 // PROJ4 is maintained by Frank Warmerdam
0016 // PROJ4 is converted to Boost.Geometry by Barend Gehrels
0017 
0018 // Last updated version of proj: 5.0.0
0019 
0020 // Original copyright notice:
0021 
0022 // Permission is hereby granted, free of charge, to any person obtaining a
0023 // copy of this software and associated documentation files (the "Software"),
0024 // to deal in the Software without restriction, including without limitation
0025 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
0026 // and/or sell copies of the Software, and to permit persons to whom the
0027 // Software is furnished to do so, subject to the following conditions:
0028 
0029 // The above copyright notice and this permission notice shall be included
0030 // in all copies or substantial portions of the Software.
0031 
0032 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
0033 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0034 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
0035 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
0036 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
0037 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
0038 // DEALINGS IN THE SOFTWARE.
0039 
0040 #ifndef BOOST_GEOMETRY_PROJECTIONS_GINS8_HPP
0041 #define BOOST_GEOMETRY_PROJECTIONS_GINS8_HPP
0042 
0043 #include <boost/geometry/srs/projections/impl/base_static.hpp>
0044 #include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
0045 #include <boost/geometry/srs/projections/impl/projects.hpp>
0046 #include <boost/geometry/srs/projections/impl/factory_entry.hpp>
0047 
0048 namespace boost { namespace geometry
0049 {
0050 
0051 namespace projections
0052 {
0053     #ifndef DOXYGEN_NO_DETAIL
0054     namespace detail { namespace gins8
0055     {
0056 
0057             static const double Cl = 0.000952426;
0058             static const double Cp = 0.162388;
0059             //static const double C12 = 0.08333333333333333;
0060 
0061             template <typename T>
0062             inline T C12() { return 0.083333333333333333333333333333333333; }
0063 
0064             template <typename T, typename Parameters>
0065             struct base_gins8_spheroid
0066             {
0067                 // FORWARD(s_forward)  spheroid
0068                 // Project coordinates from geographic (lon, lat) to cartesian (x, y)
0069                 inline void fwd(Parameters const& , T const& lp_lon, T const& lp_lat, T& xy_x, T& xy_y) const
0070                 {
0071                     static const T C12 = gins8::C12<T>();
0072 
0073                     T t = lp_lat * lp_lat;
0074 
0075                     xy_y = lp_lat * (1. + t * C12);
0076                     xy_x = lp_lon * (1. - Cp * t);
0077                     t = lp_lon * lp_lon;
0078                     xy_x *= (0.87 - Cl * t * t);
0079                 }
0080 
0081                 static inline std::string get_name()
0082                 {
0083                     return "gins8_spheroid";
0084                 }
0085 
0086             };
0087 
0088             // Ginsburg VIII (TsNIIGAiK)
0089             template <typename Parameters>
0090             inline void setup_gins8(Parameters& par)
0091             {
0092                 par.es = 0.;
0093             }
0094 
0095     }} // namespace detail::gins8
0096     #endif // doxygen
0097 
0098     /*!
0099         \brief Ginsburg VIII (TsNIIGAiK) projection
0100         \ingroup projections
0101         \tparam Geographic latlong point type
0102         \tparam Cartesian xy point type
0103         \tparam Parameters parameter type
0104         \par Projection characteristics
0105          - Pseudocylindrical
0106          - Spheroid
0107          - no inverse
0108         \par Example
0109         \image html ex_gins8.gif
0110     */
0111     template <typename T, typename Parameters>
0112     struct gins8_spheroid : public detail::gins8::base_gins8_spheroid<T, Parameters>
0113     {
0114         template <typename Params>
0115         inline gins8_spheroid(Params const& , Parameters & par)
0116         {
0117             detail::gins8::setup_gins8(par);
0118         }
0119     };
0120 
0121     #ifndef DOXYGEN_NO_DETAIL
0122     namespace detail
0123     {
0124 
0125         // Static projection
0126         BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION_F(srs::spar::proj_gins8, gins8_spheroid)
0127 
0128         // Factory entry(s)
0129         BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_F(gins8_entry, gins8_spheroid)
0130 
0131         BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_BEGIN(gins8_init)
0132         {
0133             BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(gins8, gins8_entry);
0134         }
0135 
0136     } // namespace detail
0137     #endif // doxygen
0138 
0139 } // namespace projections
0140 
0141 }} // namespace boost::geometry
0142 
0143 #endif // BOOST_GEOMETRY_PROJECTIONS_GINS8_HPP
0144