Projektziel: In FlightGear sieht der Boden ab Werk aus wie ein Flickenteppich aus wiederholten Texturen.
Ich wollte beim Anflug echte Felder, Dörfer und Straßen sehen, und zwar mit Bildern, die ich auch in Videos und im
Stream zeigen darf. Ein kleines Python-Skript holt dafür amtliche Luftbilder aus offenen Kartendiensten und baut daraus
Kacheln für den Simulator. Inzwischen sind es rund 12 GB, von Mitteldeutschland bis Spitzbergen.
Bild 1 - Aus rund 26 km Höhe: Felder, Wälder und Stauseen stammen aus amtlichen Luftbildern. Die Trennlinien rechts sind Grenzen zwischen Kacheln und Bundesländern
Wie FlightGear Luftbilder einbindet
FlightGear legt Luftbilder als einzelne Kacheln über die Landschaft, wenn die Einstellung
/sim/rendering/photoscenery/enabled an ist. Jede Kachel ist eine DDS-Datei im Ordner
Orthophotos und heißt so wie der FlightGear-Bucket, den sie abdeckt. Ein Bucket ist in unseren Breiten 0,25°
breit und 0,125° hoch, im hohen Norden wird er breiter. Das Skript berechnet die Buckets für ein Gebiet oder für einen
Streifen entlang einer Flugroute.
Die Bildquellen
Viele Länder bieten ihre Luftbilder als offene WMS-Dienste an: Man fragt einen Ausschnitt an und bekommt ein Bild
zurück, ohne Anmeldung. In Deutschland macht das jedes Bundesland selbst, deshalb stecken im Skript viele einzelne
Quellen:
| Region | Quelle | Schärfe bei mir |
| Deutschland (mehrere Bundesländer) | Landesvermessungsämter | etwa 2–4 m pro Pixel |
| Frankreich | IGN | etwa 2–4 m |
| Polen | GUGiK | etwa 2–4 m |
| Kennedy Space Center | USGS NAIP | etwa 3–6 m |
| Schottland, Spitzbergen, Lücken | EOX Sentinel-2 cloudless 2016 | 10 m |
Die Schärfe hängt von meiner Kachelgröße ab, die Quellen selbst sind oft genauer. Wichtig ist die Lizenz: Die meisten
Bilder sind frei, verlangen aber eine Quellenangabe. Bewusst nicht genutzt habe ich Esri, Google und Bing, weil deren
Bedingungen nicht zu massenhaftem Abruf und Videos passen, und die neueren EOX-Jahrgänge, die nur nicht-kommerziell
erlaubt sind. Ob eine Lizenz für den eigenen Zweck reicht, muss jeder selbst prüfen.
Vom WMS-Bild zur Kachel
Das Skript fragt die Dienste für jeden Bucket ab, setzt die Antworten zusammen und füllt Lücken mit Sentinel-2. Die
Umwandlung nach DDS übernimmt ImageMagick:
magick kachel.png -define dds:compression=dxt1 -define dds:mipmaps=14 1629601.dds
Fertige Kacheln überspringt das Skript, ein Abbruch verliert also nichts. Eine Kachel mit 8192 Pixeln braucht rund 45 MB.
Stolpersteine
- Weiß heißt nicht leer: Viele Dienste liefern außerhalb ihres Gebiets weiße Flächen. Wer Weiß einfach als leer behandelt, bekommt schwarze Flecken auf hellen Dächern.
- Grenzen der Dienste: Manche Server liefern nur bis 3000 Pixel, also muss das Skript stückeln. Über dem Meer antwortet NAIP mit einem Fehler statt mit einem leeren Bild.
- ImageMagick: Die Standardregeln begrenzen die Bildgröße, 16384 Pixel scheiterten.
- Größen nicht mischen: Am Flughafen setzt FlightGear die Kacheln zu einem Bild zusammen. 16000 Pixel neben 8192 Pixeln ergaben ein schwarzes Loch im Gelände, im Log stand
Failed to convert component of composite orthophoto. Mit 8192 und 4096 Pixeln trat es nicht auf.
- Grüne Seen: Wasserflächen bekommen kein Luftbild. Der Wasser-Shader nimmt die Farbe flacher Stellen aus einer groben Weltkarte, und dort sind kleine Seen offenbar noch Land. In
Effects/water-inland.eff hilft eine feste Wassertiefe: use_specified_water_shallowness auf 1 und water_shallowness auf 0,3.
- Bäume mitten auf dem Acker: Die Zufallsbäume von FlightGear wissen nichts vom Luftbild und stehen auf den Feldern. Ich habe sie abgeschaltet.
- Schnee: Das Wetter legte Schnee auf die Mittelgebirge, während das Luftbild Sommer zeigt. Dagegen hilft, die Schneegrenze hochzusetzen.
Die Erde aus dem All
Für das Space Shuttle zeigt FlightGear die Erde mit Earthview. Ab Werk hat das Modell nur 2048 Pixel pro Kachel, grob
5 km pro Pixel, und Städte werden nachts zu Klötzchen. Die NASA stellt beides viel schärfer frei zur Verfügung: Blue Marble
für den Tag und Black Marble für die Stadtlichter. Mein Skript rechnet sie zu 16.384 Pixeln pro Kachel zusammen, die acht
Kacheln brauchen rund 2,7 GB.
Bild 2 - Mitteleuropa bei Nacht aus rund 400 km Höhe. Quelle der Lichter: NASA Black Marble 2016
Bild 3 - Das Shuttle über Arabien. Quelle der Erde: NASA Blue Marble Next Generation
Dabei gab es vier Stolpersteine:
- Stadtlichter im Alphakanal: Der Shader rechnet
night_light = 1 - alpha. Black Marble zeigt auch das Land schwach, darum zählen erst hellere Werte als Licht.
- Gespiegelte Erde: DDS liegt anders herum als PNG. Ungespiegelt lag die Arktis am Äquator.
- Furchen im Meer: Die NASA-Fassung mit Topografie und Bathymetrie zeigt den Meeresboden. Die Fassung ohne Relief hat einheitliches Wasser.
- Bildgröße: ImageMagick schafft 16.384 Pixel nicht am Stück. DXT5 komprimiert aber jeden Block aus 4 × 4 Pixeln für sich, also lassen sich Streifen einzeln umwandeln und aneinanderhängen. Die Mipmaps kommen aus einer halb so großen Fassung.
Was es noch nicht löst
An Grenzen zwischen zwei Ländern ändern sich oft Farbe und Jahreszeit, weil jede Behörde eigene Aufnahmen hat. Aus großer
Höhe sieht man diese Kanten deutlich. Am Horizont endet die geladene Landschaft außerdem als harte Kante. Die Umrisse von
Seen und Lagunen stammen weiter aus der FlightGear-Landschaft, sie sind eckig und passen nicht immer zum Luftbild.
Fazit
Der Aufwand steckt weniger im Skript als im Suchen der Quellen und im Lesen der Lizenzen. Dafür ist der Unterschied im
Anflug enorm: Man erkennt echte Orte, Flüsse und Autobahnen wieder.
Quellen und Download
Die Luftbilder kommen aus diesen WMS-Diensten. Der Link zeigt jeweils die Beschreibung des Dienstes mit Ebenen, Gebiet und
Bedingungen. Dahinter steht die Quellenangabe, die ich verwende.
- Thüringen: WMS-Dienst, Ebene
th_dop. © GDI-Th, CC BY 4.0
- Niedersachsen: WMS-Dienst, Ebene
ni_dop20. LGLN, CC BY 4.0
- Nordrhein-Westfalen: WMS-Dienst, Ebene
nw_dop_rgb. Geobasis NRW
- Sachsen-Anhalt: WMS-Dienst, Ebene
lsa_lvermgeo_dop20_2. © GeoBasis-DE / LVermGeo ST, dl-de/by-2-0
- Sachsen: WMS-Dienst, Ebene
sn_dop_020. Geodaten Sachsen (GeoSN), dl-de/by-2-0
- Brandenburg: WMS-Dienst, Ebene
bebb_dop20c. © GeoBasis-DE/LGB, dl-de/by-2-0 (Daten geändert)
- Hessen: WMS-Dienst, Ebene
he_dop_rgb. Hessische Verwaltung für Bodenmanagement und Geoinformation (HVBG)
- Rheinland-Pfalz: WMS-Dienst, Ebene
rp_dop20. ©GeoBasis-DE / LVermGeoRP (2026), dl-de/by-2-0, www.lvermgeo.rlp.de [Daten bearbeitet]
- Saarland: WMS-Dienst, Ebene
sl_dop20_rgb. Geoportal Saarland
- Frankreich: WMS-Dienst, Ebene
HR.ORTHOIMAGERY.ORTHOPHOTOS. BD ORTHO®, IGN, Licence Ouverte 2.0
- Polen: WMS-Dienst, Ebene
Raster. Główny Urząd Geodezji i Kartografii, geoportal.gov.pl
- Kennedy Space Center: WMS-Dienst, Ebene
USGSNAIPPlus. USDA NAIP über USGS The National Map
- Schottland, Spitzbergen, Lücken: WMS-Dienst, Ebene
s2cloudless. EOxCloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 & 2017), CC BY 4.0
Die NASA-Bilder gibt es als Einzeldateien zum Herunterladen, Quelle jeweils NASA Earth Observatory: