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

Then we have v0 = Mv1.

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

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: