|
||||
File indexing completed on 2025-01-18 09:35:40
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_CRAST_HPP 0041 #define BOOST_GEOMETRY_PROJECTIONS_CRAST_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 crast 0055 { 0056 0057 static const double XM = 0.97720502380583984317; 0058 static const double RXM = 1.02332670794648848847; 0059 static const double YM = 3.06998012383946546542; 0060 static const double RYM = 0.32573500793527994772; 0061 //static const double third = 0.333333333333333333; 0062 0063 template <typename T, typename Parameters> 0064 struct base_crast_spheroid 0065 { 0066 // FORWARD(s_forward) spheroid 0067 // Project coordinates from geographic (lon, lat) to cartesian (x, y) 0068 inline void fwd(Parameters const& , T const& lp_lon, T lp_lat, T& xy_x, T& xy_y) const 0069 { 0070 static const T third = detail::third<T>(); 0071 0072 lp_lat *= third; 0073 xy_x = XM * lp_lon * (2. * cos(lp_lat + lp_lat) - 1.); 0074 xy_y = YM * sin(lp_lat); 0075 } 0076 0077 // INVERSE(s_inverse) spheroid 0078 // Project coordinates from cartesian (x, y) to geographic (lon, lat) 0079 inline void inv(Parameters const& , T const& xy_x, T const& xy_y, T& lp_lon, T& lp_lat) const 0080 { 0081 static const T third = detail::third<T>(); 0082 0083 lp_lat = 3. * asin(xy_y * RYM); 0084 lp_lon = xy_x * RXM / (2. * cos((lp_lat + lp_lat) * third) - 1); 0085 } 0086 0087 static inline std::string get_name() 0088 { 0089 return "crast_spheroid"; 0090 } 0091 0092 }; 0093 0094 // Craster Parabolic (Putnins P4) 0095 template <typename Parameters> 0096 inline void setup_crast(Parameters& par) 0097 { 0098 par.es = 0.; 0099 } 0100 0101 }} // namespace detail::crast 0102 #endif // doxygen 0103 0104 /*! 0105 \brief Craster Parabolic (Putnins P4) projection 0106 \ingroup projections 0107 \tparam Geographic latlong point type 0108 \tparam Cartesian xy point type 0109 \tparam Parameters parameter type 0110 \par Projection characteristics 0111 - Pseudocylindrical 0112 - Spheroid 0113 \par Example 0114 \image html ex_crast.gif 0115 */ 0116 template <typename T, typename Parameters> 0117 struct crast_spheroid : public detail::crast::base_crast_spheroid<T, Parameters> 0118 { 0119 template <typename Params> 0120 inline crast_spheroid(Params const& , Parameters & par) 0121 { 0122 detail::crast::setup_crast(par); 0123 } 0124 }; 0125 0126 #ifndef DOXYGEN_NO_DETAIL 0127 namespace detail 0128 { 0129 0130 // Static projection 0131 BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION_FI(srs::spar::proj_crast, crast_spheroid) 0132 0133 // Factory entry(s) 0134 BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(crast_entry, crast_spheroid) 0135 0136 BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_BEGIN(crast_init) 0137 { 0138 BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(crast, crast_entry); 0139 } 0140 0141 } // namespace detail 0142 #endif // doxygen 0143 0144 } // namespace projections 0145 0146 }} // namespace boost::geometry 0147 0148 #endif // BOOST_GEOMETRY_PROJECTIONS_CRAST_HPP 0149
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |