inline bool operator()(const LatLong& p1, Cartesian& p2) const
 {
     // Latlong (LatLong -> Cartesian) will be projected, rest will be copied.
     // So first copy third or higher dimensions
     ggl::detail::copy::copy_coordinates<LatLong, Cartesian, 2,
             ggl::dimension<Cartesian>::value> ::copy(p1, p2);
     return m_prj->forward(p1, p2);
 }
 /// Transform operator
 inline bool apply(Cartesian const& p1, LatLong& p2) const
 {
     // Latlong (LL -> XY) will be projected, rest will be copied.
     // So first copy third or higher dimensions
     geometry::detail::convert::point_to_point<Cartesian, LatLong, 2,
             geometry::dimension<Cartesian>::value> ::copy(p1, p2);
     return m_prj->inverse(p1, p2);
 }
 inline bool apply(LatLong const& p1, Cartesian& p2) const
 {
     // Latlong (LatLong -> Cartesian) will be projected, rest will be copied.
     // So first copy third or higher dimensions
     geometry::detail::conversion::point_to_point<LatLong, Cartesian, 2,
             geometry::dimension<Cartesian>::value> ::apply(p1, p2);
     return m_prj->forward(p1, p2);
 }
 inline project_transformer(const std::string& par)
 {
     factory<LatLong, Cartesian, parameters> fac;
     m_prj.reset(fac.create_new(init(par)));
 }
 inline project_inverse_transformer(Parameters const& par)
 {
     factory<LatLong, Cartesian, Parameters> fac;
     m_prj.reset(fac.create_new(par));
 }