{"id":23177,"date":"2026-04-21T04:36:14","date_gmt":"2026-04-21T02:36:14","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=23177"},"modified":"2026-04-20T18:36:30","modified_gmt":"2026-04-20T16:36:30","slug":"kml-export-globale-flugzeugdaten-speichern-und-auswerten","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=23177","title":{"rendered":"KML-Export: Globale Flugzeugdaten speichern und auswerten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2026\/04\/flug-monitor-2.0.1.png\" alt=\"Flugzeugdaten\" width=\"1218\" height=\"1804\" \/><\/p>\n<p>Mit dem neuen Button &#8222;KML Export&#8220; in der FlugMonitor-Anwendung lassen sich die <strong>Echtzeit-Daten<\/strong> aller aktuell von OpenSky erfassten Flugzeuge weltweit in eine KML-Datei exportieren. KML steht f\u00fcr &#8222;Keyhole Markup Language&#8220; \u2013 ein XML-basiertes Dateiformat, das von <strong>Google Earth<\/strong>, Google Maps, QGIS und vielen anderen Kartenprogrammen direkt ge\u00f6ffnet werden kann. Hier mal eine Ansicht in Google Earth:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2026\/04\/google-earth-flug-scaled.jpeg\" alt=\"\" width=\"2560\" height=\"1776\" \/><\/p>\n<p>Der KML-Export erg\u00e4nzt den FlugMonitor um eine leistungsf\u00e4hige Archiv- und Analysefunktion. Aus den 17 Feldern eines einzelnen StateVectors l\u00e4sst sich ein vollst\u00e4ndiges Lagebild jedes Flugzeugs rekonstruieren: wo es ist, in welche Richtung es fliegt, wie schnell, wie hoch, wem es geh\u00f6rt und wie verl\u00e4sslich die Daten sind. Multipliziert mit tausenden Flugzeugen gleichzeitig entsteht ein pr\u00e4ziser Schnappschuss des globalen Luftverkehrs \u2013 zu jedem beliebigen Zeitpunkt.<\/p>\n<p><!--more--><br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nWas passiert beim Klick auf &#8222;KML Export&#8220;?<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>1. Es \u00f6ffnet sich ein nativer Datei-Speichern-Dialog des Betriebssystems.<\/p>\n<p>2. Als Dateiname ist automatisch ein Zeitstempel vorausgef\u00fcllt,<br \/>\n   zum Beispiel: flugdaten_20260419_063345.kml<\/p>\n<p>3. Nach Best\u00e4tigung holt die Anwendung im Hintergrund (SwingWorker)<br \/>\n   die aktuellen Flugdaten frisch von der OpenSky-API ab:<\/p>\n<pre class=\"lang:java decode:true \" >       OpenSkyStates os = OpenSkyApi.getOpenSkyApiInstance().getStates(0, null);\r\n       Collection&lt;StateVector&gt; states = os.getStates();<\/pre>\n<p>4. Die Rohdaten werden \u00fcber die Funktion Kml.formatStateVectorToKml(states)<br \/>\n   in g\u00fcltiges KML-Format umgewandelt.<\/p>\n<p>5. Die erzeugte KML-Datei wird UTF-8-kodiert auf dem gew\u00e4hlten Pfad<br \/>\n   gespeichert. Eine Erfolgsmeldung mit dem vollst\u00e4ndigen Dateipfad<br \/>\n   best\u00e4tigt den Abschluss.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nWelche Daten enth\u00e4lt ein StateVector \u2013 und was bedeuten sie?<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>Jedes einzelne Flugzeug liefert beim Abruf einen sogenannten <strong>StateVector<\/strong> \u2013<br \/>\neinen Datensatz, der den aktuellen Zustand der Maschine zu einem bestimmten<br \/>\nZeitpunkt vollst\u00e4ndig beschreibt. Ein konkretes Beispiel:<\/p>\n<p>    StateVector{<br \/>\n        geoAltitude        = 8313.42,<br \/>\n        longitude          = 15.6949,<br \/>\n        latitude           = 41.3496,<br \/>\n        velocity           = 198.89,<br \/>\n        heading            = 306.69,<br \/>\n        verticalRate       = 8.78,<br \/>\n        icao24             = &#8217;39de4f&#8216;,<br \/>\n        callsign           = &#8218;TVF38EG&#8216;,<br \/>\n        onGround           = false,<br \/>\n        lastContact        = 1.776685361E9,<br \/>\n        lastPositionUpdate = 1.776685361E9,<br \/>\n        originCountry      = &#8218;France&#8216;,<br \/>\n        squawk             = &#8217;null&#8216;,<br \/>\n        spi                = false,<br \/>\n        baroAltitude       = 8161.02,<br \/>\n        positionSource     = ADS_B,<br \/>\n        serials            = null<br \/>\n    }<\/p>\n<p>Das sind die konkreten Felder im Einzelnen:<\/p>\n<p><strong>icao24 = &#8217;39de4f&#8216;<\/strong><\/p>\n<p>Der ICAO24-Transpondercode ist die weltweite, unver\u00e4nderliche Kennung eines Luftfahrzeugs \u2013 vergleichbar mit einem Fahrzeugkennzeichen, nur dass er niemals wechselt. Er besteht aus sechs Hexadezimalzeichen (also Ziffern 0\u20139 und Buchstaben A\u2013F). Anhand dieses Codes l\u00e4sst sich jedes Flugzeug eindeutig identifizieren und seine gesamte Flughistorie in Datenbanken nachverfolgen.<\/p>\n<p>Im Beispiel: 39de4f &#8211; ein franz\u00f6sisch registriertes Flugzeug (Kennung beginnt mit 39, typisch f\u00fcr Frankreich).<\/p>\n<p><strong><br \/>\ncallsign = &#8218;TVF38EG&#8216;<\/strong><\/p>\n<p>Das Rufzeichen (englisch: Callsign) ist die Kennung, die der Pilot im Funkverkehr mit der Flugsicherung verwendet. Bei Linienfl\u00fcgen entspricht es meist dem IATA\/ICAO-Airline-Code plus der Flugnummer. TVF steht f\u00fcr Transavia France, 38EG ist die interne Flugnummer.<\/p>\n<p>Das Rufzeichen kann sich je nach Flug \u00e4ndern \u2013 im Gegensatz zum ICAO24-Code.<\/p>\n<p><strong>latitude = 41.3496 \/ longitude = 15.6949<\/strong><\/p>\n<p>Die geografische Position des Flugzeugs in dezimalen Breitengraden (latitude, Nord-S\u00fcd) und L\u00e4ngengraden (longitude, Ost-West).<\/p>\n<p>Im Beispiel: 41.35\u00b0N \/ 15.69\u00b0E \u2013 das entspricht dem Luftraum \u00fcber S\u00fcditalien, ungef\u00e4hr auf H\u00f6he der Region Kampanien\/Apulien.<\/p>\n<p>Diese Koordinaten sind das Herzst\u00fcck des KML-Exports: In Google Earth erscheint das Flugzeug genau an dieser Position auf der Weltkarte.<\/p>\n<p><strong>geoAltitude = 8313.42 (Meter)<\/strong><\/p>\n<p>Die geod\u00e4tische H\u00f6he \u2013 also die H\u00f6he \u00fcber dem Meeresspiegel \u2013 berechnet aus GPS-Satellitensignalen. Sie wird in Metern angegeben. 8313 Meter entsprechen in der Luftfahrtsprache ungef\u00e4hr FL270 (Flugfl\u00e4che 270 = 27.000 Fu\u00df). Das ist ein typischer Steigflug auf dem Weg zur Reiseflugh\u00f6he. Der genaue Unterschied zur barometrischen H\u00f6he (s. u.) entsteht durch Luftdruckschwankungen.<\/p>\n<p><strong>baroAltitude = 8161.02 (Meter)<\/strong><\/p>\n<p>Die barometrische H\u00f6he wird vom Flugzeug selbst \u00fcber einen Druckmesser (Barometer) berechnet und per Transponder gesendet. In der zivilen Luftfahrt ist diese Angabe die verbindliche H\u00f6henreferenz f\u00fcr die Flugsicherung, da alle Flugzeuge denselben Referenzluftdruck (1013,25 hPa, sogenannter QNH-Standard) verwenden \u2013 so wird sichergestellt, dass alle Maschinen auf gleicher Basis staffeln.<\/p>\n<p>Die Differenz von ca. 152 Metern zum GPS-Wert (geoAltitude) ist normal und entsteht durch aktuelle Luftdruckabweichungen.<\/p>\n<p><strong>velocity = 198.89 (Meter pro Sekunde)<\/strong><\/p>\n<p>Die Geschwindigkeit \u00fcber Grund (Ground Speed) in m\/s. 198,89 m\/s entsprechen umgerechnet ca. 716 km\/h \u2013 eine typische Geschwindigkeit im Steigflug. Im Reiseflug liegen Kurzstreckenflugzeuge meist bei 800\u2013880 km\/h.<\/p>\n<p>Hinweis: Dies ist nicht die Eigengeschwindigkeit (True Airspeed), sondern die tats\u00e4chliche Bewegung \u00fcber den Erdboden, beeinflusst durch Wind.<\/p>\n<p><strong>heading = 306.69 (Grad)<\/strong><\/p>\n<p>Der Kurs des Flugzeugs in Grad, gemessen im Uhrzeigersinn von Norden. 0\u00b0 = Norden, 90\u00b0 = Osten, 180\u00b0 = S\u00fcden, 270\u00b0 = Westen.<br \/>\n306,69\u00b0 entspricht ungef\u00e4hr Nordwest \u2013 das Flugzeug fliegt also von S\u00fcditalien in Richtung Nordwesteuropa (Frankreich \/ Iberische Halbinsel), was f\u00fcr einen Transavia-R\u00fcckflug nach Paris plausibel ist.<\/p>\n<p><strong>verticalRate = 8.78 (Meter pro Sekunde)<\/strong><\/p>\n<p>Die Steig- oder Sinkrate. Ein positiver Wert bedeutet Steigen, ein negativer Wert bedeutet Sinken.<br \/>\n8,78 m\/s aufw\u00e4rts entsprechen ca. 1.730 Fu\u00df\/Minute \u2013 eine moderate Steigrate, typisch f\u00fcr einen Mittelstreckenjet im oberen Steigflug.<\/p>\n<p><strong>onGround = false<\/strong><\/p>\n<p>Ein einfacher Ja\/Nein-Wert: Ist das Flugzeug gerade am Boden? Wird true, wenn der Transponder meldet, dass das Fahrwerk belastet ist (Weight-on-Wheels-Signal). Im FlugMonitor dient dieses Flag dazu, Flugzeuge der Kategorie &#8222;Parken&#8220; zuzuordnen.<\/p>\n<p><strong><br \/>\noriginCountry = &#8218;France&#8216;<\/strong><\/p>\n<p>Das Herkunftsland des Transpondercodes, abgeleitet aus dem ICAO24-Code. Es gibt Aufschluss dar\u00fcber, wo das Flugzeug registriert ist \u2013 nicht notwendigerweise, woher der aktuelle Flug kommt.<\/p>\n<p><strong><br \/>\nsquawk = &#8217;null&#8216;<\/strong><\/p>\n<p>Der Squawk-Code ist ein vierstelliger oktaler Code (0000\u20137777), den der Pilot auf Anweisung der Flugsicherung einstellt. Er dient der Identifikation auf dem Radar der Flugsicherung. Bestimmte Codes haben Sonderbedeutung: <strong>7500 = Entf\u00fchrung, 7600 = Funkkontaktausfall, 7700 = Notsituation<\/strong>.<\/p>\n<p>&#8222;null&#8220; bedeutet, dass kein spezifischer Code gesetzt ist.<\/p>\n<p><strong>spi = false<\/strong><\/p>\n<p>SPI steht f\u00fcr &#8222;Special Position Identifier&#8220;. Der Pilot kann diesen Schalter dr\u00fccken, um dem Radarbild einen kurzen Impuls zu geben \u2013 zum Beispiel auf Anforderung der Flugsicherung zur eindeutigen Identifikation. false bedeutet, der Schalter ist nicht aktiviert.<\/p>\n<p><strong>lastContact = 1.776685361E9 (Unix-Timestamp)<\/strong><\/p>\n<p>Der Zeitstempel des letzten empfangenen Signals, ausgedr\u00fcckt als Unix-Zeitstempel (Sekunden seit dem 01.01.1970 00:00:00 UTC).<br \/>\n1.776685361E9 entspricht dem Zeitpunkt des Abrufs in diesem Beispiel.<br \/>\nOpenSky erfasst Flugzeuge auch dann noch, wenn der Funkkontakt kurz unterbrochen war \u2013 lastContact gibt an, wann zuletzt ein Signal ankam.<\/p>\n<p><strong>lastPositionUpdate = 1.776685361E9<\/strong><\/p>\n<p>\u00c4hnlich wie lastContact, aber spezifisch f\u00fcr das letzte Update der Positionsdaten (Latitude\/Longitude). In manchen F\u00e4llen k\u00f6nnen andere Daten (z. B. Geschwindigkeit) h\u00e4ufiger aktualisiert werden als die Positionsangabe.<\/p>\n<p><strong>positionSource = ADS_B<\/strong><\/p>\n<p>Woher stammt die Positionsinformation? M\u00f6gliche Werte:<\/p>\n<p>  ADS_B   \u2013 direkt vom Flugzeug ausgestrahlt (modernste Methode, GPS-basiert, sehr pr\u00e4zise)<br \/>\n  MLAT    \u2013 Multilateration: die Position wird aus der Laufzeit-differenz mehrerer Bodenstationen berechnet<br \/>\n  FLARM   \u2013 Kurzstreckensystem f\u00fcr Kleinflugzeuge\/Segelflugzeuge<\/p>\n<p>ADS_B ist der Goldstandard: Das Flugzeug berechnet seine Position selbst per GPS und sendet sie aktiv aus \u2013 kein Radar n\u00f6tig.<\/p>\n<p><strong>serials = null<\/strong><\/p>\n<p>Seriennummern von Empfangsstationen, die das Signal erfasst haben. null bedeutet, diese Information wird in der aktuellen API-Antwort nicht mitgeliefert oder ist nicht verf\u00fcgbar.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\nAnwendungsm\u00f6glichkeiten der KML-Datei<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>Die exportierte KML-Datei kann in zahlreichen Programmen ge\u00f6ffnet<br \/>\nund weiterverarbeitet werden:<\/p>\n<p><strong>Google Earth<\/strong>: Alle Flugzeuge erscheinen als Punkte auf der 3D-Weltkarte.<br \/>\nMit geoAltitude werden sie in der richtigen Flugh\u00f6he dargestellt \u2013 man sieht buchst\u00e4blich, wo in der Atmosph\u00e4re jede Maschine fliegt.<\/p>\n<p>Google Maps \/ Maps-Import: KML-Dateien k\u00f6nnen als eigene Ebene importiert werden \u2013 f\u00fcr einfache 2D-Kartendarstellungen.<\/p>\n<p>QGIS \/ ArcGIS: Professionelle GIS-Software kann KML importieren und Analysen durchf\u00fchren \u2013 z. B. Verkehrsdichte \u00fcber bestimmten Regionen, H\u00f6henverteilungen auf Flugkorridoren, oder Vergleiche zu verschiedenen Tageszeiten.<\/p>\n<p>Zeitvergleiche: Durch den Zeitstempel im Dateinamen lassen sich Snapshots aus verschiedenen Momenten vergleichen \u2013 morgens vs. abends, Werktag vs. Wochenende, Sommer vs. Winter.<\/p>\n<p>Flugkorridor-Analyse: Mit den Heading- und Positionsdaten lassen sich<br \/>\nbevorzugte Flugrouten \u00fcber Europa oder dem Atlantik sichtbar machen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit dem neuen Button &#8222;KML Export&#8220; in der FlugMonitor-Anwendung lassen sich die Echtzeit-Daten aller aktuell von OpenSky erfassten Flugzeuge weltweit in eine KML-Datei exportieren. KML steht f\u00fcr &#8222;Keyhole Markup Language&#8220; \u2013 ein XML-basiertes Dateiformat, das von Google Earth, Google Maps, QGIS und vielen anderen Kartenprogrammen direkt ge\u00f6ffnet werden kann. Hier mal eine Ansicht in Google &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=23177\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eKML-Export: Globale Flugzeugdaten speichern und auswerten\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,5,4931,79],"tags":[1752,584,1805,528,178],"class_list":["post-23177","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-java","category-planespotting","category-programmierung","tag-export","tag-flug","tag-flugdaten","tag-kml","tag-speichern"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/23177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=23177"}],"version-history":[{"count":5,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/23177\/revisions"}],"predecessor-version":[{"id":23179,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/23177\/revisions\/23179"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=23177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=23177"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=23177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}