22 #ifndef GNSS_SDR_GEOFUNCTIONS_H 23 #define GNSS_SDR_GEOFUNCTIONS_H 25 #if ARMA_NO_BOUND_CHECKING 26 #define ARMA_NO_DEBUG 1 33 double WGS84_g0(
double Lat_rad);
35 double WGS84_geocentric_radius(
double Lat_geodetic_rad);
51 int topocent(
double *Az,
double *El,
double *D,
const arma::vec &x,
const arma::vec &dx);
74 int togeod(
double *dphi,
double *dlambda,
double *h,
double a,
double finv,
double X,
double Y,
double Z);
89 arma::vec
cart2geo(
const arma::vec &XYZ,
int elipsoid_selection);
91 arma::vec LLH_to_deg(
const arma::vec &LLH);
93 double degtorad(
double angleInDegrees);
95 double radtodeg(
double angleInRadians);
97 double mstoknotsh(
double MetersPerSeconds);
99 double mstokph(
double MetersPerSeconds);
101 arma::vec CTM_to_Euler(
const arma::mat &C);
103 arma::mat Euler_to_CTM(
const arma::vec &eul);
105 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);
125 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);
146 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);
158 void cart2utm(
const arma::vec &r_eb_e,
int zone, arma::vec &r_enu);
164 int findUtmZone(
double latitude_deg,
double longitude_deg);
170 double clsin(
const arma::colvec &ar,
int degree,
double argument);
176 void clksin(
const arma::colvec &ar,
int degree,
double arg_real,
double arg_imag,
double *re,
double *im);
178 #endif // GNSS_SDR_GEOFUNCTIONS_H 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.
arma::vec Gravity_ECEF(const arma::vec &r_eb_e)
Calculates acceleration due to gravity resolved about ECEF-frame.
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...
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'.
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...
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.
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 ...
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 or...
double clsin(const arma::colvec &ar, int degree, double argument)
Clenshaw summation of sinus of argument.
arma::mat Skew_symmetric(const arma::vec &a)
Calculates skew-symmetric matrix.
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.
int findUtmZone(double latitude_deg, double longitude_deg)
Function finds the UTM zone number for given longitude and latitude.