{"id":8176,"date":"2017-05-25T19:46:39","date_gmt":"2017-05-25T17:46:39","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=8176"},"modified":"2022-02-23T19:54:56","modified_gmt":"2022-02-23T18:54:56","slug":"opensky-java-api-to-kml-fuer-google-earth-teil-1","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=8176","title":{"rendered":"OpenSky Java API to KML f\u00fcr Google Earth &#8211; Teil 1"},"content":{"rendered":"<p>OpenSky bietet eine Java API an um auf Flugdaten zugreifen zu k\u00f6nnen. Da die live API nun wieder online ist, schreiben wir einen kleine JUnit Test und formen mal alle Transponderdaten aller <strong>4754 Flugzeuge<\/strong> in eine KML Datei, um die Daten auf Google Earth anzuzeigen. Hier erst einmal das Ergebnis in Google Earth aus 5569 Km H\u00f6he gesehen:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.14.33.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.14.33.png\" alt=\"\" width=\"1628\" height=\"1211\" class=\"aligncenter size-full wp-image-8177\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.14.33.png 1628w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.14.33-300x223.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.14.33-768x571.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.14.33-1024x762.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Wer die die Daten testweise laden will, <!--more--> kann die KML Datei als <a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/all-aircraft.kml_.zip\">all-aircraft.kml_.zip (ZIP, 114 Kb)<\/a> laden. Die Datei einfach entpacken und mit Google Earth \u00f6ffnen. Hier noch einmal das Bild aus 376 Km H\u00f6he, mit dem Mittelpunkt &#8222;Langenhagen&#8220;. Mit den kml Datei kann man aber auch selbst rumzoomen:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.27.52.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.27.52.png\" alt=\"\" width=\"2045\" height=\"1273\" class=\"aligncenter size-full wp-image-8180\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.27.52.png 2045w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.27.52-300x187.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.27.52-768x478.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.27.52-1024x637.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Wie sieht nun der Java Code aus. Zuerst mal die JUnit Testmethode um alle Flugdaten mit Anonymous abzufragen:<\/p>\n<pre class=\"lang:java decode:true \" >\r\n\r\nprivate static final String HEADER = \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><kml xmlns=\\\"http:\/\/www.opengis.net\/kml\/2.2\\\"><Document>\";\r\nprivate static final String FOOTER = \"<\/Document><\/kml>\";\r\n\r\n\r\n@Test\r\npublic void getAnonymousTestdata() throws Exception {\r\n\r\nOpenSkyApi api = new OpenSkyApi();\r\nOpenSkyStates os = api.getStates(0, null);\r\nCollection&lt;StateVector&gt; states = os.getStates();\r\n\r\nStringBuffer ergebnis = new StringBuffer(HEADER);\r\n\r\nfor (Iterator&lt;StateVector&gt; iterator = states.iterator(); iterator.hasNext();) {\r\n\tStateVector s = iterator.next();\r\n\tergebnis.append(\"&lt;Placemark&gt;&lt;name&gt;\");\r\n\tergebnis.append(s.getCallsign());\r\n\tergebnis.append(\"&lt;\/name&gt;&lt;description&gt;\");\r\n\tergebnis.append(\"Callsign: \" + s.getCallsign() + \" Icao24: \" + s.getIcao24() + \" Land: \" + s.getOriginCountry());\r\n\tergebnis.append(\"&lt;\/description&gt;&lt;Point&gt;\");\r\n\tergebnis.append(\" &lt;coordinates&gt;\" + s.getLongitude() + \",\" + s.getLatitude() + \"&lt;\/coordinates&gt;&lt;\/Point&gt;&lt;\/Placemark&gt;\");\r\n\r\n\tSystem.out.println(s);\r\n}\r\n\r\n\tergebnis.append(FOOTER);\r\n\r\n\tSystem.out.println(ergebnis.toString());\r\n\r\n\tSystem.out.println(\"Anzahl Flugzeuge: \" + states.size());\r\n\r\n\tassertTrue(\"Ups, es werden keine Flugdaten geliefert!\", states.size() > 1);\r\n}\r\n<\/pre>\n<p>Will man nur seine eigenen Daten, geht das mit:<\/p>\n<pre class=\"lang:java decode:true \" >\r\n\r\nprivate static final String USERNAME = \"Vorname Nachname\";\r\nprivate static final String PASSWORD = \"passwort\";\r\nprivate static final Integer[] SERIALS = { new Integer(-15552355555) }; \/\/ ID der Messstelle\r\n\r\nOpenSkyApi api = new OpenSkyApi(USERNAME, PASSWORD);\r\nOpenSkyStates os = api.getMyStates(0, null, SERIALS);\r\nCollection&lt;StateVector&gt; sv = os.getStates();\r\n\r\n\/\/ rest wie oben\r\n<\/pre>\n<p>Die Abfrage f\u00fcr alle dauert keine 3 Sekunden:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.54.29.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.54.29.png\" alt=\"\" width=\"536\" height=\"163\" class=\"aligncenter size-full wp-image-8185\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.54.29.png 536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/05\/Bildschirmfoto-2017-05-25-um-19.54.29-300x91.png 300w\" sizes=\"auto, (max-width: 536px) 100vw, 536px\" \/><\/a><\/p>\n<p>Weitere Ideen? Hier noch der Link zu der Java Api.<\/p>\n<p>TIP: Arbeitet nur mit SDK >= <strong>1.8.0_131<\/strong>, bei \u00e4lteren Versionen gibt es sonst einen Fehler, das das Zertifikat fehlt! Das kann man aber auch nachtr\u00e4glich installieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenSky bietet eine Java API an um auf Flugdaten zugreifen zu k\u00f6nnen. Da die live API nun wieder online ist, schreiben wir einen kleine JUnit Test und formen mal alle Transponderdaten aller 4754 Flugzeuge in eine KML Datei, um die Daten auf Google Earth anzuzeigen. Hier erst einmal das Ergebnis in Google Earth aus 5569 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=8176\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eOpenSky Java API to KML f\u00fcr Google Earth &#8211; Teil 1\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[220,2453,5,79,1023,1101],"tags":[833,913,2833,55,528,2834,2182],"class_list":["post-8176","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-dump1090","category-java","category-programmierung","category-raspberry-pi","category-reisen","tag-datei","tag-dump","tag-java-to-kml","tag-junit","tag-kml","tag-opensky-to-klm","tag-programmierung"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/8176","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=8176"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/8176\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8176"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}