GeographicLib::LocalCartesian Class Reference

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 | EquatorialRadius () const
Math::real | Flattening () const

## Detailed Description

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;
}
}
main
int main(int argc, const char *const argv[])
Definition: CartConvert.cpp:29
Geocentric.hpp
Header for GeographicLib::Geocentric class.
LocalCartesian.hpp
Header for GeographicLib::LocalCartesian class.
GeographicLib::Constants::WGS84_f
static T WGS84_f()
Definition: Constants.hpp:141
GeographicLib::Constants::WGS84_a
static T WGS84_a()
Definition: Constants.hpp:135
GeographicLib::LocalCartesian::LocalCartesian
LocalCartesian(real lat0, real lon0, real h0=0, const Geocentric &earth=Geocentric::WGS84())
Definition: LocalCartesian.hpp:64
GeographicLib
Namespace for GeographicLib.
Definition: Accumulator.cpp:12
std
Definition: NearestNeighbor.hpp:812

CartConvert is a command-line utility providing access to the functionality of Geocentric and LocalCartesian.

Definition at line 38 of file LocalCartesian.hpp.

## Constructor & Destructor Documentation

## LocalCartesian() [1/2]

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]

GeographicLib::LocalCartesian::LocalCartesian | ( | const Geocentric & | earth = `Geocentric::WGS84()` | ) |

inlineexplicit

Default constructor.

Parameters

  [in] | earth | Geocentric object for the transformation; default Geocentric::WGS84().

Sets lat0 = 0, lon0 = 0, h0 = 0.

Definition at line 77 of file LocalCartesian.hpp.

## Member Function Documentation

## Reset()

void GeographicLib::LocalCartesian::Reset | ( | real | lat0,
|  | real | lon0,
|  | real | h0 = `0`
| ) |  |

Reset 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.

lat0 should be in the range [−90°, 90°].

Definition at line 16 of file LocalCartesian.cpp.

References GeographicLib::Math::AngNormalize(), GeographicLib::Geocentric::Forward(), GeographicLib::Math::LatFix(), and GeographicLib::Math::sincosd().

## 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 = MT ⋅ v0, where MT is the transpose of M.

Definition at line 191 of file LocalCartesian.hpp.

## LatitudeOrigin()

Math::real GeographicLib::LocalCartesian::LatitudeOrigin | ( |  | ) | const

inline

Returns
  latitude of the origin (degrees).

Definition at line 208 of file LocalCartesian.hpp.

## LongitudeOrigin()

Math::real GeographicLib::LocalCartesian::LongitudeOrigin | ( |  | ) | const

inline

Returns
  longitude of the origin (degrees).

Definition at line 213 of file LocalCartesian.hpp.

## HeightOrigin()

Math::real GeographicLib::LocalCartesian::HeightOrigin | ( |  | ) | const

inline

Returns
  height of the origin (meters).

Definition at line 218 of file LocalCartesian.hpp.

## EquatorialRadius()

Math::real GeographicLib::LocalCartesian::EquatorialRadius | ( |  | ) | const

inline

Returns
  a the equatorial radius of the ellipsoid (meters). This is the value of a inherited from the Geocentric object used in the constructor.

Definition at line 225 of file LocalCartesian.hpp.

References GeographicLib::Geocentric::EquatorialRadius().

## Flattening()

Math::real GeographicLib::LocalCartesian::Flattening | ( |  | ) | const

inline

Returns
  f the flattening of the ellipsoid. This is the value inherited from the Geocentric object used in the constructor.

Definition at line 231 of file LocalCartesian.hpp.

References GeographicLib::Geocentric::Flattening().

The documentation for this class was generated from the following files:

- LocalCartesian.hpp
- LocalCartesian.cpp