Blackbox Euroairport

Der Streit rund um die Nachtflüge am Euroairport in Basel schwelt seit Jahren, die Fronten (Flughafen/Anwohner) sind klar, die Argumente teilweise zweifelhaft. So lässt sich der Flughafen nur ungern in die Karten blicken, etwa wenn es darum geht, welche Flüge / Fluggesellschaften besonders häufig spät (nach 23 Uhr) starten. Auch um die genauen Abflug-Routen herrscht Verwirrung – «die Flugzeuge könnten früher abbiegen und über unbesiedeltes Gebiet starten» behaupten Fluglärm-Gegner, das werde bereits gemacht, sagt der Flughafen. Zwei Streitpunkte, die ich mit datenjournalistischem Ansatz angehen konnte.

Streitpunkt 1: Welche Flüge und Fluglinien starten am häufigsten nach 23 Uhr?

Der Flughafen veröffentlicht auf dieser Seite die täglichen Abflugzeiten – und zwar die tatsächlichen, nicht, wann die Flugzeuge nach Flugplan starten oder das Dock verlassen. Die Daten werden jedoch nach sieben Tagen wieder gelöscht. Nicht jedoch für einen Scraper, der täglich darauf zugreift und die Daten in eine Datenbank schreibt. Diese liegen als Javascript-Variabel vor, und zwar folgendermassen:

var flights = {"00:00":[{"datetime":"2018-02-03 23:03:00","runway":15,"flight_pattern":"N","direction":"D","airline":"REGA","flight":"FR2","destination":"DIVERS CH","aircraft":"HELICO","mtow":3000,"noise_idx":"11.0","destination_fr":"DIVERS CH","destination_de":"DIVERS CH","destination_en":"DIVERS CH","hour_runway":"23_15","procedure":null,"time":"00:03"}],"06:00":[{"datetime":"2018-02-04 05:25:00","runway":33,"flight_pattern":"S","direction":"D","airline":"IBERIA","flight":"IB9048","destination":"MADRID","aircraft":"MODEL757\/200 WITH RB211C","mtow":99790,"noise_i [...]

Das Format entspricht JSON und kann mittels JSON-Decode in ein PHP-Array umgewandelt, analysiert und bereits mit perfekten Labels versehen in eine entsprechende Datenbank eingefügt werden. Und zwar so:

$starts = json_decode(substr($html,strpos($html,"var flights")+14,strpos($html,"var ul_width")-strpos($html,"var flights")-18), true);
 foreach($starts as $zeit=>$content){
 if($zeit == "22:00" || $zeit == "22:30" || $zeit == "23:00" || $zeit == "23:30" || $zeit == "00:00" || $zeit == "00:30" || $zeit == "01:00" || $zeit == "01:30" || $zeit == "02:00" || $zeit == "02:30" || $zeit == "03:00" || $zeit == "03:30" || $zeit == "04:00" || $zeit == "04:30" || $zeit == "05:00" || $zeit == "05:30"){
 foreach($content as $einzelnerflug){
 echo $einzelnerflug["time"]."|geplant ".$einzelnerflug["datetime"]." Flugdetails:".$einzelnerflug["airline"]."|".$einzelnerflug["destination"]."<br/>";
 $wpdb->insert('EAPstarts',$einzelnerflug);
 }
 }
 }

Um Dubletten zu vermeiden, habe ich die Spalte Datetime als Unique Key definiert. Und um das Script täglich aufzurufen, habe ich einen CRON-Job definiert:

Für die Auswertung habe ich auf Excel vertraut, indem ich folgende MYSQL-Abfrage gemacht und die Resultate als CSV-Datei exportiert habe:

SELECT * 
FROM `EAPstarts` 
WHERE TIME LIKE "%23:%"

Die Auswertung mittels PIVOT-Funktion geht schnell und zuverlässig und bietet genügend Funktionen, um alle interessanten Fragen zu beantworten (die Spalten 15 und 33 bezeichnen die Startrichtung).

Aufbereitet als Infografik
Aufbereitet als Infografik

Veröffentlicht als Text im Print und online.

Fragestellung zwei: Welche Route fliegen die Flugzeuge bei Süd-Starts?

Fluglärmgegner behaupten seit Jahren, dass die Flugzeuge bei Südstarts früher abdrehen könnten und dadurch unbesiedeltes statt besiedeltes Gebiet überfliegen. Die Materie ist sehr kompliziert, aber mittels Flightradar24.com ist es möglich, die Südstarts zu exportieren und in Google Maps darzustellen. Hierzu ist ein kostenpflichtiger Flightradar-Account nötig (oder zumindest eine 7-tätige Test-Version) und ziemlich viel Handarbeit nötig (wahrscheinlich lässt sich vieles automatisieren und ich weiss nicht, wie). So habe ich die manuelle Variante gemacht:

Zunächst habe ich auf der Abflug-Seite des Euroairports nach Südstarts gesucht, die entsprechende Flugnummer auf Flightradar24.com eingegeben und ein KML-File heruntergeladen. Wie dies geht, ist hier beschrieben. Das File habe ich danach in eine Google Map als Layer importiert; es werden gleichzeitig zwei Layer erstellt, eine mit Punkten (wieder gelöscht) und eine mit dem Linienverlauf. Leider ist die Anzahl Layer in Google Maps auf zehn limitiert, aber eine Idee der ungefähren Startrouten ist dennoch möglich. Zur schöneren Darstellung habe ich die uninteressanten Punkte (einzeln) gelöscht, Tipp: Delete-Taste gedrückt halten und linke Maustaste klicken. Danach habe ich den Layer in die Flugnummer inklusive Datum umbenannt.

Das Resultat:

Der zweite Streitpunkt betrifft die Flughöhe. Auch diese Daten sind in den KML-Files enthalten, zur Darstellung wird jedoch Google Earth verwendet. Entstanden ist folgendes Bild, wobei die grünen Linien normale Flüge und die roten Linien für Flüge stehen, die vom hinteren Pistenrand aus gestartet sind.

Starts vom Nordende der Piste (rote Linien) bringen Höhengewinne.

Entstanden daraus ist ein Faktencheck, auf den ich verweise, sobald er veröffentlicht wurde.

Autor: Samuel Hufschmid

Jounalist bei bz Basel, Papi, Organisator Swiss Kubb Open, mit Interesse an Datenjournalismus.

Kommentar verfassen