geoConicEqualAreaRaw function

GeoRawTransform geoConicEqualAreaRaw(
  1. List<double> y
)

The raw Albers’ equal-area conic projection.

Implementation

GeoRawTransform geoConicEqualAreaRaw(List<double> y) {
  var y0 = y[0], y1 = y[1], sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;

  // Are the parallels symmetrical around the Equator?
  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);

  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;

  forward(List<num> p) {
    var x = p[0], r = sqrt(c - 2 * n * sin(p[1])) / n;
    return [r * sin(x *= n), r0 - r * cos(x)];
  }

  backward(List<num> p) {
    var x = p[0], r0y = r0 - p[1], l = atan2(x, abs(r0y)) * sign(r0y);
    if (r0y * n < 0) l -= pi * sign(x) * sign(r0y);
    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
  }

  return GeoRawTransform(forward, backward);
}