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!
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\\
.
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.
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.
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,
- Natural Earth for Pastel.png and their detailed vector 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 documentation of his map projection,
- Robert Gray for his research on Buckminster Fuller's map projection,
- AuthaGraph Co., Ltd. for their vague information about their map projection, and
- Wikipedia for their substantial collection of map projection information and equations.