\chapter{Design}
\label{chapter:design}
\section{Übersicht über die bestehende Struktur}
Der Bildauswerteplatz der Zukunft besteht aus mehreren Komponenten (siehe Abbildung \ref{figure:backend}). 
Insbesondere der Geoviewer benötigt mehrere Komponenten im Hintergrund. 
Die zentrale Komponente ist dabei das Backend. 
Dieses speichert alle Szenarien, Layer und Datenobjekte, die auf dem Geoviewer angezeigt werden. 
Die Kommunikation zwischen dem Backend und anderen verbundenen Komponenten läuft über die Middleware. 
Der Geoviewer bezieht das Kartenmaterial von einem Geoserver. 
Neben dem Geoviewer ist die Metadaten-Anzeige an das Backend angeschlossen. 
Diese Anzeige kann durch eine Webseite erreicht werden. % Durch eine Webseite oder meinst du durch eine URL bzw Webservice?
Durch Nachrichten an die Anzeige kann die aktuell angezeigte Information verändert und neue Informationen zur Anzeige hinzugefügt werden. 
Die Bedienung des Displays erfolgt meistens durch Auswahl auf dem Geoviewer, der die Anzeige dementsprechend verändert.
Der Stereo-Bildauswerter ist auch an das Backend angeschlossen. 
Bisher wird diese Verbindung nur beim Laden eines Bildes genutzt. 
Der SBA sendet die Koordinaten an den Geoviewer, der dann den zu diesen  Koordinaten zoomt. % Was willst du sagen?
Der CSD-Adapter implementiert eine Verbindung zur CSD. 
Mit Hilfe der isaac.lib (Siehe \cite[Clients für Datenzugriff]{CSD}) wird auf die Datenbank zugegriffen und die benötigten Datenobjekte für das Backend werden erstellt.

Ein Ziel dieser Arbeit ist es, die Verbindung des CSD-Adapter zu verbessern, für andere Projekte wiederverwendbar zu machen und alle Bibliotheken zu aktualisieren. 
Außerdem soll der SBA an die CSD angebunden werden. 
Aktuell muss der Bildauswerter jedes Bild einzeln aus dem Dateisystem laden, was ineffizient und langwierig ist. 
Der Bildauswerter soll die Daten direkt aus der CSD laden können und seine ausgewerteten Ergebnisse dort abspeichern.
Eine weitere Anforderung an den SBA ist, dass dieser auch ohne die Verbindung zur Middleware bzw. dem Backend funktionieren soll.  % Zur Verbesserung der Robustheit.

\begin{figure}
\centering
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{../UML/Backend.png}
\caption{Die Eingabe eines CSD-Requests im SBA. Der Request ist auf Bilder eingeschränkt, da der SBA nur Bilder unterstützt}
\label{figure:backend}
\end{figure}

\section{Laden von Daten}
Der erste Arbeitsschritt eines Bildauswerters ist das Laden der benötigten Daten, insbesondere das zur Auswertung vorgesehene Bild und die dazugehörigen Informationen aus der Umgebung. 
Bisher war das Importieren von Bildern nur aus dem Dateisystem möglich. 
Das Bild wird häufig durch den CSD-Server zur Verfügung gestellt und soll deshalb leicht in den SBA geladen werden können. 
Eine Schwierigkeit ist dabei, dass die CSD Bilder nur im NSIF-Format abspeichert und bereitstellt.
Der Geoviewer beschränkt sich beim Laden der Daten von dem Server auf einige wichtige Datentypen, insbesondere Bilder, Videos und Berichte, die sofern sie georeferenziert sind, an der richtigen Stelle auf die Karte angezeigt werden.
Der Ablauf einer CSD-Abfrage soll auf dem SBA und dem Geoviewer ähnlich ablaufen. Der Nutzer erstellt eine Anfrage für einen CSD-Task. 
Dieser Task wird dann ausgeführt und die Ergebnisse für die jeweiligen Anwendungsfälle werden verarbeitet. % klingt fast zu allgemein.


\subsection{CSD Task erstellen}
Um den Bildauswertern die Arbeit zu vereinfachen, soll zum Auslesen der CSD in allen Programmen dieselbe Nutzeroberfläche zur Verfügung stehen (siehe Abbildung \ref{figure:requestUI}). 
Die Benutzeroberfläche ermöglicht das Suchen nach vielen Kriterien, wie z.B. den Namen der Mission, des Erstellers sowie der Erdstellungszeit. 
Die Eingabeoberfläche war im CSD-Plugin des Geoviewers vorhanden, musste aber angepasst werden, damit sie wiederverwendbar wird. 
Um das zu gewährleisten, wurde die Nutzeroberfläche außerdem in die CSDCommon-Bibliothek verschoben. 

Eine wichtige Funktion zur Einschränkung der Suchergebnisse ist das Auswählen einer Region. 
Der Geoviewer bietet hierfür eine einfache Möglichkeit. 
Der Nutzer kann durch eine Einzeichnung auf der Karte den Suchbereich selektieren und damit die Suche einschränken, um nur die für ihn interessanten Ergebnisse zu erhalten. 
Da die Verarbeitung vieler Ergebnisse merklich Zeit verbraucht, führt die Einschränkung der Region auch zu einer flüssigeren Bedienbarkeit.
Auf dem SBA gibt es keine einfache Möglichkeit einen Bereich zu selektieren. 
Um eine alternative einfache Eingabe zur Verfügung zu stellen, wurde die Verbindung vom SBA zum Geoviewer um eine Regionsauswahl erweitert.
Ist der SBA mit dem Geoviewer über das Backend verbunden und der Geoviewer gestartet, so aktiviert sich die Regionsauswahl für den Bildauswerter. 
Die Auswahl der Region für den SBA erfolgt auf dem Geoviewer und das Ergebnis wird an den SBA gesendet. 
In Abbildung \ref{figure:strukturSBA} ist diese Verbindung über das Backend an das CSD-Plugin eingezeichnet.

Die Nutzeroberfläche verfügt über einige Comboboxen, die eine einfache Auswahl von Feldern ermöglichen. 
Diese Boxen sind durch ein Preset konfigurierbar, das einfach aus einer Konfigurationsfile erstellt werden kann. 
Für den Nutzer hat das den Vorteil, dass er nicht alle Informationen von Hand eingeben muss. 
Das ist z.B. für die URLs der CSD-Server sinnvoll. 

Um die Nutzeroberfläche wiederverwendbar zu gestalten, soll sie in eine CSDCommons-Bibliothek integriert werden. %Gibt es mehrere CSDCommons-Bibliotheken?
In den  Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA} ist diese Oberfläche in grün eingezeichnet und als RequestUI  bezeichnet.
Das Laden des Presets erfolgt auf dem SBA direkt und beim Geoviewer wird dieses vom CSD-Adapter geladen.

\begin{figure}
\centering
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{RequestUI.png}
\caption{Die Eingabe eines CSD-Requests im SBA. 
Der Request ist auf Bilder eingeschränkt, da der SBA nur Bilder unterstützt.}
\label{figure:requestUI}
\end{figure}

\subsection{Task ausführen}
Nachdem der Nutzer einen Task erstellt hat, muss dieser ausgeführt werden. 
Die Eingaben des Nutzers müssen in eine CSD-Query umgewandelt und die Verbindung zum Server hergestellt werden.

Der Geoviewer sendet die Task zur Verarbeitung an den CSD-Adapter. 
Der SBA verarbeitet den Task direkt. 
Bei beiden Zugriffen auf die CSD wird zunächst der Task gestartet und anschließend mit dem CSDReadingClient der Isaac.lib auf den Server zugegriffen. % Warum sprichst du von 2 Zugriffen?
In den Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA} ist dieser Teil grün markiert. 
Die Verarbeitung eines Tasks und der Zugriff auf den CSD-Server ist in beiden Komponenten ähnlich und wurde deshalb auch in die CSDCommons-Bibliothek ausgelagert.

\subsection{Ergebnis auswerten}
Der Isaac.lib kann bei einer Abfrage ein Result Handler übergeben werden. 
Gibt es zu einer Abfrage ein Ergebnis, wird dieses dem Result Handler übergeben. 
Ein Ergebnis besteht aus einem MetaDaten-XML-Dokument. Für den SBA und den CSD-Adapter müssen zunächst alle generellen Informationen aus diesem XML-Dokument herausgelesen werden. 
Anschließend folgt die typspezifische Verarbeitung.

Beim SBA wird anschließend ein CSD-Data-Objekt mit allen nötigen Informationen erstellt und dieses Objekt dem CSD-DataStore hinzugefügt. 
Das Ergebnis der Anfrage wird anschließend in einer Tabelle dargestellt und der Nutzer kann daraus ein Bild zum Laden auswählen. 
In Abbildung \ref{figure:strukturSBA} ist der SBAResultHandler, der die Ergebnisverarbeitung übernimmt und der CSD-Data-Store eingezeichnet. 
Die ResultUI ist das Oberfläche zur Auswahl eines Ergebnisses.
Ein Screenshot der UI  ist in Abbildung \ref{figure:resultUI}) zu sehen.

Der CSD-Adapter trennt die Ergebnisse erst nach ihrem Typ, sodass zum Beispiel Bilder und Videos anders verarbeitet werden. 
In Abbildung \ref{figure:strukturViewer} ist die Aufspaltung der Verarbeitung durch den MainResultHandler und mehrere spezielle ResultHandler dargestellt. 
Im den meisten Fällen wird zuerst das eigentliche Objekt heruntergeladen und für den Geoviwer aufbereitet. 
Bei Bildern wird dies erst heruntergeladen und überprüft, ob das Bild direkt in das Kartenmaterial eingebunden werden kann. 
Aus dem Metadaten-XML-File wird eine Metadaten-Anzeige erstellt. 
Außerdem wird ein Data Objekt erstellt und an das Backend gesendet, sodass das Ergebnis auf der Karte visualisiert werden kann. 
Im Geoviewer werden diese Objekt dargestellt und können verwendet werden, um die Metadaten im Metadaten-Display anzuzeigen.

\begin{landscape} 
\begin{figure*}
\includegraphics[scale=0.9]{../UML/Struktur Viewer.png}
\caption{Struktur der Anbindung an die CSD für den Geoviewer.}
\label{figure:strukturViewer}
\end{figure*}

\begin{figure*}
\includegraphics[scale=1]{../UML/Struktur SBA.png}
\caption{Struktur der Anbindung an die CSD im Stereo-Bildauswerter. 
In Gelb sind die Swing-Actions eingezeichnet, die der Nutzer aufrufen kann.}
\label{figure:strukturSBA}
\end{figure*}
\end{landscape} 

\begin{figure}
\centering
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{ResultUI.png}
\caption{Die Anzeige aller Ergebnisse im SBA. Die Tabelle ist sortierbar und es lassen sich beliebige Spalten ein- und ausblenden. 
Falls ein Vorschaubild verfügbar ist, wird dieses an der Seite zusammen mit dem Kommentar des Bildes angezeigt.}
\label{figure:resultUI}
\end{figure}


\section{Ausgewertete Daten des SBA speichern}
\subsection{Export in \rec}
Eine Funktion der Erkennungsassistenz \rec  ist das Hinzufügen von bisher unbekannten Fahrzeugen. Sind zum Beispiel Piraten mit einem selbstgebauten Boot unterwegs, ist dieses höchstwahrscheinlich nicht im System. 
\rec unterstützt das Hinzufügen von neuen Objekten und Bildern. 
In dem SBA wurde eine Funktion eingebaut, die das Exportieren eines Bildes für den \rec vereinfacht. 
Durch einen Button wird der Render-Vorgang des Bildes gestartet und in einen definierten Ordner abgespeichert. 
Diesem Ordner durchsucht  \rec  regelmäßig und bietet einen Import an.


\subsection{Export in CSD}
Nach einer erfolgreichen Auswertung soll das annotierte Bild zu den CSD hinzugefügt werden. 
Hierfür wurde in den SBA ein schreibender Zugriff auf den Server implementiert. 
Zunächst kann der Nutzer die nötigen und bei Bedarf auch einige optionale Meta-Informationen eingeben. 
Hierfür wurde eine Oberfläche angelegt (siehe Abbildung \ref{figure:metaUI}). 
Falls das Bild aus der CSD geladen wurde, so wird das UI mit den Werten des geladenen Bildes gefüllt. 
Die Oberfläche überprüft, ob alle zwingenden Richtlinien eingehalten wurden. 
Das kann zum Beispiel die Prüfung von Pflichteingaben oder der maximalen Zeichenzahl für bestimmte Felder bedeuten.
Zur einfacheren Benutzung wurden Buttons zur schnellen Datumsauswahl und zum Generieren von zufälligen IDs hinzugefügt.
Nachdem der Nutzer alle Informationen eingetragen hat, beginnt der eigentliche Schreibvorgang. 
Zunächst wird das Bild gerendert und mit Hilfe des NSIF-Creators in ein NSIF-Bild umgewandelt. 
Das ist notwendig, da in der CSD nur NSIF Bilder gespeichert werden können. 
Das Metadaten-XML-File wird mit Hilfe des CSD-WritingClients der Isaac.lib an die CSD gesendet. 
Das Bild wird durch einem HTTP-Server der Isaac.lib zur Verfügung gestellt, sodass der CSD-Server das Bild herunterladen kann. % gehört der HTTP Server zur isaac.lib? Das ``der Isaac.lib'' kann man auf 2 Arten lesen (Genetiv  ODER Dativ-Objekt zum Verb ``zur Verfügung stellen''

\begin{figure}
\centering
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{MetaDataUI.png}
\caption{Die Anzeige aller Ergebnisse im SBA. Die Tabelle ist sortierbar und es lassen sich beliebige Spalten ein- und ausblenden. 
Falls ein Vorschaubild verfügbar ist, wird es an der Seite zusammen mit dem Kommentar des Bildes angezeigt.}
\label{figure:metaUI}
\end{figure}

\begin{figure}
\centering
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{../UML/Struktur Writing.png}
\caption{Die Nutzereingabe zur Eingabe der Metadaten }
\label{figure:StrukturWriting}
\end{figure}