summaryrefslogtreecommitdiff
path: root/boost/geometry/srs/projections/proj/sconics.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/geometry/srs/projections/proj/sconics.hpp')
-rw-r--r--boost/geometry/srs/projections/proj/sconics.hpp223
1 files changed, 81 insertions, 142 deletions
diff --git a/boost/geometry/srs/projections/proj/sconics.hpp b/boost/geometry/srs/projections/proj/sconics.hpp
index b1119d622a..5499f1a7c0 100644
--- a/boost/geometry/srs/projections/proj/sconics.hpp
+++ b/boost/geometry/srs/projections/proj/sconics.hpp
@@ -52,18 +52,6 @@
namespace boost { namespace geometry
{
-namespace srs { namespace par4
-{
- struct euler {}; // Euler
- struct murd1 {}; // Murdoch I
- struct murd2 {}; // Murdoch II
- struct murd3 {}; // Murdoch III
- struct pconic {}; // Perspective Conic
- struct tissot {}; // Tissot
- struct vitk1 {}; // Vitkovsky I
-
-}} //namespace srs::par4
-
namespace projections
{
#ifndef DOXYGEN_NO_DETAIL
@@ -94,14 +82,14 @@ namespace projections
};
/* get common factors for simple conics */
- template <typename Parameters, typename T>
- inline int phi12(Parameters& par, par_sconics<T>& proj_parm, T *del)
+ template <typename Params, typename T>
+ inline int phi12(Params const& params, par_sconics<T>& proj_parm, T *del)
{
T p1, p2;
int err = 0;
- if (!pj_param_r(par.params, "lat_1", p1) ||
- !pj_param_r(par.params, "lat_2", p2)) {
+ if (!pj_param_r<srs::spar::lat_1>(params, "lat_1", srs::dpar::lat_1, p1) ||
+ !pj_param_r<srs::spar::lat_2>(params, "lat_2", srs::dpar::lat_2, p2)) {
err = -41;
} else {
//p1 = pj_get_param_r(par.params, "lat_1"); // set above
@@ -126,7 +114,7 @@ namespace projections
// FORWARD(s_forward) spheroid
// Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(T& lp_lon, T& lp_lat, T& xy_x, T& xy_y) const
+ inline void fwd(T lp_lon, T const& lp_lat, T& xy_x, T& xy_y) const
{
T rho;
@@ -147,7 +135,7 @@ namespace projections
// INVERSE(s_inverse) ellipsoid & spheroid
// Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(T& xy_x, T& xy_y, T& lp_lon, T& lp_lat) const
+ inline void inv(T xy_x, T xy_y, T& lp_lon, T& lp_lat) const
{
T rho;
@@ -179,8 +167,8 @@ namespace projections
};
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_sconics<T>& proj_parm, proj_type type)
+ template <typename Params, typename Parameters, typename T>
+ inline void setup(Params const& params, Parameters& par, par_sconics<T>& proj_parm, proj_type type)
{
static const T half_pi = detail::half_pi<T>();
@@ -189,7 +177,7 @@ namespace projections
proj_parm.type = type;
- err = phi12(par, proj_parm, &del);
+ err = phi12(params, proj_parm, &del);
if(err)
BOOST_THROW_EXCEPTION( projection_exception(err) );
@@ -241,52 +229,52 @@ namespace projections
// Euler
- template <typename Parameters, typename T>
- inline void setup_euler(Parameters& par, par_sconics<T>& proj_parm)
+ template <typename Params, typename Parameters, typename T>
+ inline void setup_euler(Params const& params, Parameters& par, par_sconics<T>& proj_parm)
{
- setup(par, proj_parm, proj_euler);
+ setup(params, par, proj_parm, proj_euler);
}
// Tissot
- template <typename Parameters, typename T>
- inline void setup_tissot(Parameters& par, par_sconics<T>& proj_parm)
+ template <typename Params, typename Parameters, typename T>
+ inline void setup_tissot(Params const& params, Parameters& par, par_sconics<T>& proj_parm)
{
- setup(par, proj_parm, proj_tissot);
+ setup(params, par, proj_parm, proj_tissot);
}
// Murdoch I
- template <typename Parameters, typename T>
- inline void setup_murd1(Parameters& par, par_sconics<T>& proj_parm)
+ template <typename Params, typename Parameters, typename T>
+ inline void setup_murd1(Params const& params, Parameters& par, par_sconics<T>& proj_parm)
{
- setup(par, proj_parm, proj_murd1);
+ setup(params, par, proj_parm, proj_murd1);
}
// Murdoch II
- template <typename Parameters, typename T>
- inline void setup_murd2(Parameters& par, par_sconics<T>& proj_parm)
+ template <typename Params, typename Parameters, typename T>
+ inline void setup_murd2(Params const& params, Parameters& par, par_sconics<T>& proj_parm)
{
- setup(par, proj_parm, proj_murd2);
+ setup(params, par, proj_parm, proj_murd2);
}
// Murdoch III
- template <typename Parameters, typename T>
- inline void setup_murd3(Parameters& par, par_sconics<T>& proj_parm)
+ template <typename Params, typename Parameters, typename T>
+ inline void setup_murd3(Params const& params, Parameters& par, par_sconics<T>& proj_parm)
{
- setup(par, proj_parm, proj_murd3);
+ setup(params, par, proj_parm, proj_murd3);
}
// Perspective Conic
- template <typename Parameters, typename T>
- inline void setup_pconic(Parameters& par, par_sconics<T>& proj_parm)
+ template <typename Params, typename Parameters, typename T>
+ inline void setup_pconic(Params const& params, Parameters& par, par_sconics<T>& proj_parm)
{
- setup(par, proj_parm, proj_pconic);
+ setup(params, par, proj_parm, proj_pconic);
}
// Vitkovsky I
- template <typename Parameters, typename T>
- inline void setup_vitk1(Parameters& par, par_sconics<T>& proj_parm)
+ template <typename Params, typename Parameters, typename T>
+ inline void setup_vitk1(Params const& params, Parameters& par, par_sconics<T>& proj_parm)
{
- setup(par, proj_parm, proj_vitk1);
+ setup(params, par, proj_parm, proj_vitk1);
}
}} // namespace detail::sconics
@@ -310,9 +298,11 @@ namespace projections
template <typename T, typename Parameters>
struct tissot_spheroid : public detail::sconics::base_sconics_spheroid<T, Parameters>
{
- inline tissot_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
+ template <typename Params>
+ inline tissot_spheroid(Params const& params, const Parameters& par)
+ : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
{
- detail::sconics::setup_tissot(this->m_par, this->m_proj_parm);
+ detail::sconics::setup_tissot(params, this->m_par, this->m_proj_parm);
}
};
@@ -334,9 +324,11 @@ namespace projections
template <typename T, typename Parameters>
struct murd1_spheroid : public detail::sconics::base_sconics_spheroid<T, Parameters>
{
- inline murd1_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
+ template <typename Params>
+ inline murd1_spheroid(Params const& params, const Parameters& par)
+ : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
{
- detail::sconics::setup_murd1(this->m_par, this->m_proj_parm);
+ detail::sconics::setup_murd1(params, this->m_par, this->m_proj_parm);
}
};
@@ -358,9 +350,11 @@ namespace projections
template <typename T, typename Parameters>
struct murd2_spheroid : public detail::sconics::base_sconics_spheroid<T, Parameters>
{
- inline murd2_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
+ template <typename Params>
+ inline murd2_spheroid(Params const& params, const Parameters& par)
+ : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
{
- detail::sconics::setup_murd2(this->m_par, this->m_proj_parm);
+ detail::sconics::setup_murd2(params, this->m_par, this->m_proj_parm);
}
};
@@ -382,9 +376,11 @@ namespace projections
template <typename T, typename Parameters>
struct murd3_spheroid : public detail::sconics::base_sconics_spheroid<T, Parameters>
{
- inline murd3_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
+ template <typename Params>
+ inline murd3_spheroid(Params const& params, const Parameters& par)
+ : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
{
- detail::sconics::setup_murd3(this->m_par, this->m_proj_parm);
+ detail::sconics::setup_murd3(params, this->m_par, this->m_proj_parm);
}
};
@@ -406,9 +402,11 @@ namespace projections
template <typename T, typename Parameters>
struct euler_spheroid : public detail::sconics::base_sconics_spheroid<T, Parameters>
{
- inline euler_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
+ template <typename Params>
+ inline euler_spheroid(Params const& params, const Parameters& par)
+ : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
{
- detail::sconics::setup_euler(this->m_par, this->m_proj_parm);
+ detail::sconics::setup_euler(params, this->m_par, this->m_proj_parm);
}
};
@@ -430,9 +428,11 @@ namespace projections
template <typename T, typename Parameters>
struct pconic_spheroid : public detail::sconics::base_sconics_spheroid<T, Parameters>
{
- inline pconic_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
+ template <typename Params>
+ inline pconic_spheroid(Params const& params, const Parameters& par)
+ : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
{
- detail::sconics::setup_pconic(this->m_par, this->m_proj_parm);
+ detail::sconics::setup_pconic(params, this->m_par, this->m_proj_parm);
}
};
@@ -454,9 +454,11 @@ namespace projections
template <typename T, typename Parameters>
struct vitk1_spheroid : public detail::sconics::base_sconics_spheroid<T, Parameters>
{
- inline vitk1_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
+ template <typename Params>
+ inline vitk1_spheroid(Params const& params, const Parameters& par)
+ : detail::sconics::base_sconics_spheroid<T, Parameters>(par)
{
- detail::sconics::setup_vitk1(this->m_par, this->m_proj_parm);
+ detail::sconics::setup_vitk1(params, this->m_par, this->m_proj_parm);
}
};
@@ -465,95 +467,32 @@ namespace projections
{
// Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::euler, euler_spheroid, euler_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::murd1, murd1_spheroid, murd1_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::murd2, murd2_spheroid, murd2_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::murd3, murd3_spheroid, murd3_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::pconic, pconic_spheroid, pconic_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::tissot, tissot_spheroid, tissot_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::vitk1, vitk1_spheroid, vitk1_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::spar::proj_euler, euler_spheroid, euler_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::spar::proj_murd1, murd1_spheroid, murd1_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::spar::proj_murd2, murd2_spheroid, murd2_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::spar::proj_murd3, murd3_spheroid, murd3_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::spar::proj_pconic, pconic_spheroid, pconic_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::spar::proj_tissot, tissot_spheroid, tissot_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::spar::proj_vitk1, vitk1_spheroid, vitk1_spheroid)
// Factory entry(s)
- template <typename T, typename Parameters>
- class tissot_entry : public detail::factory_entry<T, Parameters>
- {
- public :
- virtual base_v<T, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<tissot_spheroid<T, Parameters>, T, Parameters>(par);
- }
- };
-
- template <typename T, typename Parameters>
- class murd1_entry : public detail::factory_entry<T, Parameters>
- {
- public :
- virtual base_v<T, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<murd1_spheroid<T, Parameters>, T, Parameters>(par);
- }
- };
-
- template <typename T, typename Parameters>
- class murd2_entry : public detail::factory_entry<T, Parameters>
- {
- public :
- virtual base_v<T, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<murd2_spheroid<T, Parameters>, T, Parameters>(par);
- }
- };
-
- template <typename T, typename Parameters>
- class murd3_entry : public detail::factory_entry<T, Parameters>
- {
- public :
- virtual base_v<T, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<murd3_spheroid<T, Parameters>, T, Parameters>(par);
- }
- };
-
- template <typename T, typename Parameters>
- class euler_entry : public detail::factory_entry<T, Parameters>
- {
- public :
- virtual base_v<T, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<euler_spheroid<T, Parameters>, T, Parameters>(par);
- }
- };
-
- template <typename T, typename Parameters>
- class pconic_entry : public detail::factory_entry<T, Parameters>
- {
- public :
- virtual base_v<T, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<pconic_spheroid<T, Parameters>, T, Parameters>(par);
- }
- };
-
- template <typename T, typename Parameters>
- class vitk1_entry : public detail::factory_entry<T, Parameters>
- {
- public :
- virtual base_v<T, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<vitk1_spheroid<T, Parameters>, T, Parameters>(par);
- }
- };
-
- template <typename T, typename Parameters>
- inline void sconics_init(detail::base_factory<T, Parameters>& factory)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(euler_entry, euler_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(murd1_entry, murd1_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(murd2_entry, murd2_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(murd3_entry, murd3_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(pconic_entry, pconic_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(tissot_entry, tissot_spheroid)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(vitk1_entry, vitk1_spheroid)
+
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_BEGIN(sconics_init)
{
- factory.add_to_factory("tissot", new tissot_entry<T, Parameters>);
- factory.add_to_factory("murd1", new murd1_entry<T, Parameters>);
- factory.add_to_factory("murd2", new murd2_entry<T, Parameters>);
- factory.add_to_factory("murd3", new murd3_entry<T, Parameters>);
- factory.add_to_factory("euler", new euler_entry<T, Parameters>);
- factory.add_to_factory("pconic", new pconic_entry<T, Parameters>);
- factory.add_to_factory("vitk1", new vitk1_entry<T, Parameters>);
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(euler, euler_entry)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(murd1, murd1_entry)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(murd2, murd2_entry)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(murd3, murd3_entry)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(pconic, pconic_entry)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(tissot, tissot_entry)
+ BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(vitk1, vitk1_entry)
}
} // namespace detail