This is a still rugged implementation of the myriahedral projection described by Jarke J. van Wijk in his 2008 paper entitled Unfolding the Earth: Myriahedral Projections.
The rough idea presented in the paper is to split up the sphere (=earth) in a number of very small bits. Bits which have land mass in them should tend to stick together, while bits without land mass might be separated. After deciding where to cut, the sphere can be flattened to the plane.
The resulting projection has a number of interesting properties: It preserves area everywhere, and it preserves angles locally.
Apart from the large number of bits the earth is split in, a large number of configurations is possible, depending on the chosen center of the projection, the graticular weights, the smoothing, the coloring... it's fun to play with the settings.
Here are a two examples:
$ git clone --recursive git@github.com:temporaer/myriaworld.git
This is still a mess. After starting this project, I realized that there's very little support for geometry on the sphere out there. I tried Boost.Geometry, GDAL, and finally ended up with Google's s2 library, which isn't really easy to install and compile.
I'll push my changes to s2 later, for now: let's just assume you managed to do that.
$ make
get the ne_10m_admin_0_countries
and ne_10m_ocean
files from
naturalearthdata.com
and put them in the data directory.
To read shapefiles from naturalearthdata, you need the OGR python library.
$ easy_install GDAL
should do the trick.
$ cd src
$ python create_countries.py
$ ./myriaworld --depth 5 --sigma 0.4 --wlon 3. --output test --alpha 1 --rotate 0 --clat 313 --clon -65 --roll -315 --render png
Note that the intermediate values are cached and recomputed as-needed, so if you only change colors, map-centers, render format, or graticular weights, it'll happen much faster than the first run.