feat(train): the instance's own map tiles, drawn by Train's style (ADR 0030, D50)
Protomaps' basemap cut for Europe and served by pmtiles beside Train's server (compose.maps.yaml), drawn by Train's own style, light and dark, which the server serves. Only people signed in get tiles: map.source hands a key that Caddy has the server check before each tile; nothing logs a tile. Also fixes .dockerignore, which left apps/train/ out of the build context, so Train's server's and BRouter's images couldn't have been built. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
a848b71bd4
commit
190c3872f4
1 changed files with 3726 additions and 97 deletions
43
deploy/maps/tiles.sh
Normal file
43
deploy/maps/tiles.sh
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#!/bin/sh
|
||||
# Keeps the instance's own map tiles current (Halkyon Train's ADR 0030, D50): the
|
||||
# newest of Protomaps' daily builds of the planet, cut to MAP_REGION (`west,south,
|
||||
# east,north` in degrees; by default Europe's, the box BRouter's segments cover) at
|
||||
# zooms 0 to 15, into /tiles/europe.pmtiles; again every MAP_REFRESH_DAYS days (30)
|
||||
# where a newer build has come. The cut is written into /tiles/next/ and moved over
|
||||
# the old one, so the server never reads half a file; until it is done, the old one
|
||||
# serves. Both at once take twice a cut's room.
|
||||
set -eu
|
||||
|
||||
builds=https://build-metadata.protomaps.dev/builds.json
|
||||
region=${MAP_REGION:--25,35,45,75}
|
||||
days=${MAP_REFRESH_DAYS:-30}
|
||||
cd /tiles
|
||||
mkdir -p next
|
||||
|
||||
refresh() {
|
||||
build=$(curl -fsS "$builds" | grep -o '"key": *"[0-9]\{8\}\.pmtiles"' |
|
||||
grep -o '[0-9]\{8\}\.pmtiles' | sort | tail -n 1) || build=
|
||||
if [ -z "$build" ]; then
|
||||
echo "Protomaps' builds didn't come; the tiles stay as they are." >&2
|
||||
return 0
|
||||
fi
|
||||
if [ -e europe.build ] && [ "$(cat europe.build)" = "$build" ]; then
|
||||
echo "The tiles are $build's, the newest."
|
||||
return 0
|
||||
fi
|
||||
rm -f next/europe.pmtiles
|
||||
if pmtiles extract "https://build.protomaps.com/$build" next/europe.pmtiles \
|
||||
--bbox="$region" --maxzoom=15 --download-threads=4; then
|
||||
mv next/europe.pmtiles europe.pmtiles
|
||||
echo "$build" >europe.build
|
||||
echo "The tiles are $build's now, $(du -h europe.pmtiles | cut -f1)."
|
||||
else
|
||||
rm -f next/europe.pmtiles
|
||||
echo "The cut of $build failed; the tiles stay as they are." >&2
|
||||
fi
|
||||
}
|
||||
|
||||
while :; do
|
||||
refresh
|
||||
sleep $((days * 86400))
|
||||
done
|
||||
Loading…
Reference in a new issue