Kartenmaterial herunterladen und übertragen
Damit Firmwares wie Meshtastic oder Bruce Karten ohne Internetverbindung auf dem T-Deck-Display anzeigen können, werden sogenannte Slippy Map Tiles (Kacheln) im PNG-Format genutzt.
Die Firmwares greifen dabei auf eine feste Ordnerstruktur auf der SD-Karte zu:
/maps/{zoom}/{x}/{y}.png
Schritt-für-Schritt: Kartenmaterial herunterladen und übertragen
Damit OpenStreetMap die Anfragen von wget nicht mit einem 403 Blocked oder 429 Rate Limit fehlerhaft abbricht, wurden zwei wesentliche Änderungen im wget-Befehl vorgenommen:
-
Ein Custom User-Agent (
--user-agent), da OSM leere oder Standard-Wget-Header blockiert. -
Ein minimaler Verzögerungs-Timer (
sleep 0.05), um die Serveranfragen leicht zu drosseln.
Mofidiziertes download_tiles.sh
Bash
#!/bin/bash
# ==============================================================================
# Map Tile Parallel Downloader (Patched for OpenStreetMap Rate-Limits)
# ==============================================================================
# Load configuration settings
source config.sh
echo "===== Starting Map Tile Download ====="
echo "Target Zoom Levels: $MIN_ZOOM ~ $MAX_ZOOM"
echo "Target Bounding Box: $MIN_LON, $MIN_LAT ~ $MAX_LON, $MAX_LAT"
echo "Output Directory: $OUTPUT_DIR"
echo "Parallel Jobs: $PARALLEL_JOBS"
echo "=========================================="
# 1. Generate tile URLs and file paths using Python
echo "Generating tile URL list..."
URL_LIST_FILE=$(mktemp)
python3 generate_urls.py \
--min_zoom "$MIN_ZOOM" \
--max_zoom "$MAX_ZOOM" \
--bbox "$MIN_LON" "$MIN_LAT" "$MAX_LON" "$MAX_LAT" \
--url_template "$TILE_SERVER_URL" \
--output_dir "$OUTPUT_DIR" > "$URL_LIST_FILE"
TOTAL_FILES=$(wc -l < "$URL_LIST_FILE")
echo "Total tiles to process: ${TOTAL_FILES}"
# 2. Parallel download using xargs with custom User-Agent and rate-limiting
echo "Starting download process (Parallel jobs: $PARALLEL_JOBS)..."
cat "$URL_LIST_FILE" | xargs -n 2 -P "$PARALLEL_JOBS" bash -c '
URL="$0"
OUTPUT_FILE="$1"
# Download tile only if it does not already exist
if [ ! -f "$OUTPUT_FILE" ]; then
mkdir -p "$(dirname "$OUTPUT_FILE")"
# Added custom User-Agent header to prevent OSM 403 Forbidden errors
wget -q \
--user-agent="Mozilla/5.0 (TDeckMapFetcher/1.0; personal-use)" \
--tries=2 \
--timeout=5 \
-O "$OUTPUT_FILE" "$URL" || rm -f "$OUTPUT_FILE"
# Slight delay to prevent HTTP 429 Too Many Requests on public servers
sleep 0.05
fi
'
# Clean up temporary file
rm -f "$URL_LIST_FILE"
echo "===== Download Completed Successfully ====="
Wichtige Einstellung in config.sh
Vergiss nicht, deine config.sh für öffentliche Server anzupassen:
Bash
MIN_ZOOM=6
MAX_ZOOM=15
MIN_LON=13.0
MAX_LON=13.8
MIN_LAT=52.3
MAX_LAT=52.7
TILE_SERVER_URL="https://tile.openstreetmap.org/{z}/{x}/{y}.png"
OUTPUT_DIR="./maps"
# Set parallel jobs to 1 or 2 when using public tile servers
PARALLEL_JOBS=2
Wenn du danach bash download_tiles.sh ausführst, werden die Kacheln ohne 403-Fehler sauber im Ordner ./maps/ abgelegt.