"Best" projection for rectangular world map?

I’m on the quest for my own fully fledged, wall-sized map of the world - completely done in GMT.

Of course I call more than one commercially available map of the world my own – but on every map there are details that bother me. So, equipped with the mighty sword that is GMT, I set out to create my perfect map of the world … aaaand got stuck at the first step, selecting the “best” projection for a rectangular map of the world.

  • Cylindrical projections aren’t an option. Mercator is out. Way too much distortion.

  • I have a nice map of the world that uses the van der Grinten projection (-Jv -JV) with a nice detail:


    It expands beyond -160/-160° (map centered on 020°E) in the four corners. Alaska is there in the upper left and right corner. Very nice when you are looking at details at the borders of the map and you need to cross to the other side. Orienting yourself on the map gets quite a bit easier.

  • Currently I would prefer the Winkel Tripel projection (-Jr -JR) but with that nice “wrapping around” of my map as seen above. Currently that isn’t possible with GMT as the projections don’t “wrap around”. -R doesn’t allow (to my knowledge) domains larger than 360° longitude.

Do you have a good idea for the “best” projection for a rectangular world map?

1 Like

For Mercator one can do e.g.

gmt begin multi png

gmt set GMT_THEME minimal

gmt coast -W -JM5c -R0/360/-70/82 -Ba180fg -BWSN
gmt coast -Wred -X5c -Ba180fg -BSN
gmt coast -Wblue -X5c -Ba180fg -BSEN

gmt end

But you don’t want Mercator - understandably.

1 Like

That is a neat trick @Andreas – thank you for sharing!

Not that this is active but maybe some ideas?

Neat maps, Paul! Do you remember the source for the seismic and volcanic data?

Why nobody likes fuller’s projection?

And now I’m curious how you get that pointy beast into a rectangular map … drawing a rectangular frame around it doesn’t count! :wink:

Why do you have to be so picky :smile:

I made a crude mock-up for what I’m trying to achieve:

Experimenting a bit I found that, while the Winkel Tripel projection is more to my liking than the van der Grinten projection, the second is more advantageous when extending the domain beyond +/-180° longitude. It would take quite a big extension with the Winkel Tripel compared to the van der Grinten projection used by the nameless cartographer of my commercial map in the post above. That cartographer must have been on to something …

The red rectangle is supposed to be my final map with the four corners filled by extending the van der Grinten projection beyond +/-180° longitude. Right now -R doesn’t like that:

coast [ERROR]: Map region exceeds 360 degrees

Do you have a neat idea how to extend the map domain beyond 360° longitude? Risking a peek into gmt_proj.c showed me that

  • the 360° longitude model is deeply rooted in the core of GMT
  • my C fu isn’t good enough by a wide margin for meddling with the heart of GMT

As those extension experiments turned out to be fruitless I might need to resort back to the forbidden land of cylindrical projections. Your input is always welcome!

Before cartographers get a twitching eye – yes, I severely mangled the van der Grinten projection here. My extensions have nothing to do with a proper projection but are for illustrative purposes only.

Just plot two half maps next to each other.

To get you some further inspirations

1 Like

You mean something like this @pwessel ?

gmt begin two_halves png

gmt set GMT_THEME minimal

gmt coast -R-190/10/-90/90 -JV10/10c -Bg -Dc -Glightgray -Scornsilk -A10000 -Wthinnest -BWSN
gmt coast -R10/210/-90/90 -JV10/10c -Bg -Dc -Glightgray -Scornsilk -A10000 -Wthinnest -BSEN

gmt end show

Unfortunately it only produces abstract art:

Well, need to be more fancy than that using -R -X, maybe clipping etc etc. How about left half of red box using -R…+r then the right with another -R after X etc etc.

I think I get your basic idea @pwessel but even a simple hemisphere map fails:

gmt coast -R0/180/-90/90 -JV0/10c -Bg -Dc -Glightgray -Scornsilk -A10000 -Wthinnest -view test

Missing landmasses and oceans.

Also, -R+r doesn’t really work as it cuts away all the bulge on the eastern and western hemisphere. See this Winkel Tripel globe with -R-180/-90/180/90+r:

gmt coast -R-180/-90/180/90+r -JR12c -Bg -Dc -A10000 -Gburlywood4 -Swheat1 --GMT_THEME=cookbook -view GMT_winkel-R+r

For clarification: -R+r works exactly as expected, it just doesn’t really help in this case.

The missing landmasses looks like a bug, no? Please open an issue on that one. As for the rest, perhaps GMT cannot do it but perhaps with scripting - that was my point - unfortunately no time for me to look at this in any detail now.

This figure might help find the bug.

gmt coast -R-90/90/-90/90 -JV0/10c -Bg -Dc -Glightgray -Scornsilk -A10000 -Wthinnest -png test

Issue opened: #7282

If I run this in the debugger ]

gmt basemap -R-180/2/-90/90 -JR1/12c -Bg -png lixo

and inside it change

GMT->current.proj.central_meridian = -1

I get this (still wrong but more acceptable). But spent several hours chasing this fker and couldn’t find where it screws the things.

Another approach would be to convert all the required geographical data (coastlines, grid lines, topography) into “Cartesian” coordinates. Normally one would use mapproject or grdproject to do this. However, to get the “corners” of the example map shown at the top filled out, I think one would have to implement the maths for the projection oneself. But for most of these projections the maths isn’t too bad if a spherical Earth is assumed. Then use GMT to do the plotting with -JX etc.