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.
30 lines
912 B
30 lines
912 B
import {geoProjection as projection} from "d3-geo";
|
|
import {abs, asin, atan, cos, epsilon, halfPi, pi, sign, sin, sqrt, tan} from "./math.js";
|
|
|
|
export function vanDerGrinten3Raw(lambda, phi) {
|
|
if (abs(phi) < epsilon) return [lambda, 0];
|
|
var sinTheta = phi / halfPi,
|
|
theta = asin(sinTheta);
|
|
if (abs(lambda) < epsilon || abs(abs(phi) - halfPi) < epsilon) return [0, pi * tan(theta / 2)];
|
|
var A = (pi / lambda - lambda / pi) / 2,
|
|
y1 = sinTheta / (1 + cos(theta));
|
|
return [
|
|
pi * (sign(lambda) * sqrt(A * A + 1 - y1 * y1) - A),
|
|
pi * y1
|
|
];
|
|
}
|
|
|
|
vanDerGrinten3Raw.invert = function(x, y) {
|
|
if (!y) return [x, 0];
|
|
var y1 = y / pi,
|
|
A = (pi * pi * (1 - y1 * y1) - x * x) / (2 * pi * x);
|
|
return [
|
|
x ? pi * (sign(x) * sqrt(A * A + 1) - A) : 0,
|
|
halfPi * sin(2 * atan(y1))
|
|
];
|
|
};
|
|
|
|
export default function() {
|
|
return projection(vanDerGrinten3Raw)
|
|
.scale(79.4183);
|
|
}
|
|
|