distance function
Distance between two points on an ellipsoid in km.
Implementation
double distance(double lat1, double lon1, double lat2, double lon2,
{double er = earthEr, double fl = earthFl}) {
final f2 = (lat1 + lat2) / 2;
final g2 = (lat1 - lat2) / 2;
final l2 = (lon1 - lon2) / 2;
final sf = math.sin(f2), cf = math.cos(f2);
final sg = math.sin(g2), cg = math.cos(g2);
final sl = math.sin(l2), cl = math.cos(l2);
final s2f = sf * sf, c2f = cf * cf;
final s2g = sg * sg, c2g = cg * cg;
final s2l = sl * sl, c2l = cl * cl;
final s = s2g * c2l + c2f * s2l;
final c = c2g * c2l + s2f * s2l;
if (s == 0) return 0; // same point
final omega = math.atan(math.sqrt(s / c));
final r = math.sqrt(s * c) / omega;
final d = 2 * omega * er;
final h1 = (3 * r - 1) / (2 * c);
final h2 = (3 * r + 1) / (2 * s);
return d * (1 + fl * (h1 * s2f * c2g - h2 * c2f * s2g));
}