d3_geoEqualEarth = {
const A1 = 1.340264;
const A2 = -0.081106;
const A3 = 0.000893;
const A4 = 0.003796;
const M = Math.sqrt(3) / 2;
const EPSILON = 1e-9;
const ITERATIONS = 12;
function equalEarthRaw(x, y) {
const l = Math.asin(M * Math.sin(y)), l2 = l ** 2, l6 = l ** 6;
return [
x * Math.cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),
l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))
];
}
equalEarthRaw.invert = (x, y) => {
let l = y, l2, l6;
for (let i = 0, dl, fy, fpy; i < ITERATIONS; ++i) {
l2 = l ** 2;
l6 = l ** 6;
fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;
fpy = A1 + A2 * l2 + l6 * (A3 + A4 * l2);
l -= dl = fy / fpy;
if (Math.abs(dl) < EPSILON) break;
}
l2 = l ** 2;
l6 = l ** 6;
return [
M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / Math.cos(l),
Math.asin(Math.sin(l) / M)
];
};
return () => d3.geoProjection(equalEarthRaw);
}