GitHub - Jean-Tinland/middle-earth: An interactive map of Tolkien's Middle-earth

3 min read Original article ↗

This project aims to provide an interactive map of Middle-earth at the end of the Third Age as imagined by J.R.R. Tolkien in his books.

Open Middle-earth map.

You can follow this journal to see the development and creation process of the map.

Middle-earth interactive map

Note

Zoom level, map center and rotation are preserved in the URL, so you can share a specific view of the map by sharing the URL.

Credits

  • Map drawn in Figma with custom terrain & landmark elements.
  • Notable places drawing created by myself in Figma. They are inspired by the movie trilogy and various representation of existing Middle-Earth paintings and artworks:
    • Tharbad is drawn based on Rob Alexander's painting of the city: Tharbad.
    • Tower Hill is drawn based on the painting of the same place by Nasmith Elostirion: Tower Hill.
  • Points of interest have been collected from various sources, including:
    • Original maps by J.R.R. Tolkien and his son Christopher Tolkien.
    • The Atlas of Middle-earth by Karen Wynn Fonstad.
    • MERP maps by various artists.
  • Button's icons: extracted from Remix Icon collection.
  • Favicon: One Ring icon by Icons8.
  • Map texture overlay: Image by rawpixel.com on Freepik.
  • Compass rose (modified): Image by freepik.
  • Font: IM Fell DW Pica

Note

Places from all sources are displayed by default, but you can filter them and display only "canon" places from the map nomenclature at the top left of the screen.

Contribute

Feel free to open an issue or contribute if you'd like anything fixed or added.

If you want to propose a new point of interest, or correct an existing one, you can retrieve the position of the point on the map by adding ?debug=true to the URL, then click on the map to get the coordinates of the point in your clipboard.

Development

This project includes live-server as dev dependencies to serve the map locally and sharp for image processing.

Otherwise, it is a standalone app without any dependency at runtime.

Setup

First, install the project dependencies with bun or npm:

# with bun
bun install

# or with npm
npm install

Running the Server Locally

You can run the development server using live-server:

# with bun
bun dev

# or with npm
npm dev

The server will start and you can access the map by opening the URL shown in your terminal : http://localhost:3000.

Generating Map Tiles

To generate map tiles from the source images, run:

# with bun
bun generate-tiles

# or with npm
npm run generate-tiles

This script uses sharp to process map images at different zoom levels, split them into tiles of 512x512 pixels, and apply a paper texture overlay.