Hire a Water Man! Get it? Waterman? I implemented the Waterman projection. Well, mostly. The raster part doesn't actually work for what would correspond to Gene Keyes's "equatorial supple zone". The math got too complicated, so I want to push what I have. It also doesn't detatch Antarctica, but I probably just won't do that; I think it detracts from the value of the map. I renamed Tetrahedral to Polyhedral in the process, because I had originally intended to use that framework before I decided Waterman needed its own class. I still might put Dymaxion in Polyhedral. I also fixed a bug with Cahill-Keyes that was cutting off the top and bottom and removed the Butterfly variant of Cahill-Keyes.
Map-Projections
A class to create custom maps of the Earth's surface. There are thousands of combinations of color-schemes, projections, and aspects. Includes Mercator, Gall-Peters, Orthographic, Peirce Quincuncial, and More!
Installation
If you are a fancy Windows user, I recommend the convenient fancy Windows binaries. Double-click to install them and then keep pressing buttons until something good happens. If you see a map, you're in the right place.
If you are not on Windows or are otherwise not fancy enough to deserve such executables, simply double-click on the .jar files in the main directory and, if you have Java installed (10/10 would recommend), it should just run without any set-up.
You could also compile and run the source code, but if you do, there are a few dependencies. The Java dependencies can be obtained as .jar files:
- Apache Commons Mathematics Library
- Java Tools for Experimental Mathematics "ellipticFunctions" package, which requires their "mfc" package
If you want to use the Python, you'll need a couple of packages from PyPI. Just install Python 3 and pip, and then call the following from a command line (or use Anaconda or something, I don't know. Up to you).
pip3 install numpy pyshp
generate_coastlines.py
also takes input data from naturalearthdata.com, which should be placed in src\\zupplemental\\data\\
.
Usage
There are three executable Java files, three runnable Java scripts, and four runnable Python scripts. These are, in order:
MapDesignerRaster.jar
– The original program. Create custom oblique raster images of the Earth's surface using a variety of algorithms called projections.MapDesignerVector.jar
– The same idea, but working in vector images instead in case you want to cut a vinyl sticker or something.MapAnalyzer.jar
– See graphs and figures quantifying the amount of scale and angular distortion present in each map projection.MapPlotter.java
– Plot a large group of map projections by the amount of distortion they produce.MapOptimizer.java
– Run gradient descent on parametric projections to minimize their distortion.MapExplainer.java
– Generate an HTML blurb outlining and displaying every map projection.generate_coastlines.py
– Generate an SVG string outlining the continents, islands, and major lakes of the world, to be used as vector input.generate_graticule.py
– Generate an SVG string displaying a map graticule, to be used as vector input.generate_indicatrices.py
– Generate an SVG string outlining an array of Tissot's indiatrices of distortion, to be used as vector input.generate_orthodromes.py
– Generate a mesh of orthodromes in an Equirectangular projection, to be used as vector input.
The executable applications all have similar layouts that let you select an input equirectangular map, a projection, an aspect (where the North Pole is situated with respect to the projection), and parameters if applicable. Go crazy! There are a practically unlimited number of combinations.
The runnable scripts just kind of work on their own. Those ones aren't really meant for mass consumption.
Wherefore?
I'll write a little blurb here later.
For some examples, check out the output
folder. For more information, go to jkunimune15.github.io/Map-Projections.
Credits
While I wrote all of the code in this repository myself, and I created several of the simpler images from scratch, other people did help. Here's a comprehensive list.
- The NASA for Basic.png, Satellite.jpg, and Altitude.png,
- Tom Patterson for Clouds.jpg, Rivers.png, and Political.svg,
- Natural Earth for Pastel.png and their vector coastline data,
- The Apache Commons for their complex mathematics code,
- Technische Universität Berlin for their complex mathematics code,
- Gene Keyes for his impressively in-depth and open documentation of his map projection,
- AuthaGraph Co., Ltd. for their vague information about their map projection, which inspired several of my own, and
- Wikipedia for their substantial collection of map projection information and equations.