Jean Tinland | Journal | Lord of the Rings https://www.jeantinland.com/journal/lotr/ Journal entries about building an interactive map of Middle-earth. Wed, 08 Apr 2026 00:00:00 GMT en-EN weekly 1 Relief and vegetation https://www.jeantinland.com/journal/lotr/relief-and-vegetation/ Wed, 08 Apr 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/relief-and-vegetation/ As stated in a previous entry, using different images for each zoom level allows me to add more details to the map on higher zoom levels.

I'm starting to add relief and vegetation to the map. This should allow visitors to be better immersed when zooming in.

It will take some time to go over all the map and add these details, but the result should be worth it.

I'm using this MERP map below as a source of inspiration for placing relief and vegetation on the map.

]]>
Expanding the world https://www.jeantinland.com/journal/lotr/expanding-the-world/ Mon, 30 Mar 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/expanding-the-world/ Going over all already added points of interest, I realized that some where not coming from the maps drawn by Tolkien or his son. I'm only considering their maps as canon material.

However, when looking at the map, there are a lot of voids that could be filled. I'm in no position to invent new locations, but I can rely on other solid sources to add more detail and context to my map.

Keeping in mind that Middle-earth is severely depopulated at the end of the Third Age as a consequence of multiple factors (the Great Plague, the Long Winter, the Fell Winter, the departure of the Elves, and so on...), we can still imagine that there were a lot more places and settlements harboring civilization in every direction.

In order to populate the map a bit more, I will only be adding more points of interest sourced from the Middle-earth Role Playing game, which is a tabletop RPG published in the 1980s and 1990s. It is based on Tolkien's works and is considered a reliable source for Middle-earth lore.

That said, I want to give a choice to the users of the map: they will be able to toggle the display of points of interest coming from non-canon sources like the Middle-earth Role Playing game.

On top of that, every point of interest is now linked to a source, which is displayed in the tooltip when click on it.

This toggle is available in the map nomenclature, at the top left of the map:

Here is the source of the points of interest in the tooltip:

]]>
A rotating map https://www.jeantinland.com/journal/lotr/a-rotating-map/ Mon, 23 Mar 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/a-rotating-map/ After an improved zooming and panning experience, it is now possible to rotate the map using "Shift + mouse drag" on desktop or with two fingers on mobile. A dynamic compass also appears in the top right corner of the map, indicating the current orientation. Clicking/tapping the compass resets the map to its default north-up orientation.

]]>
Populating the Shire https://www.jeantinland.com/journal/lotr/populating-the-shire/ Fri, 20 Mar 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/populating-the-shire/ Using the following map of the Shire (by Christopher Tolkien) as a reference, I added more named places to the Shire, including hamlets, rivers, and woods.

As this map's scale is much smaller than my interactive version, some points of interest and landscape features are not exactly in the same place. It will be corrected in the future.

]]>
Adding hamlets https://www.jeantinland.com/journal/lotr/adding-hamlets/ Thu, 19 Mar 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/adding-hamlets/ The map was missing a level of settlement after the villages.

It will come handy when adding more points of interests to the map, especially in The Shire, where there are many small hamlets that are not really villages but still worth showing on the map.

]]>
An idea of scale https://www.jeantinland.com/journal/lotr/an-idea-of-scale/ Wed, 18 Mar 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/an-idea-of-scale/ At first, the scale was a simple representation of the distance between two points on the map displayed under the compass rose. It was static and not really useful when moving around the map.

It is now a fixed part of the interface and is dynamically updated as the user zooms in and out.

]]>
Working on mountains https://www.jeantinland.com/journal/lotr/working-on-mountains/ Tue, 10 Mar 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/working-on-mountains/ The first version of the map was using basic shaped mountains drawn without much care. They were filling the purpose of showing where the mountains were, but they were not very good looking and much of all not really "Tolkien-style".

This is better now :

The new mountains were inspired by this tutorial on how to draw Tolkien-style mountains by Josh Stolarz.

I'm still not fully satisfied with the result, I will surely rework them again in the future, but this will do for now.

]]>
A performance problem https://www.jeantinland.com/journal/lotr/a-performance-problem/ Mon, 02 Mar 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/a-performance-problem/ Adding multiple biomes to the map was, I think, a welcome improvement but the way the map was implemented, it became almost unusable both on desktop and mobile devices.

A new approach was needed to render the map efficiently.

Without diving too much into technical details, the map was initially displayed as a single SVG image with all the landmasses, seas, rivers, mountains, forests and roads. Adding biomes meant adding a new layer of more or less complex shapes in the existing SVG, which made it very heavy to render and manipulate.

Looking at existing solutions, I chose to completely change the way the map is rendered: instead of using a single SVG, I now export 8 separate JPEG images. A script then splits each image into 512x512 pixel tiles, which are then loaded and displayed as a grid of images in the browser. This way, only the tiles that are visible in the viewport are loaded and rendered, which significantly improves performance.

Coupled with some optimizations in the zooming and panning logic, the map is now as responsive as it could be, even on mobile devices.

A preview of a single tile

Also, using different images for each zoom level will allow me to add more details to the map on higher zoom levels.

]]>
Introducing biomes https://www.jeantinland.com/journal/lotr/introducing-biomes/ Sun, 01 Mar 2026 00:00:00 GMT https://www.jeantinland.com/journal/lotr/introducing-biomes/ One year later, I have a bit more time to dedicate to the map. It may be subjective, but with only one color for all landmasses, the map was feeling a bit too plain.

Middle-earth is a vast continent composed of a multitude of geographical features, and I wanted to reflect this diversity in the map.

The new version of the map introduces distinct biomes, Eriador, Rhovanion, Harad, Rohan, Mordor and so on. Each biome has its own color palette, inspired by the original map but with a bit more saturation and contrast to make them visually distinct.

Looking at this screenshot, the map renders overall a bit too dark. It will surely be remedied soon.

]]>
The beginning https://www.jeantinland.com/journal/lotr/the-beginning/ Fri, 21 Mar 2025 00:00:00 GMT https://www.jeantinland.com/journal/lotr/the-beginning/ Born from the need to stay sane during the long nights of the first months of life of my son, this interactive map is offering a simple way to explore Middle-earth as it is depicted at the end of the Third Age, during the events of The Lord of the Rings.

The map background is drawn from the original map by Tolkien. It displays landmasses, seas, rivers, mountains, forests and roads. Points of interest are displayed as markers during rendering in the browser.

As for fonts, Aniron and EB Garamond are used for main regions and labels respectively.

This is the first journal entry of a series about the development of this map. It will cover principally the features rather than the technical details, except when the latter serves the former.

]]>