You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1013 B
44 lines
1013 B
import {geoProjection as projection} from "d3-geo";
|
|
import {hammerRaw} from "./hammer.js";
|
|
import {cos, pi, sin} from "./math.js";
|
|
import {solve2d} from "./newton.js";
|
|
|
|
// Bertin 1953 as a modified Briesemeister
|
|
// https://bl.ocks.org/Fil/5b9ee9636dfb6ffa53443c9006beb642
|
|
export function bertin1953Raw() {
|
|
var hammer = hammerRaw(1.68, 2),
|
|
fu = 1.4, k = 12;
|
|
|
|
function forward(lambda, phi) {
|
|
|
|
if (lambda + phi < -fu) {
|
|
var u = (lambda - phi + 1.6) * (lambda + phi + fu) / 8;
|
|
lambda += u;
|
|
phi -= 0.8 * u * sin(phi + pi / 2);
|
|
}
|
|
|
|
var r = hammer(lambda, phi);
|
|
|
|
var d = (1 - cos(lambda * phi)) / k;
|
|
|
|
if (r[1] < 0) {
|
|
r[0] *= 1 + d;
|
|
}
|
|
if (r[1] > 0) {
|
|
r[1] *= 1 + d / 1.5 * r[0] * r[0];
|
|
}
|
|
|
|
return r;
|
|
}
|
|
|
|
forward.invert = solve2d(forward);
|
|
return forward;
|
|
}
|
|
|
|
export default function() {
|
|
// this projection should not be rotated
|
|
return projection(bertin1953Raw())
|
|
.rotate([-16.5, -42])
|
|
.scale(176.57)
|
|
.center([7.93, 0.09]);
|
|
}
|
|
|