import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from "../math.js"; import {conicProjection} from "./conic.js"; import {cylindricalEqualAreaRaw} from "./cylindricalEqualArea.js"; export function conicEqualAreaRaw(y0, y1) { var 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; function project(x, y) { var r = sqrt(c - 2 * n * sin(y)) / n; return [r * sin(x *= n), r0 - r * cos(x)]; } project.invert = function(x, y) { var r0y = r0 - y, 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 project; } export default function() { return conicProjection(conicEqualAreaRaw) .scale(155.424) .center([0, 33.6442]); }