---
title: 'Kartenmaterial herunterladen und übertragen'
url: 'https://blog.ro011110ot.de/de/lilygo-t-deck/kartenmaterial-herunterladen-und-uebertragen'
markdown: 'https://blog.ro011110ot.de/de/lilygo-t-deck/kartenmaterial-herunterladen-und-uebertragen.md'
lang: de
date: '2026-10-05'
description: '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…'
---

# 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:

1. Ein **Custom User-Agent** (`--user-agent`), da OSM leere oder Standard-Wget-Header blockiert.
2. 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.

---

## Navigation

- Next: [LilyGo T-Deck Multiboot einrichten](https://blog.ro011110ot.de/de/lilygo-t-deck/lilygo-t-deck-multiboot-einrichten.md)
