glproj = {
const raw = d3.geoAiryRaw(radius * radians);
return `
float beta = ${radius * radians},
tanBeta_2 = tan(beta / 2.),
b = 2. * log(cos(beta / 2.)) / (tanBeta_2 * tanBeta_2);
float rho = sqrt(x * x + y * y);
float z = -beta / 2., z_2, cosz_2, sinz_2, tanz_2, lnsecz_2, delta = 1.;
for (int i = 0; i < 25; i++) {
if (abs(delta) > 1e-6) {
z_2 = z / 2.,
cosz_2 = cos(z_2),
sinz_2 = sin(z_2),
tanz_2 = sinz_2 / cosz_2,
lnsecz_2 = -log(abs(cosz_2));
z -= delta = (2. / tanz_2 * lnsecz_2 - b * tanz_2 - rho) / (-lnsecz_2 / (sinz_2 * sinz_2) + 1. - b / (2. * cosz_2 * cosz_2)) * (cosz_2 < 0.0 ? 0.7 : 1.);
}
}
float sinz = sin(z);
lambda = atan(x * sinz, rho * cos(z));
phi = asin(y * sinz / rho);
if (rho > ${raw(0, projection.clipAngle() * radians)[1]}) transparent = true;
`;
}