GeographicLib: GeographicLib::LocalCartesian Class Reference (original) (raw)
Local cartesian coordinates. More...
#include <[GeographicLib/LocalCartesian.hpp](LocalCartesian%5F8hpp%5Fsource.html)>
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 | EquatorialRadius () 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:
#include
#include
#include
using namespace std;
try {
Geocentric earth(Constants::WGS84_a(), Constants::WGS84_f());
const double lat0 = 48 + 50/60.0, lon0 = 2 + 20/60.0;
{
double lat = 50.9, lon = 1.8, h = 0;
double x, y, z;
proj.Forward(lat, lon, h, x, y, z);
cout << x << " " << y << " " << z << "\n";
}
{
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;
}
}
int main(int argc, const char *const argv[])
Header for GeographicLib::Geocentric class.
Header for GeographicLib::LocalCartesian class.
Local cartesian coordinates.
Namespace for GeographicLib.
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.
Parameters
[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°].
Definition at line 64 of file LocalCartesian.hpp.
◆ LocalCartesian() [2/2]
Default constructor.
Parameters
Sets lat0 = 0, lon0 = 0, h0 = 0.
Definition at line 77 of file LocalCartesian.hpp.
◆ Reset()
void GeographicLib::LocalCartesian::Reset | ( | real | lat0, |
---|---|---|---|
real | lon0, | ||
real | h0 = 0 ) |
◆ Forward() [1/2]
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.
Parameters
[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°].
Definition at line 104 of file LocalCartesian.hpp.
Referenced by main().
◆ Forward() [2/2]
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.
Parameters
[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°].
Let v be a unit vector located at (lat, lon, h). We can express v as column vectors in one of two ways
- in east, north, up coordinates (where the components are relative to a local coordinate system at (lat, lon, h)); call this representation v1.
- in x, y, z coordinates (where the components are relative to the local coordinate system at (lat0, lon0, h0)); call this representation v0.
Then we have v0 = M ⋅ v1.
Definition at line 135 of file LocalCartesian.hpp.
◆ Reverse() [1/2]
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.
Parameters
[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). |
In general, there are multiple solutions and the result which minimizes |h |is returned, i.e., (lat, lon) corresponds to the closest point on the ellipsoid. The value of lon returned is in the range [−180°, 180°].
Definition at line 161 of file LocalCartesian.hpp.
Referenced by main().
◆ Reverse() [2/2]
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.
Parameters
[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
- in east, north, up coordinates (where the components are relative to a local coordinate system at (lat, lon, h)); call this representation v1.
- in x, y, z coordinates (where the components are relative to the local coordinate system at (lat0, lon0, h0)); call this representation v0.
Then we have v1 = _M_T ⋅ v0, where _M_T is the transpose of M.
Definition at line 191 of file LocalCartesian.hpp.
◆ LatitudeOrigin()
Math::real GeographicLib::LocalCartesian::LatitudeOrigin ( ) const | inline |
---|
◆ LongitudeOrigin()
Math::real GeographicLib::LocalCartesian::LongitudeOrigin ( ) const | inline |
---|
◆ HeightOrigin()
Math::real GeographicLib::LocalCartesian::HeightOrigin ( ) const | inline |
---|
◆ EquatorialRadius()
Math::real GeographicLib::LocalCartesian::EquatorialRadius ( ) const | inline |
---|
◆ Flattening()
Math::real GeographicLib::LocalCartesian::Flattening ( ) const | inline |
---|
The documentation for this class was generated from the following files: