Wie können alle Flugzeuge im Umkreis von 20 km ermittelt werden?

Währe es nicht schön, wenn man auf einem Display (eines Raspberry Pi oä.), ähnlich wie am Flughafen alle Flugzeuge die in der Nähe sind, angezeigt bekommt. Dazu müsste erst ermittelt werden, welch Flugzeuge im Umkreis (Rechteck) vom Flughafen Hannover (oder jeder andere Ort) von ca. 20 km in der Luft und am Boden sind.

Die Daten können wir dann per Java/REST-Api von opensky-network.org kostenlos und ohne Anmeldung (Limitiations for anonymous (unauthenticated) users) abfragen. Dann werden die Daten alle 10 Sekunden aktuallisiert, und es sind max. 400 Aufrufe am Tag möglich. Mit Anmeldung (Limitations for OpenSky users) werden die Daten alle 5 Sekunden erneuert und es sind 4000 Aufrufe per Tag möglich. Bei einer Abfrage pro Minute haben wir 1440 Aufrufe pro Tag. Ohne Anmeldung könnten wir dann ca. alle 5 Minuten abfragen. Es geht für die Entwicklung/Test also auch erstmal ohne Anmeldung.

Zuerst müssen wir die Koordinaten ermitteln.Ein rechteckiger Bereich von 40 km rund um den Flughafen bedeutet, dass die Ausdehnung in jede Himmelsrichtung (Norden, Süden, Osten und Westen) 20 km beträgt. Um diesen Bereich zu berechnen, müssen wir die geografischen Koordinaten des Flughafens um diese Distanz erweitern. In diesem Bereich um den Flughafen (EDDV, HAJ) wollen wir alle Flugzeuge ermitteln, hier habe ich das Quadrat mal eingezeichnet.

Da der Abstand in Längengrad und Breitengrad abhängig von der geografischen Position ist, müssen wir den Längengrad und Breitengrad entsprechend umrechnen.

1 Breitengrad (Latitude) ≈ 111 km
1 Längengrad ≈ 111 km × cos(Breitengrad Hannover Flughafen) // also ergebnis = km * math.cos(math.radians(Breitengrad HAJ))

Für den Flughafen Hannover-Langenhagen (Breitengrad: 52.4611°) ergibt sich:

1 Längengrad ≈ 111 km × cos(52.4611°) ≈ 67,7 km

Die 20 km in jede Richtung sind:

Breitengrad (Latitude): 20 km / 111 km ≈ 0.18018°
Längengrad (Longitude): 20 km / 67.7 km ≈ 0.29548°

Berechnung der Ecken des Rechtecks:
Nordwest (NW):
Breitengrad: 52.4611 + 0.18018 = 52.64128
Längengrad: 9.6947 – 0.29548 = 9.39922
Nordost (NE):
Breitengrad: 52.64128
Längengrad: 9.6947 + 0.29548 = 9.99018
Südwest (SW):
Breitengrad: 52.4611 – 0.18018 = 52.28092
Längengrad: 9.39922
Südost (SE):
Breitengrad: 52.28092
Längengrad: 9.99018

Zusammenfassung der Ecken:
Nordwest: 52.64128, 9.39922
Nordost: 52.64128, 9.99018
Südwest: 52.28092, 9.39922
Südost: 52.28092, 9.99018

Die Dezimalwerte für die Grenzen des Rechtecks rund um den Flughafen Hannover-Langenhagen sind:

minLat: 52.2809
maxLat: 52.6413
minLon: 9.3992
maxLon: 9.9902

Diese Werte geben den minimalen und maximalen Breitengrad (Latitude) sowie den minimalen und maximalen Längengrad (Longitude) des rechteckigen Bereichs an. Jetzt brauchen wir noch ein Java-Programm, das die Abfrage mit den oben ermittelten Werten in der BoundingBox macht:

In Eclipse, würde das Ergebnis dann z.B. so aussehen, mit 3 Flugzeugen, zwei sind gerade gelandet und eins ist noch in der Luft:

1. PGT7Z Höhe: 1387 m aus Turkey SQUAWK: 7633 ICAO24: 4bc850
2. DMGSH Höhe: m aus Germany SQUAWK: 7000 ICAO24: 3fed70
3. CXI3SH Höhe: 0 m aus Malta SQUAWK: null ICAO24: 4d2278

oder es wird nur eins empfangen

1. CXI3SH Höhe: 1204 m aus Malta SQUAWK: 7612 ICAO24: 4d2278

alle anderen sind nicht in dem Bereich, wie das Bild zeigt:

Wer ein Python Programm dafür braucht, kann diese fluginfo.py erstellen:

Dafür muss, wie hier beschrieben einmalig die Lib installiert werden. Also einmal sudo python setup.py install ausführen, nachdem das Projekt mit

git clone https://github.com/openskynetwork/opensky-api.git

geholt wurde. Start dann mit python3 fluginfo.py

Ergebnis z.B.:
(‚THY26J ‚, None, ‚Turkey‘, ‚1000‘)
(‚CHX4 ‚, 129.54, ‚Germany‘, ‚4473‘)

Die Keys für die Ausgabe, sind dann etwas anders als für Java:

Auf meinem Mac kommt noch eine Warnung:

wie hier beschrieben.

Wie das nun noch auf einem Raspberry Pi auf einem Display ausgegeben werden kann, kommt in einem anderen Beitrag. Hatte ich schon mal vor 7 Jahren auf einem Arduino oder auch auf eine Pi mit OLED.