]> err.no Git - mapper/blob - src/latlon.h
More map widget integration changes
[mapper] / src / latlon.h
1 #ifndef _LATLON_H
2 #define _LATLON_H
3
4 #include <glib.h>
5 #include <math.h>
6
7 /* Int ranges for integerized lat/lon */
8 #define LATLON_MAX 2147483646
9 #define LATLON_MIN -2147483646
10 #define EARTH_RADIUS (3440.06479f)
11
12 typedef enum {
13         DDPDDDDD,
14         DD_MMPMMM,
15         DD_MM_SSPS,
16         DDPDDDDD_NSEW,
17         DD_MMPMMM_NSEW,
18         DD_MM_SSPS_NSEW,
19         DEG_FORMAT_ENUM_COUNT
20 } DegFormat;
21 gchar *DEG_FORMAT_TEXT[DEG_FORMAT_ENUM_COUNT];
22
23 /** This enum defines the possible units we can use. */
24 typedef enum {
25         UNITS_KM,
26         UNITS_MI,
27         UNITS_NM,
28         UNITS_ENUM_COUNT
29 } UnitType;
30 gchar *UNITS_TEXT[UNITS_ENUM_COUNT];
31
32 /* UNITS_CONVERTS, when multiplied, converts from NM. */
33
34 gfloat UNITS_CONVERT[UNITS_ENUM_COUNT];
35
36 UnitType _units;
37
38 #define lat_format(F, A, B) deg_format((F),(A), (B), 'S', 'N')
39 #define lon_format(F, A, B) deg_format((F),(A), (B), 'W', 'E')
40
41 void latlon_init(void);
42
43 gint32 lon2mp_int(gdouble lon);
44 gint32 lat2mp_int(gdouble lat);
45
46 gdouble mp_int2lon(gint32 lon);
47 gdouble mp_int2lat(gint32 lat);
48
49 gdouble calculate_distance(gdouble lat1, gdouble lon1, gdouble lat2, gdouble lon2);
50 gdouble calculate_ddistance(gint lat1, gint lon1, gint lat2, gint lon2);
51 gulong calculate_idistance(gint lat1, gint lon1, gint lat2, gint lon2);
52 gulong calculate_idistance_cmp(gint lat1, gint lon1, gint lat2, gint lon2);
53
54 gdouble calculate_course_rad(gdouble lat1, gdouble lon1, gdouble lat2, gdouble lon2);
55 gdouble calculate_course(gdouble lat1, gdouble lon1, gdouble lat2, gdouble lon2);
56
57 gfloat angle_diff(gfloat a, gfloat b);
58
59 gboolean distance_point_to_line(gdouble x, gdouble y, gdouble x1, gdouble y1, gdouble x2, gdouble y2, gdouble *d);
60
61 guint32 xy2tile(guint x, guint y);
62 guint32 lon2x(gdouble lon);
63 guint32 lat2y(gdouble lat);
64
65 void deg_format(DegFormat degformat, gdouble coor, gchar *scoor, gchar neg_char, gchar pos_char);
66
67 #endif