Files
mrs/docs/maps.md
2026-04-05 20:27:43 -04:00

3.3 KiB
Executable File
Raw Blame History

Maps

MRS comes with a self-hosted tile server to provide offline maps using TileServer GL.

While everything comes pre-configured this guide will walkthrough the setup + integration.

Table of Contents

Usage

The TileServer can be viewed at http://localhost:5000

Other applications can use the tileserver by configure the application to use:

Commands

  • Setup: docker run -d --name maps --restart unless-stopped -p 5000:8080 -v /media/maps/tiles:/data -v /media/maps/styles:/styles maptiler/tileserver-gl:v4.11.0
  • Restart: docker restart maps
  • Start: docker start maps
  • Stop: docker stop maps

Adding Maps / Styles

TileServer GL works with both vector & raster map tiles.

  1. Download map tiles
  2. Upload tiles file to /media/maps/tiles
  3. Upload styles to /media/maps/styles
  4. Reboot TileServer GL: docker restart maps

Adding Contours

All topographic maps I have found cost thousands of dollars. With that in mind, these instructions will compile our own topographic layer we can add to any tileset.

1. 📁 Download Topographic Data

Topography data sets can be downloaded from OpenTopography.

Follow the instructions to sign up & download GEBCO Global Bathymetry and Topography

2. 📦 Tooling Setup

sudo apt update
sudo apt install -y gdal-bin build-essential sqlite3 libsqlite3-dev git wget unzip docker.io zlib1g-dev
git clone https://github.com/mapbox/tippecanoe.git
cd tippecanoe
make -j$(nproc)
sudo make install
cd ..

3. 🌄 Generate Global 50 m Contours

This step is heavy, dont run on Pi — expect 6090 GB raw GeoJSON before being compressed to ~2-4 GB

gdal_contour -f GeoJSONSeq
  -a ele \                 # elevation attribute
  -i 50 \                  # interval (50 m)
  GEBCOIceTopo.vrt global_50.geojsonl

tippecanoe -o contours_50m.mbtiles \
  -Z0 -z12 \                             # min/max zoom levels
  --drop-densest-as-needed \             # keep tiles small
  --extend-zooms-if-still-dropping \     # avoid data loss
  --layer=contour \                      # layer name
  --read-parallel --reorder \            # faster + optimized
  global_50.geojsonl

4. 🎨 Add contours to style

Create / Modify a style.json

{
  "version": 8,
  "name": "Terrain",
  "sources": {
    ...
    "contours": {
      "type": "vector",
      "url": "mbtiles://contours_50m.mbtiles"
    }
  },
  "layers": [
    ...
    {
      "id": "contours-major",
      "type": "line",
      "source": "contours",
      "source-layer": "contour",
      "minzoom": 0,
      "maxzoom": 6,
      "filter": [">=", "ele", 1000],
      "paint": { "line-color": "#888", "line-width": 0.4 }
    },
    {
      "id": "contours-detailed",
      "type": "line",
      "source": "contours",
      "source-layer": "contour",
      "minzoom": 7,
      "paint": { "line-color": "#666", "line-width": 0.3 }
    }
  ]
}