import {geoProjectionMutator as projectionMutator} from "d3-geo"; import {atan2, cos, halfPi, sin, sqrt} from "./math.js"; export function bottomleyRaw(sinPsi) { function forward(lambda, phi) { var rho = halfPi - phi, eta = rho ? lambda * sinPsi * sin(rho) / rho : rho; return [rho * sin(eta) / sinPsi, halfPi - rho * cos(eta)]; } forward.invert = function(x, y) { var x1 = x * sinPsi, y1 = halfPi - y, rho = sqrt(x1 * x1 + y1 * y1), eta = atan2(x1, y1); return [(rho ? rho / sin(rho) : 1) * eta / sinPsi, halfPi - rho]; }; return forward; } export default function() { var sinPsi = 0.5, m = projectionMutator(bottomleyRaw), p = m(sinPsi); p.fraction = function(_) { return arguments.length ? m(sinPsi = +_) : sinPsi; }; return p .scale(158.837); }