Generate a static PNG map of an ORcard based on OpenStreetmap Data.
Find a file
2026-05-20 15:26:15 +02:00
.gitignore public release 2026-05-20 15:26:15 +02:00
example.png public release 2026-05-20 15:26:15 +02:00
example_dop.png public release 2026-05-20 15:26:15 +02:00
README.md public release 2026-05-20 15:26:15 +02:00
render_orchard.py public release 2026-05-20 15:26:15 +02:00
requirements.txt first commit 2026-05-20 13:45:10 +02:00

osm-orchard-render

Rendert eine PNG-Karte eines OSM-Gebiets (z. B. einer Streuobstwiese) und beschriftet jeden in OSM erfassten Baum mit seinem loc_name.

Anhand einer OSM-Way-ID führt das Skript folgende Schritte aus:

  1. Lädt die Geometrie des Ways über die Overpass-API.
  2. Fragt alle natural=tree-Knoten innerhalb der (leicht erweiterten) Bounding-Box des Ways ab.
  3. Klassifiziert jeden Baum per Punkt-in-Polygon-Test als innerhalb des Polygons (dunkelgrün) oder außerhalb, aber im Rendering-Bereich (hellgrün).
  4. Fügt OSM-Raster-Kacheln zu einer Grundkarte zusammen, die passgenau auf die Bounding-Box zugeschnitten ist.
  5. Zeichnet darüber die Polygonumrandung, Baummarker und Beschriftungen mit einer einfachen Kollisionserkennung.

Beispiel

example.png wurde aus OSM-Way 1373324442 erzeugt — einer Streuobstwiese in Deutschland:

Beispiel-Rendering von OSM-Way 1373324442

.venv/bin/python render_orchard.py 1373324442 --output example.png

Mit NRW-Luftbild als Hintergrund (example_dop.png):

Beispiel mit NRW DOP

.venv/bin/python render_orchard.py 1373324442 --basemap nrw-dop --output example_dop.png

Die OSM-Way-ID einer Streuobstwiese finden

Das Skript akzeptiert jede OSM-Way-ID für eine geschlossene Fläche (Streuobstwiese, Park, Kleingartenanlage usw.). So findest du sie:

  1. Öffne https://www.openstreetmap.org und navigiere zum gewünschten Gebiet.

  2. Wenn du noch keine konkrete Wiese im Blick hast, hilft Overpass Turbo (https://overpass-turbo.eu) mit einer Abfrage wie landuse=orchard, um Streuobstwiesen aufzuspüren.

  3. Klicke das Polygon der Streuobstwiese auf der Karte an. In der rechten Seitenleiste erscheinen die Tags des Objekts und eine OSM-URL der Form https://www.openstreetmap.org/way/1373324442. Die Zahl am Ende ist die Way-ID.

  4. Übergib sie als erstes Positions-Argument:

    python render_orchard.py 1373324442
    python render_orchard.py 987654321 -o meine_wiese.png
    

Wenn die Fläche als Relation (Multipolygon mit Löchern) erfasst ist, funktioniert die Way-ID nicht direkt — das Skript erwartet derzeit einen einzelnen geschlossenen Way.

Installation

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

Verwendung

python render_orchard.py <way_id> [--output map.png]
                                  [--width 4000] [--height 4000]
                                  [--padding 0.04] [--zoom N]
                                  [--scale 2]
                                  [--basemap osm|nrw-dop|nrw-vdop]
                                  [--cache-dir .tile_cache]
  • way_id — OSM-Way-ID der zu rendernden geschlossenen Fläche.
  • --output / -o — Pfad der Ausgabe-PNG (Standard: map.png).
  • --width / --heightMaximale Leinwandgröße in Pixeln. Die Leinwand wird automatisch auf die gepolsterte Bounding-Box beim gewählten Zoom zugeschnitten, sodass die Streuobstwiese das Bild ausfüllt.
  • --padding — Rand um die Bounding-Box als Bruchteil ihrer Größe (Standard: 0.04).
  • --zoom — erzwingt einen bestimmten OSM-Kachel-Zoom; standardmäßig wird der höchste Zoom gewählt, bei dem die Bounding-Box noch in die maximale Leinwand passt. Standard-OSM-Kacheln gehen maximal bis Zoom 19.
  • --scale — Supersampling-Faktor für schärfere Beschriftungen und Marker (Standard: 2). Die Kacheln werden per Lanczos hochskaliert, Text und Vektor-Overlays werden jedoch nativ in höherer Auflösung gezeichnet — Beschriftungen bleiben also scharf, obwohl OSM bei Zoom 19 endet. Mit --scale 1 erhältst du 1:1-Kachel-Pixel.
  • --basemap — Hintergrundkarte (Standard: osm):
    • osm — Standard-OpenStreetMap-Kacheln.
    • nrw-dop — NRW Digitale Orthophotos (Luftbild, validiert). Nur für Flächen in Nordrhein-Westfalen. Bei Aktivierung wird das Polygon ohne Füllung gezeichnet und Marker als gelbe Kreise ausgegeben, damit das Luftbild gut lesbar bleibt.
    • nrw-vdop — NRW Vorläufige Orthophotos (neueste, noch nicht validierte Bilddaten). Hinweis: vDOP-Abdeckung ist sehr lückenhaft. Liefert der Server für das Gebiet ein weißes Bild mit "vDOP"-Wasserzeichen statt eines Luftbilds, gibt es noch keine vDOP-Daten — nutze dann nrw-dop.
  • --cache-dir — Festplatten-Cache für Kacheln/Luftbilder (Standard: .tile_cache). Erneute Läufe sind dadurch schnell.

Beschriftungen

  • Der loc_name jedes Baums (typischerweise die interne Baumnummer der Streuobstwiese) wird rechts neben dem Marker dargestellt.
  • Hat der Baum zusätzlich ein ref-Tag, erscheint dieses links daneben in kleinerer Schrift.
  • Bäume mit nur ref (ohne loc_name) zeigen den ref-Wert allein.
  • Bäume ohne beide Tags werden als unbeschriftete Punkte gezeichnet.

Wenn du stattdessen den botanischen Namen anzeigen möchtest, kannst du tree_label() in render_orchard.py anpassen:

def tree_label(tags: dict) -> str | None:
    taxon = tags.get("taxon") or tags.get("species") or tags.get("genus")
    loc_name = tags.get("loc_name")
    if taxon and loc_name:
        return f"{taxon} #{loc_name}"
    return taxon or loc_name

Hinweise

  • Die Kacheln werden von tile.openstreetmap.org mit lokalem Festplatten-Cache geladen. Bitte halte dich an die OSM Tile Usage Policy — also keine Massenabrufe über viele Gebiete in engen Schleifen.
  • Kartendaten © OpenStreetMap-Mitwirkende.