Local cartesian coordinates. More...
#include <GeographicLib/LocalCartesian.hpp>
Public Member Functions | |
LocalCartesian (real lat0, real lon0, real h0=0, const Geocentric &earth=Geocentric::WGS84()) | |
LocalCartesian (const Geocentric &earth=Geocentric::WGS84()) | |
void | Reset (real lat0, real lon0, real h0=0) |
void | Forward (real lat, real lon, real h, real &x, real &y, real &z) const |
void | Forward (real lat, real lon, real h, real &x, real &y, real &z, std::vector< real > &M) const |
void | Reverse (real x, real y, real z, real &lat, real &lon, real &h) const |
void | Reverse (real x, real y, real z, real &lat, real &lon, real &h, std::vector< real > &M) const |
Inspector functions | |
Math::real | LatitudeOrigin () const |
Math::real | LongitudeOrigin () const |
Math::real | HeightOrigin () const |
Math::real | MajorRadius () const |
Math::real | Flattening () const |
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 #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.
Definition at line 38 of file LocalCartesian.hpp.
GeographicLib::LocalCartesian::LocalCartesian | ( | real | lat0, | |
real | lon0, | |||
real | h0 = 0 , |
|||
const Geocentric & | earth = Geocentric::WGS84() | |||
) | [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(). |
lat0 should be in the range [90, 90]; lon0 should be in the range [540, 540).
Definition at line 65 of file LocalCartesian.hpp.
GeographicLib::LocalCartesian::LocalCartesian | ( | const Geocentric & | earth = Geocentric::WGS84() |
) | [inline, explicit] |
Default constructor.
[in] | earth | Geocentric object for the transformation; default Geocentric::WGS84(). |
Sets lat0 = 0, lon0 = 0, h0 = 0.
Definition at line 78 of file LocalCartesian.hpp.
void GeographicLib::LocalCartesian::Reset | ( | real | lat0, | |
real | lon0, | |||
real | h0 = 0 | |||
) |
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. |
lat0 should be in the range [90, 90]; lon0 should be in the range [540, 540).
Definition at line 16 of file LocalCartesian.cpp.
References GeographicLib::Math::AngNormalize(), GeographicLib::Math::degree(), and GeographicLib::Geocentric::Forward().
void GeographicLib::LocalCartesian::Forward | ( | real | lat, | |
real | lon, | |||
real | h, | |||
real & | x, | |||
real & | y, | |||
real & | z | |||
) | const [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 should be in the range [540, 540).
Definition at line 107 of file LocalCartesian.hpp.
void GeographicLib::LocalCartesian::Forward | ( | real | lat, | |
real | lon, | |||
real | h, | |||
real & | x, | |||
real & | y, | |||
real & | z, | |||
std::vector< real > & | M | |||
) | const [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. |
lat should be in the range [90, 90]; lon should be in the range [540, 540).
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 139 of file LocalCartesian.hpp.
void GeographicLib::LocalCartesian::Reverse | ( | real | x, | |
real | y, | |||
real | z, | |||
real & | lat, | |||
real & | lon, | |||
real & | h | |||
) | const [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 163 of file LocalCartesian.hpp.
void GeographicLib::LocalCartesian::Reverse | ( | real | x, | |
real | y, | |||
real | z, | |||
real & | lat, | |||
real & | lon, | |||
real & | h, | |||
std::vector< real > & | M | |||
) | const [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 = MT v0, where MT is the transpose of M.
Definition at line 193 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::LatitudeOrigin | ( | ) | const [inline] |
Definition at line 210 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::LongitudeOrigin | ( | ) | const [inline] |
Definition at line 215 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::HeightOrigin | ( | ) | const [inline] |
Definition at line 220 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::MajorRadius | ( | ) | const [inline] |
Definition at line 227 of file LocalCartesian.hpp.
Math::real GeographicLib::LocalCartesian::Flattening | ( | ) | const [inline] |
Definition at line 233 of file LocalCartesian.hpp.