Map prototype

One globe, then the districts.

Can a single MapLibre map spin as a shaded globe and zoom to an OSM admin boundary, or does the look need a second renderer? A wins a tie.

Experiment A

MapLibre only

One camera, one input system. The projection eases from globe to Mercator. A custom shader rides along.

Experiment B

Three.js, then a handoff

A noise-warped intro globe crossfades to the same MapLibre view in about 400 ms. The pop is the cost.

How the choice is made

  1. Visible pop at the handoff. A should have none. B is measured by frame diff.
  2. Visual ceiling. B is allowed to look richer. It has to be clearly better, not merely different.
  3. Input. A has one gesture the whole way. B switches pointers at the cutover.
  4. Frame rate while spinning. 50 fps on a mid-range laptop, 30 on a phone. The numbers below are from this build, not that laptop.
  5. Build effort. A is the map. B is a second camera that has to stay aligned.

If those do not separate the two, A is the answer.

Measured on this build

Loading the readout…

Zoom bands

ZoomProjectionAdmin levelsShader
0–3Globe, spinning2On
3–6Globe, still2On
6–10Globe2 and 4Fading
10–12Globe to Mercator4 and 6Trace, then off
12+Mercator6 and 8Off

Both experiments use the same parchment, ink, and gold. Tiles are OSM-derived vector tiles from tiles.ghj.io. OpenFreeMap is the fallback in src/config.js.