{"id":23160,"date":"2026-04-17T15:09:18","date_gmt":"2026-04-17T13:09:18","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=23160"},"modified":"2026-04-17T15:09:18","modified_gmt":"2026-04-17T13:09:18","slug":"fuenfter-streiktag-in-folge-bei-der-lufthansa-in-welcher-hoehe-fliegen-10100-flugzeuge","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=23160","title":{"rendered":"F\u00fcnfter Streiktag in Folge bei der Lufthansa: In welcher H\u00f6he fliegen 10100 Flugzeuge?"},"content":{"rendered":"<p>In welcher H\u00f6he fliegen Flugzeuge?<\/p>\n<p>Vor <a href=\"http:\/\/blog.wenzlaff.de\/?p=8198\" target=\"_blank\">9 Jahren<\/a> hat mich die Frage interessiert, in welcher H\u00f6he eigentlich die meisten Flugzeuge unterwegs sind.  <\/p>\n<p>Statt mich nur auf vorhandene Tabellen zu verlassen, habe ich ein kleines Java\u2011Programm geschrieben, das in Echtzeit die Daten von T<strong>he OpenSky Network <\/strong>abfragt. Es ber\u00fccksichtigt also alle Flugzeuge mit Transponder, die von diesem Netzwerk erfasst werden \u2013 also eine repr\u00e4sentative, wenn auch nicht vollst\u00e4ndige Stichprobe des zivilen Luftverkehrs.  <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2022\/12\/flughaven-tw-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\"  \/><\/p>\n<p>Die hier gezeigten Ergebnisse basieren auf einem Snapshot von <strong>10100 Flugzeugen<\/strong>. Die Daten sagen nichts \u00fcber Milit\u00e4rflugzeuge oder sehr spezielle Sonderfl\u00fcge aus, geben aber einen guten Einblick in den typischen zivilen Reiseflugh\u00f6henbereich.  <\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \" >Flugbereich in Meter ; Flugh\u00f6he in Meter \r\n\r\nParken 0    ; 1075\r\n   1-500    ; 824\r\n 500-1000   ; 820\r\n1000-2000   ; 902\r\n2000-3000   ; 594\r\n3000-4000   ; 318\r\n4000-5000   ; 281\r\n5000-6000   ; 266\r\n6000-7000   ; 260\r\n7000-8000   ; 344\r\n8000-9000   ; 343\r\n9000-10000  ; 596\r\n10000-10500 ; 452\r\n10500-11000 ; 821\r\n11000-11500 ; 958\r\n11500-12000 ; 725\r\n12000-13000 ; 429\r\n\u00fcber 13000  ; 92\r\nSummme      ; 10100\r\n\r\nZeitpunkt   ; Fri Apr 17 14:47:08 CEST 2026\r\nQuelle      ; The OpenSky Network, http:\/\/www.opensky-network.org<\/pre>\n<p><!--more--><\/p>\n<p><strong>Typische Flugh\u00f6hen im zivilen Luftverkehr<\/strong><\/p>\n<p>Fachliche \u00dcbersichten und Betriebsdaten zeigen, dass kommerzielle Verkehrsflugzeuge sich im Reiseflug meist zwischen 9.000 und 12.000 Metern \u00fcber dem Meeresspiegel bewegen. Das entspricht etwa 30.000 bis 40.000 Fu\u00df, ein Bereich, in dem sich Treibstoffeffizienz, Luftwiderstand, Motoreffizienz und Sicherheitsanforderungen gut ausbalancieren.<\/p>\n<p>Langstreckenjets wie A350 oder Boeing 787 nutzen oft h\u00f6here Reisefl\u00fcge (bei voller Ladung gerne bis knapp 13.000 m), w\u00e4hrend Kurzstreckenjets wie A320 oder B737 eher im Bereich von 31.000\u201338.000 Fu\u00df operieren. Businessjets und \u00e4hnliche Spezialflugzeuge k\u00f6nnen noch h\u00f6her steigen, bis in die Region von 15.000\u201316.000 Metern, was aber nur einen kleinen Teil der Gesamtflugzeuge im Luftraum ausmacht.<br \/>\n<strong><br \/>\nTechnische Umsetzung: Java + OpenSky API<\/strong><\/p>\n<p>Da die API vor ein paar Wochen auf API-Keys umgestellt wurde, wird jetzt eine credentials.json Datei eingelesen. Die muss zuvor auf der Webseite im Userbereich erzeugt werden. Dann wird sie wie folgt eingelesen:<\/p>\n<pre class=\"lang:java decode:true \" >\r\n\r\nprivate void getData() throws IOException {\r\n\tObjectMapper mapper = new ObjectMapper();\r\n\tJsonNode root = mapper.readTree(Path.of(\"credentials.json\").toFile());\r\n\r\n\tString clientId = root.get(\"clientId\").asText();\r\n\tString clientSecret = root.get(\"clientSecret\").asText();\r\n\r\n\tOpenSkyApi api = new OpenSkyApi(clientId, clientSecret);\r\n\tOpenSkyStates states = api.getStates(0, null);\r\n\r\n\tCollection&lt;StateVector&gt; stateVector = states.getStates();\r\n\r\n\tFlugAltitude.printFlugHoehen(stateVector);\r\n    }<\/pre>\n<p>Das von mir eingesetzte Java\u2011Programm nutzt die OpenSky Network API, um aktuelle Flugdaten in Echtzeit zu beziehen.<br \/>\nDer Kern ist ein einfacher REST\u2011Client, der periodisch die Flugzeugpositionen, H\u00f6hen und Flugnummern abfragt und die H\u00f6hen in Meter bzw. Fu\u00df aggregiert.<\/p>\n<p>Da der Java-Client nicht mehr weiterentwickelt wird, musste ich die OpenSkyApi Methode getResponse wie folgt anpassen:<\/p>\n<pre class=\"lang:java decode:true \" > \/**\r\n     * Make the actual HTTP Request and return the parsed response\r\n     *\r\n     * @param baseUri base uri to request\r\n     * @param nvps    name value pairs to be sent as query parameters\r\n     * @return parsed states\r\n     * @throws IOException if there was an HTTP error\r\n     *\/\r\n    private OpenSkyStates getResponse(String baseUri, Collection&lt;AbstractMap.Entry&lt;String, String&gt;&gt; nvps)\r\n\t    throws IOException {\r\n\tHttpUrl parsedUrl = HttpUrl.parse(baseUri);\r\n\tif (parsedUrl == null) {\r\n\t    throw new MalformedURLException(\"Could not parse uri \" + baseUri);\r\n\t}\r\n\r\n\tHttpUrl.Builder urlBuilder = parsedUrl.newBuilder();\r\n\tfor (AbstractMap.Entry&lt;String, String&gt; nvp : nvps) {\r\n\t    urlBuilder.addQueryParameter(nvp.getKey(), nvp.getValue());\r\n\t}\r\n\tRequest req = new Request.Builder().url(urlBuilder.build()).build();\r\n\r\n\tResponse response = okHttpClient.newCall(req).execute();\r\n\tif (!response.isSuccessful()) {\r\n\t    throw new IOException(\"Could not get OpenSky Vectors, response \" + response);\r\n\t}\r\n\r\n\t\/\/ Default: UTF-8, falls kein charset angegeben ist\r\n\tCharset charset = StandardCharsets.UTF_8;\r\n\r\n\tString contentType = response.header(\"Content-Type\");\r\n\tif (contentType != null) {\r\n\t    MediaType mediaType = MediaType.parse(contentType);\r\n\t    if (mediaType != null) {\r\n\t\tCharset detected = mediaType.charset();\r\n\t\tif (detected != null) {\r\n\t\t    charset = detected;\r\n\t\t}\r\n\t    }\r\n\t}\r\n\r\n\treturn mapper.readValue(new InputStreamReader(response.body().byteStream(), charset), OpenSkyStates.class);\r\n    }\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>In welcher H\u00f6he fliegen Flugzeuge? Vor 9 Jahren hat mich die Frage interessiert, in welcher H\u00f6he eigentlich die meisten Flugzeuge unterwegs sind. Statt mich nur auf vorhandene Tabellen zu verlassen, habe ich ein kleines Java\u2011Programm geschrieben, das in Echtzeit die Daten von The OpenSky Network abfragt. Es ber\u00fccksichtigt also alle Flugzeuge mit Transponder, die von &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=23160\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eF\u00fcnfter Streiktag in Folge bei der Lufthansa: In welcher H\u00f6he fliegen 10100 Flugzeuge?\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":[3083,5,3897,79],"tags":[2838,3055,6298,1964],"class_list":["post-23160","post","type-post","status-publish","format-standard","hentry","category-information","category-java","category-java-programmierung","category-programmierung","tag-flughoehe","tag-hoehe","tag-lufthansa","tag-streik"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/23160","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=23160"}],"version-history":[{"count":3,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/23160\/revisions"}],"predecessor-version":[{"id":23163,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/23160\/revisions\/23163"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=23160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=23160"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=23160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}