Die Erde ist ja bekanntlich keine Scheibe
Bis die Daten verwendet werden können, müssen sie noch vereinheitlicht, angereichert und von fehlerhaften oder unbrauchbaren Nachrichten befreit werden. Schlussendlich landeten die Nachrichten in einem einheitlichen Format (GeoJSON) in einem Topic. Dieses Topic stellte den Ausgangspunkt für alle weiteren Analyseschritte dar. Alle Vorbereitungsschritte wurden ausschließlich mit Kafka und der integrierten Streaming-Bibliothek KStreams vorgenommen. Diese Bibliothek eignet sich für diese Art der Datentransformation sehr gut, da sie direkt in Kafka integriert ist. Das ermöglicht es aus Topics zu lesen, die Nachrichten zu bearbeiten (transformieren) und danach wieder in ein Topic einzuspeisen. Um die Schiffsnachrichten besser zu verstehen, habe ich zusätzlich ein kleines Werkzeug zur Visualisierung gebastelt. Damit konnte ich die Strecken der Schiffe auf einer Karte einzeichnen und so die Funkabdeckung prüfen. Zu erfahren, welche Besonderheiten der Umgang mit Geodaten mit sich bringt, war eine weitere Herausforderung für mich. Die Erde ist ja bekanntlich keine Scheibe, deswegen sind Entfernungsberechnungen und die Arbeit mit Koordinaten gar nicht so leicht. Festzuhalten ist auf jeden Fall, dass der wichtige Schritt der Datenvorbereitung nicht auf die leichte Schulter zu nehmen ist. Der Aufwand lohnt sich aber definitiv!
Nach den ausführlichen Vorbereitung hieß es endlich: „Ablegen“ zur Umsetzung der Anwendungsfälle!
Indem ich die Probleme mit den verschiedenen Systemen anging, konnte ich zeigen, wie sich die Programme und Frameworks für diese spezielle Geodaten eignen. Zunächst musste ich aber die Szenarien in mathematischen bzw. geometrische Fragestellungen „übersetzen“. Logistikschiffe sind zum Teil um die 200 Meter lang. Somit wäre es zu ungenau gewesen, die Schiffspositionen lediglich als „Punkte“ darzustellen. Vielmehr sollte das Schiff als geometrische Figur wie ein Rechteck abgebildet werden. Da in der Schiffsnachricht Informationen über die Position der GPS-Ende enthalten sind, konnte ich unter Anwendung der Mathematik die Koordinaten der Eckpunkte bestimmen. Dadurch war es beispielsweise leicht zu prüfen, ob ein Schiff in Form eines Polygons innerhalb eines Kreises liegt, der die Überwachungszone darstellt. Etwas komplizierter waren die zwei anderen Anwendungsfälle. Um die Ankunftszeit vorherzusagen, setzte ich die Distanz der aktuellen Schiffsposition zum Zielort in das Verhältnis mit dem Durchschnitt der letzten X Geschwindigkeiten. Die Information, wann das Schiff am Ziel ist, muss nicht zwingend in Echtzeit geliefert werden. Diesen Anwendungsfall musste ich vereinfachen, so auch die Kollisionswarnung. Das ist aber insofern kein Problem, da die Szenarien ja eher Mittel zum Zweck der Evaluation waren. Damit ich prüfen konnte, ob sich zwei Schiffe gefährlich nahe kommen, schätzte ich die zukünftige Fahrstrecke der Schiffe, wenn sie ihren aktuellen Kurs und Geschwindigkeit beibehalten. Aus den zwei Strecken konnte ich dann den Schnittpunkt berechnen, wie in der Schulmathematik. Sind die Zeitpunkte, an denen die Schiffe den Schnittpunkt erreichen werden, zu nah beisammen, wird eine Alarmnachricht ausgegeben.