Wie kann mit Java die Anzahl der Flugzeuge in der jeweiligen Höhe weltweit in real time ermittelt und mit OpenStreetMap via uMap visualisiert werden?

Erstellt am 19. Mai 2019 von It_berater

Wie vor zwei Jahren hier schon mal beschrieben hat sich nicht viel geändert.

Aber es gibt eine neue Version (1.3.0) der Rest API, die wir verwenden wollen. Dazu die Maven pom.xml updaten:

<groupId>org.opensky</groupId>
    <artifactId>opensky-api</artifactId>
    <version>1.3.0</version>

Hier der aktuelle Lauf:

Flugbereich in Meter ; Flughöhe in Meter 
Parken 0    ; 303
   1-500    ; 320
 500-1000   ; 355
1000-2000   ; 410
2000-3000   ; 321
3000-4000   ; 310
4000-5000   ; 233
5000-6000   ; 234
6000-7000   ; 237
7000-8000   ; 306
8000-9000   ; 340
9000-10000  ; 538
10000-10500 ; 558
10500-11000 ; 897
11000-11500 ; 440
11500-12000 ; 486
12000-13000 ; 201
über 13000  ; 78
Summme      ; 6559
Zeitpunkt   ; Sun May 19 16:20:17 CEST 2019
Quelle      ; The OpenSky Network, http://www.opensky-network.org

Es sind also 6559 Flugzeuge weltweit in der Luft! Hier die paar Zeilen Java Code die dafür nötig sind:

/**
 * Klasse ausgeben der Flughöhen.
 * 
 * http://blog.wenzlaff.de/?p=8198
 * 
 * @author Thomas Wenzlaff
 *
 */
public class FlugAltitudeTest {

	@Test
	public void testPrintFlugAltitude() throws Exception {

		getData();
	}

	private void getData() throws IOException {

		OpenSkyApi api = new OpenSkyApi();
		OpenSkyStates os = api.getStates(0, null);
		Collection<StateVector> states = os.getStates();

		FlugAltitude.printFlugHoehen(states);
	}

}

und für die Flughöhe:

package de.wenzlaff.tools;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.UUID;

import org.opensky.model.StateVector;

/**
 * Klasse zum ausgeben der Flughöhen
 * 
 * http://blog.wenzlaff.de/?p=8198
 * 
 * @author Thomas Wenzlaff
 *
 */
public class FlugAltitude {

	/** Trennkennzeichen. */
	private static final String T = ";";

	private static Collection<StateVector> svParken = new ArrayList<>();
	private static Collection<StateVector> sv1Bis500 = new ArrayList<>();
	private static Collection<StateVector> sv500Bis1000 = new ArrayList<>();
	private static Collection<StateVector> sv1000Bis2000 = new ArrayList<>();
	private static Collection<StateVector> sv2000Bis3000 = new ArrayList<>();
	private static Collection<StateVector> sv3000Bis4000 = new ArrayList<>();
	private static Collection<StateVector> sv4000Bis5000 = new ArrayList<>();
	private static Collection<StateVector> sv5000Bis6000 = new ArrayList<>();
	private static Collection<StateVector> sv6000Bis7000 = new ArrayList<>();
	private static Collection<StateVector> sv7000Bis8000 = new ArrayList<>();
	private static Collection<StateVector> sv8000Bis9000 = new ArrayList<>();
	private static Collection<StateVector> sv9000Bis10000 = new ArrayList<>();
	private static Collection<StateVector> sv10000Bis10500 = new ArrayList<>();
	private static Collection<StateVector> sv10500Bis11000 = new ArrayList<>();
	private static Collection<StateVector> sv11000Bis11500 = new ArrayList<>();
	private static Collection<StateVector> sv11500Bis12000 = new ArrayList<>();
	private static Collection<StateVector> sv12000Bis13000 = new ArrayList<>();
	private static Collection<StateVector> svUeber13000 = new ArrayList<>();

	/**
	 * Print der Flughöhen.
	 * 
	 * @param states
	 */
	public static void printFlugHoehen(Collection<StateVector> states) {

		for (StateVector stateVector : states) {
			setAltitude(stateVector);
		}

		ausgabe(states);
		addToFile(states);
	}

	private static void addToFile(Collection<StateVector> states) {

		Path path = Paths.get("flug-data.csv");

		try {
			if (!Files.exists(path)) {
				Files.createFile(path);
				String 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
						+ "4000-5000" + T + "5000-6000" + T + "6000-7000" + T + "7000-8000" + T + "8000-9000" + T + "9000-10000" + T + "10000-10500" + T + "10500-11000" + T
						+ "11000-11500" + T + "11500-12000" + T + "12000-13000" + T + "über 13000" + System.lineSeparator();
				Files.write(path, header.getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);
			}

			String data = UUID.randomUUID() + T + states.size() + T + new Date() + T + svParken.size() + T + sv1Bis500.size() + T + sv500Bis1000.size() + T + sv1000Bis2000.size()
					+ T + sv2000Bis3000.size() + T + sv3000Bis4000.size() + T + sv4000Bis5000.size() + T + sv5000Bis6000.size() + T + sv6000Bis7000.size() + T
					+ sv7000Bis8000.size() + T + sv8000Bis9000.size() + T + sv9000Bis10000.size() + T + sv10000Bis10500.size() + T + sv10500Bis11000.size() + T
					+ sv11000Bis11500.size() + T + sv11500Bis12000.size() + T + sv12000Bis13000.size() + T + svUeber13000.size() + System.lineSeparator();

			System.out.println(data);

			Files.write(path, data.getBytes(), StandardOpenOption.APPEND);
		} catch (IOException e) {
			System.err.println(e);
		}
	}

	private static void ausgabe(Collection<StateVector> states) {

		System.out.println("Flugbereich in Meter ; Flughöhe in Meter ");
		System.out.println("Parken 0    ; " + svParken.size());
		System.out.println("   1-500    ; " + sv1Bis500.size());
		System.out.println(" 500-1000   ; " + sv500Bis1000.size());
		System.out.println("1000-2000   ; " + sv1000Bis2000.size());
		System.out.println("2000-3000   ; " + sv2000Bis3000.size());
		System.out.println("3000-4000   ; " + sv3000Bis4000.size());
		System.out.println("4000-5000   ; " + sv4000Bis5000.size());
		System.out.println("5000-6000   ; " + sv5000Bis6000.size());
		System.out.println("6000-7000   ; " + sv6000Bis7000.size());
		System.out.println("7000-8000   ; " + sv7000Bis8000.size());
		System.out.println("8000-9000   ; " + sv8000Bis9000.size());
		System.out.println("9000-10000  ; " + sv9000Bis10000.size());
		System.out.println("10000-10500 ; " + sv10000Bis10500.size());
		System.out.println("10500-11000 ; " + sv10500Bis11000.size());
		System.out.println("11000-11500 ; " + sv11000Bis11500.size());
		System.out.println("11500-12000 ; " + sv11500Bis12000.size());
		System.out.println("12000-13000 ; " + sv12000Bis13000.size());
		System.out.println("über 13000  ; " + svUeber13000.size());

		System.out.println("Summme      ; " + states.size());
		System.out.println("Zeitpunkt   ; " + new Date());
		System.out.println("Quelle      ; The OpenSky Network, http://www.opensky-network.org");
	}

	private static void setAltitude(StateVector vector) {

		Double hoehe = vector.getAltitude();

		if (hoehe == null || hoehe <= 0) {
			svParken.add(vector);
		} else if (hoehe >= 1 & hoehe <= 500) {
			sv1Bis500.add(vector);
		} else if (hoehe >= 500 & hoehe <= 1000) {
			sv500Bis1000.add(vector);
		} else if (hoehe >= 1000 & hoehe <= 2000) {
			sv1000Bis2000.add(vector);
		} else if (hoehe >= 2000 & hoehe <= 3000) {
			sv2000Bis3000.add(vector);
		} else if (hoehe >= 3000 & hoehe <= 4000) {
			sv3000Bis4000.add(vector);
		} else if (hoehe >= 4000 & hoehe <= 5000) {
			sv4000Bis5000.add(vector);
		} else if (hoehe >= 5000 & hoehe <= 6000) {
			sv5000Bis6000.add(vector);
		} else if (hoehe >= 6000 & hoehe <= 7000) {
			sv6000Bis7000.add(vector);
		} else if (hoehe >= 7000 & hoehe <= 8000) {
			sv7000Bis8000.add(vector);
		} else if (hoehe >= 8000 & hoehe <= 9000) {
			sv8000Bis9000.add(vector);
		} else if (hoehe >= 9000 & hoehe <= 10000) {
			sv9000Bis10000.add(vector);
		} else if (hoehe >= 10000 & hoehe <= 10500) {
			sv10000Bis10500.add(vector);
		} else if (hoehe >= 10500 & hoehe <= 11000) {
			sv10500Bis11000.add(vector);
		} else if (hoehe >= 11000 & hoehe <= 11500) {
			sv11000Bis11500.add(vector);
		} else if (hoehe >= 11500 & hoehe <= 12000) {
			sv11500Bis12000.add(vector);
		} else if (hoehe >= 12000 & hoehe <= 13000) {
			sv12000Bis13000.add(vector);
		} else if (hoehe >= 13000) {
			svUeber13000.add(vector);
		}
	}

}

Damit wurde nun eine aktuelle KML Datei erzeugt, und mit uMap und einer OpenStreetMap Karte visualisiert (siehe Foto oben), alles weltweit hier. Es muss ja nicht immer Google sein.

Ähnliche Artikel:

  1. In welcher Höhe fliegen Flugzeuge?
  2. Java Thread – 6 State oder wie starten wir ein einfaches Java Programm auf dem Raspberry Pi
  3. Java 8 Quickie: Wie können alle bestimmten Dateien eines Verzeichnis in einer Zeile ermittelt werden?