{"id":13155,"date":"2019-05-19T16:55:14","date_gmt":"2019-05-19T14:55:14","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=13155"},"modified":"2019-07-15T20:34:10","modified_gmt":"2019-07-15T18:34:10","slug":"wie-kann-mit-java-die-anzahl-der-flugzeuge-in-der-jeweiligen-hoehe-weltweit-in-real-time-ermittelt-und-mit-openstreetmap-via-umap-visualisiert-werden","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=13155","title":{"rendered":"Wie kann mit Java die Anzahl der Flugzeuge in der jeweiligen H\u00f6he weltweit in real time ermittelt und mit OpenStreetMap via uMap visualisiert werden?"},"content":{"rendered":"<p>Wie vor zwei Jahren <a href=\"http:\/\/blog.wenzlaff.de\/?p=8176\" rel=\"noopener noreferrer\" target=\"_blank\">hier<\/a> schon mal beschrieben hat sich nicht viel ge\u00e4ndert.<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/05\/Bildschirmfoto-2019-05-19-um-16.44.40.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/05\/Bildschirmfoto-2019-05-19-um-16.44.40.png\" alt=\"\" width=\"1947\" height=\"1137\" class=\"aligncenter size-full wp-image-13158\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/05\/Bildschirmfoto-2019-05-19-um-16.44.40.png 1947w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/05\/Bildschirmfoto-2019-05-19-um-16.44.40-300x175.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/05\/Bildschirmfoto-2019-05-19-um-16.44.40-768x448.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2019\/05\/Bildschirmfoto-2019-05-19-um-16.44.40-1024x598.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Aber es gibt eine neue Version (1.3.0) der Rest API, die wir verwenden wollen. Dazu die Maven pom.xml updaten:<\/p>\n<pre class=\"lang:xhtml decode:true \" >\r\n &lt;groupId&gt;org.opensky&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;opensky-api&lt;\/artifactId&gt;\r\n    &lt;version&gt;1.3.0&lt;\/version&gt;<\/pre>\n<p>Hier der aktuelle Lauf:<\/p>\n<pre class=\"lang:default decode:true \" >Flugbereich in Meter ; Flugh\u00f6he in Meter \r\nParken 0    ; 303\r\n   1-500    ; 320\r\n 500-1000   ; 355\r\n1000-2000   ; 410\r\n2000-3000   ; 321\r\n3000-4000   ; 310\r\n4000-5000   ; 233\r\n5000-6000   ; 234\r\n6000-7000   ; 237\r\n7000-8000   ; 306\r\n8000-9000   ; 340\r\n9000-10000  ; 538\r\n10000-10500 ; 558\r\n10500-11000 ; 897\r\n11000-11500 ; 440\r\n11500-12000 ; 486\r\n12000-13000 ; 201\r\n\u00fcber 13000  ; 78\r\nSummme      ; 6559\r\nZeitpunkt   ; Sun May 19 16:20:17 CEST 2019\r\nQuelle      ; The OpenSky Network, http:\/\/www.opensky-network.org<\/pre>\n<p>Es sind also <strong>6559 Flugzeuge<\/strong> weltweit in der Luft! Hier die paar Zeilen Java Code die daf\u00fcr n\u00f6tig sind:<!--more--><\/p>\n<pre class=\"lang:java decode:true \" >\r\n\/**\r\n * Klasse ausgeben der Flugh\u00f6hen.\r\n * \r\n * http:\/\/blog.wenzlaff.de\/?p=8198\r\n * \r\n * @author Thomas Wenzlaff\r\n *\r\n *\/\r\npublic class FlugAltitudeTest {\r\n\r\n\t@Test\r\n\tpublic void testPrintFlugAltitude() throws Exception {\r\n\r\n\t\tgetData();\r\n\t}\r\n\r\n\tprivate void getData() throws IOException {\r\n\r\n\t\tOpenSkyApi api = new OpenSkyApi();\r\n\t\tOpenSkyStates os = api.getStates(0, null);\r\n\t\tCollection&lt;StateVector&gt; states = os.getStates();\r\n\r\n\t\tFlugAltitude.printFlugHoehen(states);\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>und f\u00fcr die Flugh\u00f6he:<\/p>\n<pre class=\"lang:java decode:true \" >\r\npackage de.wenzlaff.tools;\r\n\r\nimport java.io.IOException;\r\nimport java.nio.charset.StandardCharsets;\r\nimport java.nio.file.Files;\r\nimport java.nio.file.Path;\r\nimport java.nio.file.Paths;\r\nimport java.nio.file.StandardOpenOption;\r\nimport java.util.ArrayList;\r\nimport java.util.Collection;\r\nimport java.util.Date;\r\nimport java.util.UUID;\r\n\r\nimport org.opensky.model.StateVector;\r\n\r\n\/**\r\n * Klasse zum ausgeben der Flugh\u00f6hen\r\n * \r\n * http:\/\/blog.wenzlaff.de\/?p=8198\r\n * \r\n * @author Thomas Wenzlaff\r\n *\r\n *\/\r\npublic class FlugAltitude {\r\n\r\n\t\/** Trennkennzeichen. *\/\r\n\tprivate static final String T = \";\";\r\n\r\n\tprivate static Collection&lt;StateVector&gt; svParken = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv1Bis500 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv500Bis1000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv1000Bis2000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv2000Bis3000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv3000Bis4000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv4000Bis5000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv5000Bis6000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv6000Bis7000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv7000Bis8000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv8000Bis9000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv9000Bis10000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv10000Bis10500 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv10500Bis11000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv11000Bis11500 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv11500Bis12000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; sv12000Bis13000 = new ArrayList&lt;&gt;();\r\n\tprivate static Collection&lt;StateVector&gt; svUeber13000 = new ArrayList&lt;&gt;();\r\n\r\n\t\/**\r\n\t * Print der Flugh\u00f6hen.\r\n\t * \r\n\t * @param states\r\n\t *\/\r\n\tpublic static void printFlugHoehen(Collection&lt;StateVector&gt; states) {\r\n\r\n\t\tfor (StateVector stateVector : states) {\r\n\t\t\tsetAltitude(stateVector);\r\n\t\t}\r\n\r\n\t\tausgabe(states);\r\n\t\taddToFile(states);\r\n\t}\r\n\r\n\tprivate static void addToFile(Collection&lt;StateVector&gt; states) {\r\n\r\n\t\tPath path = Paths.get(\"flug-data.csv\");\r\n\r\n\t\ttry {\r\n\t\t\tif (!Files.exists(path)) {\r\n\t\t\t\tFiles.createFile(path);\r\n\t\t\t\tString header = \"UUID\" + T + \"Summme\" + T + \"Zeitpunkt\" + T + \"Parken 0\" + T + \"1-500 \" + T + \"500-1000\" + T + \"1000-2000\" + T + \"2000-3000\" + T + \"3000-4000\" + T\r\n\t\t\t\t\t\t+ \"4000-5000\" + T + \"5000-6000\" + T + \"6000-7000\" + T + \"7000-8000\" + T + \"8000-9000\" + T + \"9000-10000\" + T + \"10000-10500\" + T + \"10500-11000\" + T\r\n\t\t\t\t\t\t+ \"11000-11500\" + T + \"11500-12000\" + T + \"12000-13000\" + T + \"\u00fcber 13000\" + System.lineSeparator();\r\n\t\t\t\tFiles.write(path, header.getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);\r\n\t\t\t}\r\n\r\n\t\t\tString data = UUID.randomUUID() + T + states.size() + T + new Date() + T + svParken.size() + T + sv1Bis500.size() + T + sv500Bis1000.size() + T + sv1000Bis2000.size()\r\n\t\t\t\t\t+ T + sv2000Bis3000.size() + T + sv3000Bis4000.size() + T + sv4000Bis5000.size() + T + sv5000Bis6000.size() + T + sv6000Bis7000.size() + T\r\n\t\t\t\t\t+ sv7000Bis8000.size() + T + sv8000Bis9000.size() + T + sv9000Bis10000.size() + T + sv10000Bis10500.size() + T + sv10500Bis11000.size() + T\r\n\t\t\t\t\t+ sv11000Bis11500.size() + T + sv11500Bis12000.size() + T + sv12000Bis13000.size() + T + svUeber13000.size() + System.lineSeparator();\r\n\r\n\t\t\tSystem.out.println(data);\r\n\r\n\t\t\tFiles.write(path, data.getBytes(), StandardOpenOption.APPEND);\r\n\t\t} catch (IOException e) {\r\n\t\t\tSystem.err.println(e);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate static void ausgabe(Collection&lt;StateVector&gt; states) {\r\n\r\n\t\tSystem.out.println(\"Flugbereich in Meter ; Flugh\u00f6he in Meter \");\r\n\t\tSystem.out.println(\"Parken 0    ; \" + svParken.size());\r\n\t\tSystem.out.println(\"   1-500    ; \" + sv1Bis500.size());\r\n\t\tSystem.out.println(\" 500-1000   ; \" + sv500Bis1000.size());\r\n\t\tSystem.out.println(\"1000-2000   ; \" + sv1000Bis2000.size());\r\n\t\tSystem.out.println(\"2000-3000   ; \" + sv2000Bis3000.size());\r\n\t\tSystem.out.println(\"3000-4000   ; \" + sv3000Bis4000.size());\r\n\t\tSystem.out.println(\"4000-5000   ; \" + sv4000Bis5000.size());\r\n\t\tSystem.out.println(\"5000-6000   ; \" + sv5000Bis6000.size());\r\n\t\tSystem.out.println(\"6000-7000   ; \" + sv6000Bis7000.size());\r\n\t\tSystem.out.println(\"7000-8000   ; \" + sv7000Bis8000.size());\r\n\t\tSystem.out.println(\"8000-9000   ; \" + sv8000Bis9000.size());\r\n\t\tSystem.out.println(\"9000-10000  ; \" + sv9000Bis10000.size());\r\n\t\tSystem.out.println(\"10000-10500 ; \" + sv10000Bis10500.size());\r\n\t\tSystem.out.println(\"10500-11000 ; \" + sv10500Bis11000.size());\r\n\t\tSystem.out.println(\"11000-11500 ; \" + sv11000Bis11500.size());\r\n\t\tSystem.out.println(\"11500-12000 ; \" + sv11500Bis12000.size());\r\n\t\tSystem.out.println(\"12000-13000 ; \" + sv12000Bis13000.size());\r\n\t\tSystem.out.println(\"\u00fcber 13000  ; \" + svUeber13000.size());\r\n\r\n\t\tSystem.out.println(\"Summme      ; \" + states.size());\r\n\t\tSystem.out.println(\"Zeitpunkt   ; \" + new Date());\r\n\t\tSystem.out.println(\"Quelle      ; The OpenSky Network, http:\/\/www.opensky-network.org\");\r\n\t}\r\n\r\n\tprivate static void setAltitude(StateVector vector) {\r\n\r\n\t\tDouble hoehe = vector.getAltitude();\r\n\r\n\t\tif (hoehe == null || hoehe &lt;= 0) {\r\n\t\t\tsvParken.add(vector);\r\n\t\t} else if (hoehe &gt;= 1 &amp;&amp; hoehe &lt;= 500) {\r\n\t\t\tsv1Bis500.add(vector);\r\n\t\t} else if (hoehe &gt;= 500 &amp;&amp; hoehe &lt;= 1000) {\r\n\t\t\tsv500Bis1000.add(vector);\r\n\t\t} else if (hoehe &gt;= 1000 &amp;&amp; hoehe &lt;= 2000) {\r\n\t\t\tsv1000Bis2000.add(vector);\r\n\t\t} else if (hoehe &gt;= 2000 &amp;&amp; hoehe &lt;= 3000) {\r\n\t\t\tsv2000Bis3000.add(vector);\r\n\t\t} else if (hoehe &gt;= 3000 &amp;&amp; hoehe &lt;= 4000) {\r\n\t\t\tsv3000Bis4000.add(vector);\r\n\t\t} else if (hoehe &gt;= 4000 &amp;&amp; hoehe &lt;= 5000) {\r\n\t\t\tsv4000Bis5000.add(vector);\r\n\t\t} else if (hoehe &gt;= 5000 &amp;&amp; hoehe &lt;= 6000) {\r\n\t\t\tsv5000Bis6000.add(vector);\r\n\t\t} else if (hoehe &gt;= 6000 &amp;&amp; hoehe &lt;= 7000) {\r\n\t\t\tsv6000Bis7000.add(vector);\r\n\t\t} else if (hoehe &gt;= 7000 &amp;&amp; hoehe &lt;= 8000) {\r\n\t\t\tsv7000Bis8000.add(vector);\r\n\t\t} else if (hoehe &gt;= 8000 &amp;&amp; hoehe &lt;= 9000) {\r\n\t\t\tsv8000Bis9000.add(vector);\r\n\t\t} else if (hoehe &gt;= 9000 &amp;&amp; hoehe &lt;= 10000) {\r\n\t\t\tsv9000Bis10000.add(vector);\r\n\t\t} else if (hoehe &gt;= 10000 &amp;&amp; hoehe &lt;= 10500) {\r\n\t\t\tsv10000Bis10500.add(vector);\r\n\t\t} else if (hoehe &gt;= 10500 &amp;&amp; hoehe &lt;= 11000) {\r\n\t\t\tsv10500Bis11000.add(vector);\r\n\t\t} else if (hoehe &gt;= 11000 &amp;&amp; hoehe &lt;= 11500) {\r\n\t\t\tsv11000Bis11500.add(vector);\r\n\t\t} else if (hoehe &gt;= 11500 &amp;&amp; hoehe &lt;= 12000) {\r\n\t\t\tsv11500Bis12000.add(vector);\r\n\t\t} else if (hoehe &gt;= 12000 &amp;&amp; hoehe &lt;= 13000) {\r\n\t\t\tsv12000Bis13000.add(vector);\r\n\t\t} else if (hoehe &gt;= 13000) {\r\n\t\t\tsvUeber13000.add(vector);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>Damit wurde nun eine aktuelle KML Datei erzeugt, und mit uMap und einer OpenStreetMap Karte visualisiert (siehe Foto oben), alles weltweit <a href=\"https:\/\/umap.openstreetmap.fr\/de\/map\/alle-flugzeuge-weltweit-am-sonntag-1952019_327916\" rel=\"noopener noreferrer\" target=\"_blank\">hier<\/a>. Es muss ja nicht immer Google sein.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wie vor zwei Jahren hier schon mal beschrieben hat sich nicht viel ge\u00e4ndert. Aber es gibt eine neue Version (1.3.0) der Rest API, die wir verwenden wollen. Dazu die Maven pom.xml updaten: &lt;groupId&gt;org.opensky&lt;\/groupId&gt; &lt;artifactId&gt;opensky-api&lt;\/artifactId&gt; &lt;version&gt;1.3.0&lt;\/version&gt; Hier der aktuelle Lauf: Flugbereich in Meter ; Flugh\u00f6he in Meter Parken 0 ; 303 1-500 ; 320 500-1000 ; &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=13155\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWie kann mit Java die Anzahl der Flugzeuge in der jeweiligen H\u00f6he weltweit in real time ermittelt und mit OpenStreetMap via uMap visualisiert werden?\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,79,2713],"tags":[1793,1799,3625,775],"class_list":["post-13155","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-programmierung","category-statistik","tag-dump1090","tag-flugzeuge","tag-openstreetmap","tag-weltkarte"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/13155","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=13155"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/13155\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13155"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}