OpenSky bietet eine Java API an um auf Flugdaten zugreifen zu können. 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 Km Höhe gesehen:
Wer die die Daten testweise laden will, kann die KML Datei als all-aircraft.kml_.zip (ZIP, 114 Kb) laden. Die Datei einfach entpacken und mit Google Earth öffnen. Hier noch einmal das Bild aus 376 Km Höhe, mit dem Mittelpunkt „Langenhagen“. Mit den kml Datei kann man aber auch selbst rumzoomen:
Wie sieht nun der Java Code aus. Zuerst mal die JUnit Testmethode um alle Flugdaten mit Anonymous abzufragen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
private static final String HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><kml xmlns=\"http://www.opengis.net/kml/2.2\"><Document>"; private static final String FOOTER = "</Document></kml>"; @Test public void getAnonymousTestdata() throws Exception { OpenSkyApi api = new OpenSkyApi(); OpenSkyStates os = api.getStates(0, null); Collection<StateVector> states = os.getStates(); StringBuffer ergebnis = new StringBuffer(HEADER); for (Iterator<StateVector> iterator = states.iterator(); iterator.hasNext();) { StateVector s = iterator.next(); ergebnis.append("<Placemark><name>"); ergebnis.append(s.getCallsign()); ergebnis.append("</name><description>"); ergebnis.append("Callsign: " + s.getCallsign() + " Icao24: " + s.getIcao24() + " Land: " + s.getOriginCountry()); ergebnis.append("</description><Point>"); ergebnis.append(" <coordinates>" + s.getLongitude() + "," + s.getLatitude() + "</coordinates></Point></Placemark>"); System.out.println(s); } ergebnis.append(FOOTER); System.out.println(ergebnis.toString()); System.out.println("Anzahl Flugzeuge: " + states.size()); assertTrue("Ups, es werden keine Flugdaten geliefert!", states.size() > 1); } |
Will man nur seine eigenen Daten, geht das mit:
1 2 3 4 5 6 7 8 9 |
private static final String USERNAME = "Vorname Nachname"; private static final String PASSWORD = "passwort"; private static final Integer[] SERIALS = { new Integer(-15552355555) }; // ID der Messstelle OpenSkyApi api = new OpenSkyApi(USERNAME, PASSWORD); OpenSkyStates os = api.getMyStates(0, null, SERIALS); Collection<StateVector> sv = os.getStates(); // rest wie oben |
Die Abfrage für alle dauert keine 3 Sekunden:
Weitere Ideen? Hier noch der Link zu der Java Api.
TIP: Arbeitet nur mit SDK >= 1.8.0_131, bei älteren Versionen gibt es sonst einen Fehler, das das Zertifikat fehlt! Das kann man aber auch nachträglich installieren.