33 double t1, t2, t3, t4, t1r, t2r;
34 struct geod_geodesic
g;
37static struct state *st = &state;
54 st->boa = sqrt(1.0 - e2);
55 st->f = 1.0 - st->boa;
56 st->ff64 = st->f * st->f / 64.0;
58 geod_init(&st->g, st->al, st->f);
73 st->t1r = atan(st->boa * tan(
Radians(lat1)));
87 double stm, ctm, sdtm, cdtm;
90 st->t2r = atan(st->boa * tan(
Radians(lat2)));
92 tm = (st->t1r + st->t2r) / 2;
93 dtm = (st->t2r - st->t1r) / 2;
101 st->t1 = st->t1 * st->t1 * 2;
104 st->t2 = st->t2 * st->t2 * 2;
106 st->t3 = sdtm * sdtm;
107 st->t4 = cdtm * cdtm - stm * stm;
126 q, sd, sdlmr,
t, u, v,
x, y;
128 sdlmr = sin(
Radians(lon2 - lon1) / 2);
131 if (sdlmr == 0.0 && st->t1r == st->t2r)
134 q = st->t3 + sdlmr * sdlmr * st->t4;
138 return M_PI * st->al;
160 sd = 2 * sqrt(q - q * q);
161 if (q != 0.0 && cd == 1.0)
169 u = st->t1 / (1 - q);
178 (
t - st->f / 4 * (
t *
x - y) +
179 st->ff64 * (
x * (a + (
t - (a + e) / 2) *
x) + y * (-2 * d + e * y) +
200 double ps12 = 0, pazi1 = 0, pazi2 = 0;
202 geod_inverse(&st->g, lat1, lon1, lat2, lon2, &ps12, &pazi1, &pazi2);
void G_set_geodesic_distance_lat2(double lat2)
Sets geodesic distance lat2.
void G_set_geodesic_distance_lat1(double lat1)
Sets geodesic distance lat1.
double G_geodesic_distance(double lon1, double lat1, double lon2, double lat2)
Calculates geodesic distance.
double G_geodesic_distance_lon_to_lon(double lon1, double lon2)
Calculates geodesic distance.
void G_begin_geodesic_distance(double a, double e2)
Begin geodesic distance.