PUD: include nmealib v0.6.7
[olsrd.git] / lib / pud / nmealib / include / nmea / gmath.h
1 /*
2  * This file is part of nmealib.
3  *
4  * Copyright (c) 2008 Timur Sinitsyn
5  * Copyright (c) 2011 Ferry Huberts
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #ifndef __NMEA_GMATH_H__
22 #define __NMEA_GMATH_H__
23
24 #include <nmea/info.h>
25
26 #define NMEA_PI                     (3.141592653589793)             /**< PI value */
27 #define NMEA_PI180                  (NMEA_PI / 180)                 /**< PI division by 180 */
28 #define NMEA_EARTHRADIUS_KM         (6378)                          /**< Earth's mean radius in km */
29 #define NMEA_EARTHRADIUS_M          (NMEA_EARTHRADIUS_KM * 1000)    /**< Earth's mean radius in m */
30 #define NMEA_EARTH_SEMIMAJORAXIS_M  (6378137.0)                     /**< Earth's semi-major axis in m according WGS84 */
31 #define NMEA_EARTH_SEMIMAJORAXIS_KM (NMEA_EARTHMAJORAXIS_KM / 1000) /**< Earth's semi-major axis in km according WGS 84 */
32 #define NMEA_EARTH_FLATTENING       (1 / 298.257223563)             /**< Earth's flattening according WGS 84 */
33 #define NMEA_DOP_FACTOR             (5)                             /**< Factor for translating DOP to meters */
34
35 #ifdef  __cplusplus
36 extern "C" {
37 #endif
38
39 /*
40  * degree VS radian
41  */
42
43 double nmea_degree2radian(double val);
44 double nmea_radian2degree(double val);
45
46 /*
47  * NDEG (NMEA degree)
48  */
49
50 double nmea_ndeg2degree(double val);
51 double nmea_degree2ndeg(double val);
52
53 double nmea_ndeg2radian(double val);
54 double nmea_radian2ndeg(double val);
55
56 /*
57  * DOP
58  */
59
60 double nmea_calc_pdop(double hdop, double vdop);
61 double nmea_dop2meters(double dop);
62 double nmea_meters2dop(double meters);
63
64 /*
65  * positions work
66  */
67
68 void nmea_info2pos(const nmeaINFO *info, nmeaPOS *pos);
69 void nmea_pos2info(const nmeaPOS *pos, nmeaINFO *info);
70
71 double  nmea_distance(
72         const nmeaPOS *from_pos,
73         const nmeaPOS *to_pos
74         );
75
76 double  nmea_distance_ellipsoid(
77         const nmeaPOS *from_pos,
78         const nmeaPOS *to_pos,
79         double *from_azimuth,
80         double *to_azimuth
81         );
82
83 int     nmea_move_horz(
84         const nmeaPOS *start_pos,
85         nmeaPOS *end_pos,
86         double azimuth,
87         double distance
88         );
89
90 int     nmea_move_horz_ellipsoid(
91         const nmeaPOS *start_pos,
92         nmeaPOS *end_pos,
93         double azimuth,
94         double distance,
95         double *end_azimuth
96         );
97
98 #ifdef  __cplusplus
99 }
100 #endif
101
102 #endif /* __NMEA_GMATH_H__ */