GeographicLib::LocalCartesian Class Reference

Local cartesian coordinates. More...

#include <GeographicLib/LocalCartesian.hpp>

List of all members.

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

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;
  }
  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.


Constructor & Destructor Documentation

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]; 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.

Parameters:
[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.


Member Function Documentation

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]; 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.

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]; 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.

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]; 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

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

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

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.

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 193 of file LocalCartesian.hpp.

Math::real GeographicLib::LocalCartesian::LatitudeOrigin (  )  const [inline]
Returns:
latitude of the origin (degrees).

Definition at line 210 of file LocalCartesian.hpp.

Math::real GeographicLib::LocalCartesian::LongitudeOrigin (  )  const [inline]
Returns:
longitude of the origin (degrees).

Definition at line 215 of file LocalCartesian.hpp.

Math::real GeographicLib::LocalCartesian::HeightOrigin (  )  const [inline]
Returns:
height of the origin (meters).

Definition at line 220 of file LocalCartesian.hpp.

Math::real GeographicLib::LocalCartesian::MajorRadius (  )  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 227 of file LocalCartesian.hpp.

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 233 of file LocalCartesian.hpp.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 6 Oct 2014 for GeographicLib by  doxygen 1.6.1