distance function

double distance(
  1. double lat1,
  2. double lon1,
  3. double lat2,
  4. double lon2, {
  5. double er = earthEr,
  6. double fl = earthFl,
})

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));
}