Today I’ll show how to print and fold a paper terrestrial globe, with no cutting and no glue.

tl;dr: Download SVG files from GitHub, print each one scaled to fill the page, fold along the dashed lines, interlock the inside flaps, assemble the globe by inserting tabs of one facet into pockets of another.

I knew for a while now how to fold a modular origami dodecahedron and thought that it would be nice to make a terrestrial globe like that, but was too lazy to actually go ahead and do it. That is, until now.

Plain vanilla modular origami dodecahedron

I started with a vector map of the world from Wikipedia.

SVG world map from Wikipedia

It’s in SVG format, making it easy to manipulate. I wrote a C++ program to do that. It’s write-only code (not easy to follow), so I’ll explain what it’s doing here. For each face, the program needed to to the following:

Read and parse the SVG map; Convert pixel coordinates to latitude and longitude; Convert latitude and longitude to coordinates on a given face of the dodecahedron; Discard countries that are not going to be visible on this face anyway; Rotate and scale to fit the paper; Add clipping polygon to avoid wasting toner on areas that won’t be visible in the final product; Add folding lines; Output the new SVG.

SVG internally is XML. I did not want to parse XML myself, so turned to a library called expat. It’s been around for a while and the age shows. API is a bit archaic by modern standards, but it gets the job done.

I did not have to handle all of SVG logic, just the pieces that I needed: groups and curves. That meant tags <g> (including one kind of transform attribute) and a very small subset of tag <path>.

SVG map from Wikipedia did not have a grid and it wasn’t immediately clear whether the units used throughout the file corresponded to something, so I had to figure out scaling first.

The map is in Miller cylindrical projection, so parallels and meridians are straight, and luckily there are several large straight borders with known coordinates that can be used as a reference:

Reference points

US-Canada border at 49° North Alaska-Canada border at 141° West South-west corner of Egypt at 22° North and 25° East Indonesia-Papua New Guinea border at 141° East Namibia-Botswana border at 22° South and 20° East

So I figured out scaling from those reference points, and after undoing Miller cylindrical projection got latitude λ and longitude φ.

Next step was to convert latitude and longitude to coordinates on a given face of the dodecahedron. It’s easy for the top and bottom faces, where distances from the center of the face are

x = -p sin(λ) / tan(φ),y = -p cos(λ) / tan(φ)

Here p is the distance from the center of the dodecahedron to the center of its face.

For the slanted side faces trigonometry became a bit trickier, so it took me several attempts to get it right. Eventually I ended up with this:

η = arctan(tan(φ) / cos(λ)),x = p tan(λ) cos(η) / cos(η – ψ + π / 2),y = -p tan(η – ψ + π / 2)

Here ψ is dihedral angle (the angle between two adjacent faces).

At this point things started to take shape. I only had to flip signs in a couple of places to account for orientation, and rotate the output to match pockets with tabs.

Next I added some filtering logic to discard countries that are not going to be visible anyway. This logic is not ideal, but it does not have to be. I restricted print area by pentagonal clipping path, so the worst that could happen is that SVG files would have some unnecessary paths. As long as I eliminated countries from the other side of the globe I should be ok, or so I thought.

It turned out that Russia and Canada are so wide that my filtering logic was excluding them when it should not have, and relaxing the filtering criteria caused ghost counties to X-ray from the other side of the globe. By that time I have already spent way more time on this than initially planned, so I hardcoded handling of those special cases to avoid clipping off Kamchatka and eastern Canada.

The rest of the code was simple, although probably unnecessarily verbose: rotate and scale the face to fit the paper, add dashed folding lines, and patch the hole at the South pole where the cylindrical projection breaks. Eventually I got all twelve faces. The Pacific is really big and empty!

Face 1 (North pole)

Face 2

Face 3

Face 4

Face 5

Face 6

Face 7

Face 8

Face 9

Face 10

Face 11

Face 12 (South pole)

SVG is scalable, so when printing it was important to make sure the image fills the entire page. I used US Letter size and 1″ margins, but it should work reasonably well with other paper sizes, too, as long as the margins are not too wide.

Folding sequence is pretty straightforward: fold away at the dotted lines and interlock the two internal tabs.

Fold top and bottom

Two more folds

Now fold in half

Crease the two tabs

All folds done

Interlock the flaps

Complete module

Once all twelve modules are ready, the only thing remaining was to assemble them by inserting tabs of one module into pockets of another.