Experimental projections

General discussion of map projections.
PeteD
Posts: 251
Joined: Mon Mar 08, 2021 9:59 am

Re: Experimental projections

Post by PeteD »

You can of course also shift the parallels of the Winkel tripel in the other direction such that they're closer together near the equator and further apart near the poles. At first glance, you might think that taking the average of the equirectangular projection and the Aitoff-transformed (i.e. umbeziffert only in the x direction with a limiting meridian of 90°) stereographic projection for the y values would be a good choice. However, the spacing of the parallels deviates from equidistance by a much greater amount in the stereographic than in the azimuthal equal-area, from which the Hammer is derived, so this results in a much greater modification of the spacing of the parallels than in projection 1.

In order to shift the parallels by a similar amount (but in the other direction) compared to projection 1, we need to start with an azimuthal projection such that the ratio of the radial scale factor of this projection to the radial scale factor of the azimuthal equidistant is equal to the ratio of the radial scale factor of the azimuthal equidistant to the radial scale factor of the azimuthal equal-area. Assuming my calculations are correct, this projection is given by

rho = 2 ln{tan[(pi + p)/4]}
theta = lambda

in polar aspect using the polar coordinates (rho, theta), where p is the colatitude given by pi/2 - phi.

So taking the average of the equirectangular and Aitoff projections for the x values and the average of the equirectangular projection and the Aitoff-transformed version of this new azimuthal projection for the y values gives:
2a Winkel tripel lower angular distortion.png
2a Winkel tripel lower angular distortion.png (166.41 KiB) Viewed 9787 times
2b Winkel tripel lower angular distortion 40 deg.png
2b Winkel tripel lower angular distortion 40 deg.png (172.13 KiB) Viewed 9787 times
Again, before averaging with the equirectangular, the Aitoff-transformed new azimuthal projection is scaled down to the size of the Aitoff.

Compared to the original Winkel tripel, the resulting projection has lower angular distortion at the expense of higher areal distortion.
Last edited by PeteD on Fri Apr 07, 2023 10:53 am, edited 6 times in total.
PeteD
Posts: 251
Joined: Mon Mar 08, 2021 9:59 am

Re: Experimental projections

Post by PeteD »

The whole reason for averaging a pointed-pole parent projection with the equirectangular projection in the first place is to introduce a pole line. However, once you accept that you don't have to use the same parent projection for the y values that you use for the x values, it becomes apparent that you don't need to take the average with the equirectangular projection at all for the y values and you'll still have the same pole line. Taking the average of the equirectangular and Aitoff projections for the x values and just taking the Aitoff projection alone without any averaging for the y values gives a projection that's essentially the Winkel tripel but with rounded corners:
3a Winkel tripel rounded corners.png
3a Winkel tripel rounded corners.png (171.21 KiB) Viewed 9786 times
3b Winkel tripel rounded corners 40 deg.png
3b Winkel tripel rounded corners 40 deg.png (177.17 KiB) Viewed 9786 times
Compared to the original Winkel tripel, this version with rounded corners has both lower overall areal distortion and lower overall angular distortion.
Last edited by PeteD on Fri Apr 07, 2023 10:55 am, edited 2 times in total.
PeteD
Posts: 251
Joined: Mon Mar 08, 2021 9:59 am

Re: Experimental projections

Post by PeteD »

The obvious next step is now to replace the Aitoff with the Hammer and with the Aitoff-transformed new azimuthal projection introduced two posts ago, as in projections 1 and 2 respectively, in order to modify the spacing of the parallels in this new version of the WInkel tripel with rounded corners. However, in projections 1 and 2, the spacing of the parallels is tempered by averaging with the equirectangular, so if we just take the Hammer projection or the Aitoff-transformed new azimuthal projection alone without any averaging for the y values, then the parallels in the resulting projection will deviate from being equally spaced by a greater amount than in projections 1 and 2. Of course, this doesn't mean that you can't do it, and some people might like the parallels deviating so much from being equally spaced, but personally, I don't like parallels that deviate too much from being equally spaced in compromise projections. Of course, if the parallels have to deviate a long way from being equally spaced in order to achieve equivalence or conformality, then that's fine.

So instead of taking the Hammer projection or the Aitoff-transformed new azimuthal projection alone without any averaging for the y values, we first take the average of the Aitoff and (scaled up) Hammer projections for the y values:
4a Winkel tripel rounded corners lower areal distortion.png
4a Winkel tripel rounded corners lower areal distortion.png (170.68 KiB) Viewed 9785 times
4b Winkel tripel rounded corners lower areal distortion 40 deg.png
4b Winkel tripel rounded corners lower areal distortion 40 deg.png (176.38 KiB) Viewed 9785 times
Last edited by PeteD on Fri Apr 07, 2023 10:57 am, edited 1 time in total.
PeteD
Posts: 251
Joined: Mon Mar 08, 2021 9:59 am

Re: Experimental projections

Post by PeteD »

.. and then take the average of the Aitoff projection and the (scaled down) Aitoff-transformed new azimuthal projection for the y values:
5a Winkel tripel rounded corners lower angular distortion.png
5a Winkel tripel rounded corners lower angular distortion.png (172.65 KiB) Viewed 9784 times
5b WInkel tripel rounded corners lower angular distortion 40 deg.png
5b WInkel tripel rounded corners lower angular distortion 40 deg.png (177.64 KiB) Viewed 9784 times
As with all the other projections, the average of the equirectangular and Aitoff projections is taken for the x values.

Projection 4 with rounded corners has both lower overall areal distortion and lower overall angular distortion than its counterpart with pointed corners projection 1, and projection 5 with rounded corners has both lower overall areal distortion and lower overall angular distortion than its counterpart with pointed corners projection 2.
PeteD
Posts: 251
Joined: Mon Mar 08, 2021 9:59 am

Re: Experimental projections

Post by PeteD »

A hundred years ago, John Paul Goode joined a sinusoidal projection covering the lower latitudes to a Mollweide projection covering the higher latitudes. There were two obvious choices for the particular latitude at which the two projections are joined, which I will refer to as ϕjoin: the latitude at which the two projections have the same width when plotted at the same scale, such that the combined projection is still equal-area, or the latitude at which the meridians of the two projections have the same gradient, such that there is no kink. Goode chose the former. He could have used a generalized version of one of the two projections having a free parameter whose value can be chosen such that there exists a ϕjoin at which the scales and the gradients both match – but he didn't.

55 years ago, György Érdi-Krausz did that and more – he replaced the sinusoidal projection with a Wagner I variant having not one but two free parameters (the m and p of the Umbeziffern transformation – n doesn't do anything for pseudocylindrical projections) whose values can be chosen such that the scales and the gradients can match not just at one but at any value of ϕjoin. Then he missed an open goal by instead selecting arbitrary values of m, p and ϕjoin (m = 0.8, p = 2.5 and ϕjoin = 60°) such that neither the scales nor the gradients match, so the resulting projection still has a kink and isn't even equal-area.

So finally in 2023, I'm presenting an Érdi-Krausz variant where the scales and the gradients of the two parent projections match at any value of ϕjoin:

Let A = (π / 4) sin ϕjoin tan θjoin and B = sqrt(A / (A + cos2 θjoin)),

where θjoin is the value of θ in the Mollweide projection that corresponds to ϕ = ϕjoin.

Then setting m = B / sin ϕjoin and p = (2 tan θjoin) / (B arcsin m) in the Wagner I ensures that the scales and the gradients both match for the chosen value of ϕjoin.

Alternatively, you could first select a value of one of m and p and then calculate the required value of the other one and of ϕjoin.

This is what it looks like for Érdi-Krausz's value of ϕjoin = 60°
equal-area Erdi-Krausz 60°.png
equal-area Erdi-Krausz 60°.png (138.72 KiB) Viewed 9703 times
and for Goode's value of ϕjoin = 40°44'
equal-area Erdi-Krausz 40°44'.png
equal-area Erdi-Krausz 40°44'.png (151.94 KiB) Viewed 9703 times
Note that since only the first derivatives match, the meridians are still not smooth. The second derivatives come closer to matching for lower values of ϕjoin, but then you may as well just use the Mollweide projection for the whole globe.

In case anyone's interested, here's the code:

Code: Select all

function equalAreaErdiKrauszRaw(phi_join) {
function forward(lambda, phi) {
var theta_join = mollweideBromleyTheta(pi, phi_join);

var A = quarterPi * sin(phi_join) * tan(theta_join),
B = sqrt(A / (A + pow(cos(theta_join), 2))),
m = B/sin(phi_join),
p = (2*tan(theta_join)) / (B*asin(m)),
k = sqrt(p * asin(m)/pi);

var height_wagner1 = 1/(k*sqrt(m)) * asin(m*sin(phi_join)),
height_mollweide = sqrt2 * sin(theta_join);

if (abs(phi) <= phi_join) {
var x = k/sqrt(m) * lambda * sqrt(1 - pow(m*sin(phi), 2)),
y = 1/(k*sqrt(m)) * asin(m*sin(phi));
} else {
var xy = mollweideRaw(lambda, phi),
x = xy[0],
y = xy[1] - sign(phi) * (height_mollweide - height_wagner1);
}

return [x, y];
}

forward.invert = solve2d(forward);

return forward;
}

function equalAreaErdiKrausz(phi_join) {
if (phi_join === undefined) phi_join = 60;
return d3Geo.geoProjection(equalAreaErdiKrauszRaw(phi_join * radians))
.scale(153.478); // 60°
// .scale(166.461); // 40°44'
}

function mollweideBromleyTheta(cp, phi) {
var cpsinPhi = cp * sin(phi), i = 30, delta;
do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));
while (abs(delta) > epsilon && --i > 0);
return phi / 2;
}

function mollweideBromleyRaw(cx, cy, cp) {

function forward(lambda, phi) {
return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];
}

forward.invert = function(x, y) {
return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];
};

return forward;
}

var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);
Last edited by PeteD on Mon Jul 31, 2023 2:23 am, edited 1 time in total.
daan
Site Admin
Posts: 977
Joined: Sat Mar 28, 2009 11:17 pm

Re: Experimental projections

Post by daan »

PeteD wrote: Sat Oct 22, 2022 12:10 pm open book.png
daan wrote: Fri Oct 21, 2022 11:50 am I can imagine ways of generating that.
I'd be interested to know how you would have done it.
I’d have used “directional path offset” as described in Section 2.4 of this paper.

— daan
PeteD
Posts: 251
Joined: Mon Mar 08, 2021 9:59 am

Re: Experimental projections

Post by PeteD »

Wouldn't that increase the spacing of the meridians along each parallel in the fold? Although the increase might be small enough that it still looks OK, especially if the fold isn't too steep.
daan
Site Admin
Posts: 977
Joined: Sat Mar 28, 2009 11:17 pm

Re: Experimental projections

Post by daan »

PeteD wrote: Fri Aug 04, 2023 1:40 am Wouldn't that increase the spacing of the meridians along each parallel in the fold? Although the increase might be small enough that it still looks OK, especially if the fold isn't too steep.
Quite right. To avoid that, you could start from the standard cylindric form, apply directional offset, tilt the plane a bit using standard 3D transformations, and then project back to the plane with the orthographic (the latter just being a fancy way to say to ignore the z-axis, of course).

— daan
PeteD
Posts: 251
Joined: Mon Mar 08, 2021 9:59 am

Re: Experimental projections

Post by PeteD »

This would never have occurred to me. I suppose you're too busy to post an example?
daan
Site Admin
Posts: 977
Joined: Sat Mar 28, 2009 11:17 pm

Re: Experimental projections

Post by daan »

PeteD wrote: Sat Aug 05, 2023 10:38 am This would never have occurred to me. I suppose you're too busy to post an example?
I would need another step: Besides the directional offset, I would need to decrease distance between meridians toward the central meridian using axial yanking from Section 2.10 of that paper. That gives:
  1. Directional offset to give the vertical shift;
  2. Axial yanking to crowd the meridians toward the center;
  3. Tilt top away in 3D cartesian space with the z-axis being along line of sight;
  4. Select x, y and discard z coordinates.
I think by this time that your method is simpler. Theoretically, I could reproduce what you have precisely, I think. But yes, it would be a chore.

Steps 1 & 2 essentially achieve your Steps 1 & 2, but in a different way and in different combination: You don’t have an explicit need for my Step 2, but my Step 1 achieves the rest of what your steps 1 & 2 achieve. I haven’t chosen functions to use in Step 1 or 2, but surely there are plenty of candidates. My Step 3 achieves your Step 3. My Step 4 is a no-op.

— daan
Post Reply