]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/geometry/srs/projections/proj/tcea.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / geometry / srs / projections / proj / tcea.hpp
CommitLineData
92f5a8d4 1// Boost.Geometry - gis-projections (based on PROJ4)
11fdf7f2
TL
2
3// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
4
92f5a8d4
TL
5// This file was modified by Oracle on 2017, 2018, 2019.
6// Modifications copyright (c) 2017-2019, Oracle and/or its affiliates.
11fdf7f2
TL
7// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
8
9// Use, modification and distribution is subject to the Boost Software License,
10// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
11// http://www.boost.org/LICENSE_1_0.txt)
12
13// This file is converted from PROJ4, http://trac.osgeo.org/proj
14// PROJ4 is originally written by Gerald Evenden (then of the USGS)
15// PROJ4 is maintained by Frank Warmerdam
16// PROJ4 is converted to Boost.Geometry by Barend Gehrels
17
92f5a8d4 18// Last updated version of proj: 5.0.0
11fdf7f2
TL
19
20// Original copyright notice:
21
22// Permission is hereby granted, free of charge, to any person obtaining a
23// copy of this software and associated documentation files (the "Software"),
24// to deal in the Software without restriction, including without limitation
25// the rights to use, copy, modify, merge, publish, distribute, sublicense,
26// and/or sell copies of the Software, and to permit persons to whom the
27// Software is furnished to do so, subject to the following conditions:
28
29// The above copyright notice and this permission notice shall be included
30// in all copies or substantial portions of the Software.
31
32// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
33// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
34// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
35// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
36// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
37// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
38// DEALINGS IN THE SOFTWARE.
39
92f5a8d4
TL
40#ifndef BOOST_GEOMETRY_PROJECTIONS_TCEA_HPP
41#define BOOST_GEOMETRY_PROJECTIONS_TCEA_HPP
42
11fdf7f2
TL
43#include <boost/geometry/srs/projections/impl/base_static.hpp>
44#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
45#include <boost/geometry/srs/projections/impl/projects.hpp>
46#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
47
48namespace boost { namespace geometry
49{
50
11fdf7f2
TL
51namespace projections
52{
53 #ifndef DOXYGEN_NO_DETAIL
54 namespace detail { namespace tcea
55 {
92f5a8d4
TL
56 template <typename T, typename Parameters>
57 struct base_tcea_spheroid
11fdf7f2 58 {
11fdf7f2
TL
59 // FORWARD(s_forward) spheroid
60 // Project coordinates from geographic (lon, lat) to cartesian (x, y)
92f5a8d4 61 inline void fwd(Parameters const& par, T const& lp_lon, T const& lp_lat, T& xy_x, T& xy_y) const
11fdf7f2 62 {
92f5a8d4
TL
63 xy_x = cos(lp_lat) * sin(lp_lon) / par.k0;
64 xy_y = par.k0 * (atan2(tan(lp_lat), cos(lp_lon)) - par.phi0);
11fdf7f2
TL
65 }
66
67 // INVERSE(s_inverse) spheroid
68 // Project coordinates from cartesian (x, y) to geographic (lon, lat)
92f5a8d4 69 inline void inv(Parameters const& par, T xy_x, T xy_y, T& lp_lon, T& lp_lat) const
11fdf7f2 70 {
92f5a8d4 71 T t;
11fdf7f2 72
92f5a8d4
TL
73 xy_y = xy_y / par.k0 + par.phi0;
74 xy_x *= par.k0;
11fdf7f2
TL
75 t = sqrt(1. - xy_x * xy_x);
76 lp_lat = asin(t * sin(xy_y));
77 lp_lon = atan2(xy_x, t * cos(xy_y));
78 }
79
80 static inline std::string get_name()
81 {
82 return "tcea_spheroid";
83 }
84
85 };
86
87 // Transverse Cylindrical Equal Area
92f5a8d4
TL
88 template <typename Parameters>
89 inline void setup_tcea(Parameters& par)
11fdf7f2 90 {
11fdf7f2
TL
91 par.es = 0.;
92 }
93
94 }} // namespace detail::tcea
95 #endif // doxygen
96
97 /*!
98 \brief Transverse Cylindrical Equal Area projection
99 \ingroup projections
100 \tparam Geographic latlong point type
101 \tparam Cartesian xy point type
102 \tparam Parameters parameter type
103 \par Projection characteristics
104 - Cylindrical
105 - Spheroid
106 \par Example
107 \image html ex_tcea.gif
108 */
92f5a8d4
TL
109 template <typename T, typename Parameters>
110 struct tcea_spheroid : public detail::tcea::base_tcea_spheroid<T, Parameters>
11fdf7f2 111 {
92f5a8d4
TL
112 template <typename Params>
113 inline tcea_spheroid(Params const& , Parameters & par)
11fdf7f2 114 {
92f5a8d4 115 detail::tcea::setup_tcea(par);
11fdf7f2
TL
116 }
117 };
118
119 #ifndef DOXYGEN_NO_DETAIL
120 namespace detail
121 {
122
123 // Static projection
92f5a8d4 124 BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION_FI(srs::spar::proj_tcea, tcea_spheroid)
11fdf7f2
TL
125
126 // Factory entry(s)
92f5a8d4
TL
127 BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(tcea_entry, tcea_spheroid)
128
129 BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_BEGIN(tcea_init)
11fdf7f2 130 {
92f5a8d4 131 BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(tcea, tcea_entry)
11fdf7f2
TL
132 }
133
134 } // namespace detail
135 #endif // doxygen
136
137} // namespace projections
138
139}} // namespace boost::geometry
140
141#endif // BOOST_GEOMETRY_PROJECTIONS_TCEA_HPP
142