18#define TWOPI M_PI + M_PI
22 double QbarA, QbarB, QbarC, QbarD;
31static struct state *st = &state;
33static double Q(
double x)
43static double Qbar(
double x)
72 st->AE = a * a * (1 - e2);
74 st->QA = (2.0 / 3.0) * e2;
75 st->QB = (3.0 / 5.0) *
e4;
76 st->QC = (4.0 / 7.0) *
e6;
78 st->QbarA = -1.0 - (2.0 / 3.0) * e2 - (3.0 / 5.0) *
e4 - (4.0 / 7.0) *
e6;
79 st->QbarB = (2.0 / 9.0) * e2 + (2.0 / 5.0) *
e4 + (4.0 / 7.0) *
e6;
80 st->QbarC = -(3.0 / 25.0) *
e4 - (12.0 / 35.0) *
e6;
81 st->QbarD = (4.0 / 49.0) *
e6;
84 st->E = 4 *
M_PI * st->Qp * st->AE;
135 double x1, y1, x2, y2, dx, dy;
157 while (x1 - x2 >
M_PI)
160 while (x2 - x1 >
M_PI)
181 area += dx * (st->Qp - Q((y1 + y2) / 2));
184 if ((area *= st->AE) < 0.0)
194 if (area > st->E / 2)
void G_begin_ellipsoid_polygon_area(double a, double e2)
Begin area calculations.
double G_ellipsoid_polygon_area(const double *lon, const double *lat, int n)
Area of lat-long polygon.