A suite of programs to create custom maps of the Earth's surface.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.settings Parsing, for real this time Aug 26, 2017
input The first of the Danseiji Jan 19, 2019
output I knew it! Jan 20, 2019
res I'm Ant-Man! Jul 23, 2017
src I knew it! Jan 20, 2019
.classpath You intolerant fool Sep 28, 2018
.gitattributes :octocat: Added .gitattributes & .gitignore files Nov 23, 2015
.gitignore Don't mind me Dec 23, 2018
.project Just Getting Started Nov 23, 2015
LICENSE.md Final Product Apr 2, 2018
MapAnalyzer.jar You intolerant fool Sep 28, 2018
MapDesignerRaster.jar You intolerant fool Sep 28, 2018
MapDesignerVector.jar You intolerant fool Sep 28, 2018
README.md So... many... maps... Feb 5, 2018
build.xml You intolerant fool Sep 28, 2018

README.md

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:

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.