sledgehammer = () => {
const sledgehammerRaw = (λ, φ) => {
const peters = (x, y) => [
(x * (8 / 9) * 3) / Math.PI,
Math.sin(y) * Math.sqrt(4 / 3)
];
const hammer = d3.geoHammerRaw(2, 2);
const hybrid = peters(
...hammer.invert(...hammer(λ, φ).map(t => t * Math.SQRT1_2))
);
return hybrid;
};
sledgehammerRaw.invert = (x, y) => {
const unpeter = (xp, yp) => [
xp * (Math.PI / 3) * (9 / 8),
Math.asin(yp * Math.sqrt(3 / 4))
];
const rehammer = d3.geoHammerRaw(2, 2);
const unhybrid = rehammer.invert(
...rehammer(...unpeter(x, y)).map(t => t * Math.SQRT2)
);
return unhybrid;
};
return d3.geoProjection(sledgehammerRaw);
};