GNSS-SDR  0.0.13
An Open Source GNSS Software Defined Receiver
Functions
geofunctions.h File Reference

A set of coordinate transformations functions and helpers, some of them migrated from MATLAB, for geographic information systems. More...

#include <armadillo>

Go to the source code of this file.

Functions

arma::mat Skew_symmetric (const arma::vec &a)
 Calculates skew-symmetric matrix. More...
 
double WGS84_g0 (double Lat_rad)
 
double WGS84_geocentric_radius (double Lat_geodetic_rad)
 
int topocent (double *Az, double *El, double *D, const arma::vec &x, const arma::vec &dx)
 Transformation of vector dx into topocentric coordinate system with origin at x Inputs: x - vector origin coordinates (in ECEF system [X; Y; Z;]) dx - vector ([dX; dY; dZ;]). More...
 
int togeod (double *dphi, double *dlambda, double *h, double a, double finv, double X, double Y, double Z)
 Subroutine to calculate geodetic coordinates latitude, longitude, height given Cartesian coordinates X,Y,Z, and reference ellipsoid values semi-major axis (a) and the inverse of flattening (finv). More...
 
arma::vec Gravity_ECEF (const arma::vec &r_eb_e)
 Calculates acceleration due to gravity resolved about ECEF-frame. More...
 
arma::vec cart2geo (const arma::vec &XYZ, int elipsoid_selection)
 Conversion of Cartesian coordinates (X,Y,Z) to geographical coordinates (latitude, longitude, h) on a selected reference ellipsoid. More...
 
arma::vec LLH_to_deg (const arma::vec &LLH)
 
double degtorad (double angleInDegrees)
 
double radtodeg (double angleInRadians)
 
double mstoknotsh (double MetersPerSeconds)
 
double mstokph (double MetersPerSeconds)
 
arma::vec CTM_to_Euler (const arma::mat &C)
 
arma::mat Euler_to_CTM (const arma::vec &eul)
 
void ECEF_to_Geo (const arma::vec &r_eb_e, const arma::vec &v_eb_e, const arma::mat &C_b_e, arma::vec &LLH, arma::vec &v_eb_n, arma::mat &C_b_n)
 
void Geo_to_ECEF (const arma::vec &LLH, const arma::vec &v_eb_n, const arma::mat &C_b_n, arma::vec &r_eb_e, arma::vec &v_eb_e, arma::mat &C_b_e)
 From Geographic to ECEF coordinates. More...
 
void pv_Geo_to_ECEF (double L_b, double lambda_b, double h_b, const arma::vec &v_eb_n, arma::vec &r_eb_e, arma::vec &v_eb_e)
 Converts curvilinear to Cartesian position and velocity resolving axes from NED to ECEF This function created 11/4/2012 by Paul Groves. More...
 
double great_circle_distance (double lat1, double lon1, double lat2, double lon2)
 The Haversine formula determines the great-circle distance between two points on a sphere given their longitudes and latitudes. More...
 
void cart2utm (const arma::vec &r_eb_e, int zone, arma::vec &r_enu)
 Transformation of ECEF (X,Y,Z) to (E,N,U) in UTM, zone 'zone'. More...
 
int findUtmZone (double latitude_deg, double longitude_deg)
 Function finds the UTM zone number for given longitude and latitude. More...
 
double clsin (const arma::colvec &ar, int degree, double argument)
 Clenshaw summation of sinus of argument. More...
 
void clksin (const arma::colvec &ar, int degree, double arg_real, double arg_imag, double *re, double *im)
 Clenshaw summation of sinus with complex argument. More...
 

Detailed Description

A set of coordinate transformations functions and helpers, some of them migrated from MATLAB, for geographic information systems.

Author
Javier Arribas, 2018. jarribas(at)cttc.es

Copyright (C) 2010-2020 (see AUTHORS file for a list of contributors)

GNSS-SDR is a software defined Global Navigation Satellite Systems receiver

This file is part of GNSS-SDR.

SPDX-License-Identifier: GPL-3.0-or-later


Definition in file geofunctions.h.

Function Documentation

◆ cart2geo()

arma::vec cart2geo ( const arma::vec &  XYZ,
int  elipsoid_selection 
)

Conversion of Cartesian coordinates (X,Y,Z) to geographical coordinates (latitude, longitude, h) on a selected reference ellipsoid.

Choices of Reference Ellipsoid for Geographical Coordinates 0. International Ellipsoid 1924

  1. International Ellipsoid 1967
  2. World Geodetic System 1972
  3. Geodetic Reference System 1980
  4. World Geodetic System 1984

◆ cart2utm()

void cart2utm ( const arma::vec &  r_eb_e,
int  zone,
arma::vec &  r_enu 
)

Transformation of ECEF (X,Y,Z) to (E,N,U) in UTM, zone 'zone'.

◆ clksin()

void clksin ( const arma::colvec &  ar,
int  degree,
double  arg_real,
double  arg_imag,
double *  re,
double *  im 
)

Clenshaw summation of sinus with complex argument.

◆ clsin()

double clsin ( const arma::colvec &  ar,
int  degree,
double  argument 
)

Clenshaw summation of sinus of argument.

◆ findUtmZone()

int findUtmZone ( double  latitude_deg,
double  longitude_deg 
)

Function finds the UTM zone number for given longitude and latitude.

◆ Geo_to_ECEF()

void Geo_to_ECEF ( const arma::vec &  LLH,
const arma::vec &  v_eb_n,
const arma::mat &  C_b_n,
arma::vec &  r_eb_e,
arma::vec &  v_eb_e,
arma::mat &  C_b_e 
)

From Geographic to ECEF coordinates.

Inputs: LLH latitude (rad), longitude (rad), height (m) v_eb_n velocity of body frame w.r.t. ECEF frame, resolved along north, east, and down (m/s) C_b_n body-to-NED coordinate transformation matrix

Outputs: r_eb_e Cartesian position of body frame w.r.t. ECEF frame, resolved along ECEF-frame axes (m) v_eb_e velocity of body frame w.r.t. ECEF frame, resolved along ECEF-frame axes (m/s) C_b_e body-to-ECEF-frame coordinate transformation matrix

◆ Gravity_ECEF()

arma::vec Gravity_ECEF ( const arma::vec &  r_eb_e)

Calculates acceleration due to gravity resolved about ECEF-frame.

◆ great_circle_distance()

double great_circle_distance ( double  lat1,
double  lon1,
double  lat2,
double  lon2 
)

The Haversine formula determines the great-circle distance between two points on a sphere given their longitudes and latitudes.

◆ pv_Geo_to_ECEF()

void pv_Geo_to_ECEF ( double  L_b,
double  lambda_b,
double  h_b,
const arma::vec &  v_eb_n,
arma::vec &  r_eb_e,
arma::vec &  v_eb_e 
)

Converts curvilinear to Cartesian position and velocity resolving axes from NED to ECEF This function created 11/4/2012 by Paul Groves.

Inputs: L_b latitude (rad) lambda_b longitude (rad) h_b height (m) v_eb_n velocity of body frame w.r.t. ECEF frame, resolved along north, east, and down (m/s)

Outputs: r_eb_e Cartesian position of body frame w.r.t. ECEF frame, resolved along ECEF-frame axes (m) v_eb_e velocity of body frame w.r.t. ECEF frame, resolved along ECEF-frame axes (m/s)

◆ Skew_symmetric()

arma::mat Skew_symmetric ( const arma::vec &  a)

Calculates skew-symmetric matrix.

◆ togeod()

int togeod ( double *  dphi,
double *  dlambda,
double *  h,
double  a,
double  finv,
double  X,
double  Y,
double  Z 
)

Subroutine to calculate geodetic coordinates latitude, longitude, height given Cartesian coordinates X,Y,Z, and reference ellipsoid values semi-major axis (a) and the inverse of flattening (finv).

The output units of angular quantities will be in decimal degrees (15.5 degrees not 15 deg 30 min). The output units of h will be the same as the units of X,Y,Z,a.

  Inputs:
      a           - semi-major axis of the reference ellipsoid
      finv        - inverse of flattening of the reference ellipsoid
      X,Y,Z       - Cartesian coordinates

  Outputs:
      dphi        - latitude
      dlambda     - longitude
      h           - height above reference ellipsoid

      Based in a Matlab function by Kai Borre

◆ topocent()

int topocent ( double *  Az,
double *  El,
double *  D,
const arma::vec &  x,
const arma::vec &  dx 
)

Transformation of vector dx into topocentric coordinate system with origin at x Inputs: x - vector origin coordinates (in ECEF system [X; Y; Z;]) dx - vector ([dX; dY; dZ;]).

Outputs: D - vector length. Units like the input Az - azimuth from north positive clockwise, degrees El - elevation angle, degrees

Based on a Matlab function by Kai Borre