GeographicLib
1.21
|
Local Cartesian coordinates. More...
#include <GeographicLib/LocalCartesian.hpp>
Public Member Functions | |
LocalCartesian (real lat0, real lon0, real h0=0, const Geocentric &earth=Geocentric::WGS84) throw () | |
LocalCartesian (const Geocentric &earth=Geocentric::WGS84) throw () | |
void | Reset (real lat0, real lon0, real h0=0) throw () |
void | Forward (real lat, real lon, real h, real &x, real &y, real &z) const throw () |
void | Forward (real lat, real lon, real h, real &x, real &y, real &z, std::vector< real > &M) const throw () |
void | Reverse (real x, real y, real z, real &lat, real &lon, real &h) const throw () |
void | Reverse (real x, real y, real z, real &lat, real &lon, real &h, std::vector< real > &M) const throw () |
Inspector functions | |
Math::real | LatitudeOrigin () const throw () |
Math::real | LongitudeOrigin () const throw () |
Math::real | HeightOrigin () const throw () |
Math::real | MajorRadius () const throw () |
Math::real | Flattening () const throw () |
Local Cartesian coordinates.
Convert between geodetic coordinates latitude = lat, longitude = lon, height = h (measured vertically from the surface of the ellipsoid) to local cartesian coordinates (x, y, z). The origin of local cartesian coordinate system is at lat = lat0, lon = lon0, h = h0. The z axis is normal to the ellipsoid; the y axis points due north. The plane z = - h0 is tangent to the ellipsoid.
The conversions all take place via geocentric coordinates using a Geocentric object (by default Geocentric::WGS84).
Example of use:
// Example of using the GeographicLib::LocalCartesian class // $Id: 0fd182a359b17d3b76ccd55f405b272a327a42e8 $ #include <iostream> #include <exception> #include <cmath> #include <GeographicLib/Geocentric.hpp> #include <GeographicLib/LocalCartesian.hpp> using namespace std; using namespace GeographicLib; int main() { try { Geocentric earth(Constants::WGS84_a(), Constants::WGS84_f()); // Alternatively: const Geocentric& earth = Geocentric::WGS84; const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0; // Paris LocalCartesian proj(lat0, lon0, 0, earth); { // Sample forward calculation double lat = 50.9, lon = 1.8, h = 0; // Calais double x, y, z; proj.Forward(lat, lon, h, x, y, z); cout << x << " " << y << " " << z << "\n"; } { // Sample reverse calculation double x = -38e3, y = 230e3, z = -4e3; double lat, lon, h; proj.Reverse(x, y, z, lat, lon, h); cout << lat << " " << lon << " " << h << "\n"; } } catch (const exception& e) { cerr << "Caught exception: " << e.what() << "\n"; return 1; } return 0; }
CartConvert is a command-line utility providing access to the functionality of Geocentric and LocalCartesian.
GeographicLib::LocalCartesian::LocalCartesian | ( | real | lat0, |
real | lon0, | ||
real | h0 = 0 , |
||
const Geocentric & | earth = Geocentric::WGS84 |
||
) | throw () [inline] |
Constructor setting the origin.
[in] | lat0 | latitude at origin (degrees). |
[in] | lon0 | longitude at origin (degrees). |
[in] | h0 | height above ellipsoid at origin (meters); default 0. |
[in] | earth | Geocentric object for the transformation; default Geocentric::WGS84. |
Definition at line 63 of file LocalCartesian.hpp.
GeographicLib::LocalCartesian::LocalCartesian | ( | const Geocentric & | earth = Geocentric::WGS84 | ) | throw () [inline, explicit] |
Default constructor.
[in] | earth | Geocentric object for the transformation; default Geocentric::WGS84. |
Sets lat0 = 0, lon0 = 0, h0 = 0.
Definition at line 76 of file LocalCartesian.hpp.
void GeographicLib::LocalCartesian::Reset | ( | real | lat0, |
real | lon0, | ||
real | h0 = 0 |
||
) | throw () |
Reset the origin.
[in] | lat0 | latitude at origin (degrees). |
[in] | lon0 | longitude at origin (degrees). |
[in] | h0 | height above ellipsoid at origin (meters); default 0. |
Definition at line 22 of file LocalCartesian.cpp.
void GeographicLib::LocalCartesian::Forward | ( | real | lat, |
real | lon, | ||
real | h, | ||
real & | x, | ||
real & | y, | ||
real & | z | ||
) | const throw () [inline] |
Convert from geodetic to local cartesian coordinates.
[in] | lat | latitude of point (degrees). |
[in] | lon | longitude of point (degrees). |
[in] | h | height of point above the ellipsoid (meters). |
[out] | x | local cartesian coordinate (meters). |
[out] | y | local cartesian coordinate (meters). |
[out] | z | local cartesian coordinate (meters). |
lat should be in the range [-90, 90]; lon and lon0 should be in the range [-180, 360].
Definition at line 104 of file LocalCartesian.hpp.
Referenced by main().
void GeographicLib::LocalCartesian::Forward | ( | real | lat, |
real | lon, | ||
real | h, | ||
real & | x, | ||
real & | y, | ||
real & | z, | ||
std::vector< real > & | M | ||
) | const throw () [inline] |
Convert from geodetic to local cartesian coordinates and return rotation matrix.
[in] | lat | latitude of point (degrees). |
[in] | lon | longitude of point (degrees). |
[in] | h | height of point above the ellipsoid (meters). |
[out] | x | local cartesian coordinate (meters). |
[out] | y | local cartesian coordinate (meters). |
[out] | z | local cartesian coordinate (meters). |
[out] | M | if the length of the vector is 9, fill with the rotation matrix in row-major order. |
Let v be a unit vector located at (lat, lon, h). We can express v as column vectors in one of two ways
Then we have v0 = M . v1.
Definition at line 133 of file LocalCartesian.hpp.
void GeographicLib::LocalCartesian::Reverse | ( | real | x, |
real | y, | ||
real | z, | ||
real & | lat, | ||
real & | lon, | ||
real & | h | ||
) | const throw () [inline] |
Convert from local cartesian to geodetic coordinates.
[in] | x | local cartesian coordinate (meters). |
[in] | y | local cartesian coordinate (meters). |
[in] | z | local cartesian coordinate (meters). |
[out] | lat | latitude of point (degrees). |
[out] | lon | longitude of point (degrees). |
[out] | h | height of point above the ellipsoid (meters). |
The value of lon returned is in the range [-180, 180).
Definition at line 156 of file LocalCartesian.hpp.
Referenced by main().
void GeographicLib::LocalCartesian::Reverse | ( | real | x, |
real | y, | ||
real | z, | ||
real & | lat, | ||
real & | lon, | ||
real & | h, | ||
std::vector< real > & | M | ||
) | const throw () [inline] |
Convert from local cartesian to geodetic coordinates and return rotation matrix.
[in] | x | local cartesian coordinate (meters). |
[in] | y | local cartesian coordinate (meters). |
[in] | z | local cartesian coordinate (meters). |
[out] | lat | latitude of point (degrees). |
[out] | lon | longitude of point (degrees). |
[out] | h | height of point above the ellipsoid (meters). |
[out] | M | if the length of the vector is 9, fill with the rotation matrix in row-major order. |
Let v be a unit vector located at (lat, lon, h). We can express v as column vectors in one of two ways
Then we have v1 = M^T . v0, where M^T is the transpose of M.
Definition at line 186 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::LatitudeOrigin | ( | ) | const throw () [inline] |
Definition at line 203 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::LongitudeOrigin | ( | ) | const throw () [inline] |
Definition at line 208 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::HeightOrigin | ( | ) | const throw () [inline] |
Definition at line 213 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::MajorRadius | ( | ) | const throw () [inline] |
Definition at line 220 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::Flattening | ( | ) | const throw () [inline] |
Definition at line 226 of file LocalCartesian.hpp.