@@ -18,7 +18,7 @@ Ein Ziel dieser Arbteit ist es die Verbindung des CSDAdapter zu verbessern und w
...
@@ -18,7 +18,7 @@ Ein Ziel dieser Arbteit ist es die Verbindung des CSDAdapter zu verbessern und w
\section{Laden von Daten}
\section{Laden von Daten}
Der erste Schritt 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 nur das importieren von Bildern aus dem Dateisystem möglich. Das Bild wird häufig durch den CSD-Server zur Verfügung gestellt und sollte deshalb leicht in den SBA geladen werden können. Eine Schwierigkeit hierbei ist, das in der CSD nur Bilder im NSIF Format abgespeichert und geladen werden können.
Der erste Schritt 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 nur das importieren von Bildern 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 hierbei ist, das in der CSD nur Bilder im NSIF Format abgespeichert und geladen werden können.
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 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 verläuft einigermaßen gleich. Der Nutzer erstellt eine Anfrage für einen CSDTask. Dieser Task wird dann ausgeführt und die Ergebnisse für die jeweiligen Anwendungsfälle verarbeitet.
Der Ablauf einer CSD Abfrage soll auf dem SBA und dem Geoviewer verläuft einigermaßen gleich. Der Nutzer erstellt eine Anfrage für einen CSDTask. Dieser Task wird dann ausgeführt und die Ergebnisse für die jeweiligen Anwendungsfälle verarbeitet.
...
@@ -33,6 +33,7 @@ Ist der SBA mit dem Geoviewers über das Backend verbunden und Geoviewer gestart
...
@@ -33,6 +33,7 @@ Ist der SBA mit dem Geoviewers über das Backend verbunden und Geoviewer gestart
Die Nutzeroberfläche verfügt über einige Comboboxen um eine einfachere Auswahl von einigen Feldern ermöglicht. Diese Boxen sind durch ein Preset konfigurierbar, das einfach aus einer Konfigurationsfile erstellt werden kann. Dies hat den Vorteil das der Nutzer nicht alle Informationen per Hand eingeben muss, z.B. die URL der CSD Server muss so nicht jedes mal per Hand eingegeben werden.
Die Nutzeroberfläche verfügt über einige Comboboxen um eine einfachere Auswahl von einigen Feldern ermöglicht. Diese Boxen sind durch ein Preset konfigurierbar, das einfach aus einer Konfigurationsfile erstellt werden kann. Dies hat den Vorteil das der Nutzer nicht alle Informationen per Hand eingeben muss, z.B. die URL der CSD Server muss so nicht jedes mal per Hand eingegeben werden.
Um die Nutzeroberfläche wiederverwendbar zu gestalten soll sie in eine CSDCommns Bibliothek integriert werden.
In den Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA} ist diese Oberfläche als RequestUI in grün eingezeichnet. Das laden des Presets erfolgt auf dem SBA direkt und beim Geoviewer wird dieses vom CSDADapter geladen.
In den Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA} ist diese Oberfläche als RequestUI in grün eingezeichnet. Das laden des Presets erfolgt auf dem SBA direkt und beim Geoviewer wird dieses vom CSDADapter geladen.
\begin{figure}
\begin{figure}
...
@@ -48,7 +49,7 @@ Nachdem der Nutzer einen Task erstellt hat, muss dieser ausgeführt werden. Die
...
@@ -48,7 +49,7 @@ Nachdem der Nutzer einen Task erstellt hat, muss dieser ausgeführt werden. Die
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. In den Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA} ist dieser Teil iin grün markiert. Die Verarbetung eines Task und der Zugriff auf den CSD Server ist in beiden komponnenten ähnlich und wurde deshalb acuh in die CSDCommons Bibliothek ausgelagert.
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. In den Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA} ist dieser Teil iin grün markiert. Die Verarbetung eines Task und der Zugriff auf den CSD Server ist in beiden komponnenten ähnlich und wurde deshalb acuh in die CSDCommons Bibliothek ausgelagert.
\subsection{Ergebnis auswerten}
\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 Ergebniss 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 genauere Verarbeitung.
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 Ergebniss 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 Typ spezifische 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 ein Bild zum Laden auswählen. In Abbildung \ref{figure:strukturSBA} ist der SBAReusltHandler der die Ergebnissverarbeitung übernimmt und der CSD Data Sore eingezeichnet. Die ResultUI ist das Oberfläche zur Auswahl eines Ergebnisses. Ein Screenshot der UI ist in Abbildung \ref{figure:resultUI}) zu sehen.
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 ein Bild zum Laden auswählen. In Abbildung \ref{figure:strukturSBA} ist der SBAReusltHandler der die Ergebnissverarbeitung übernimmt und der CSD Data Sore eingezeichnet. Die ResultUI ist das Oberfläche zur Auswahl eines Ergebnisses. Ein Screenshot der UI ist in Abbildung \ref{figure:resultUI}) zu sehen.
...
@@ -78,7 +79,7 @@ Der CSD-Adapter trennt die Ergebnisse erst nach ihrem Typ, sodass zum Beispiel B
...
@@ -78,7 +79,7 @@ Der CSD-Adapter trennt die Ergebnisse erst nach ihrem Typ, sodass zum Beispiel B
\section{Ausgewertete Daten des SBA speichern}
\section{Ausgewertete Daten des SBA speichern}
\subsection{Export in \rec}
\subsection{Export in \rec}
Eine Funktion der Erkennungsassistenz \rec ist das Hinzufügen von bisher unbekannten Fahrzeugen. Sind zum Beispiel Piraten mit ihrem selbstgebauten Bot unterwegs, ist diese höchst wahrscheinlich 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 das Bild gerendert und in einen definierten Ordner abgespeichert. In diesem Ordner durchsucht \rec regelmäßig und bietet einen Import an.
Eine Funktion der Erkennungsassistenz \rec ist das Hinzufügen von bisher unbekannten Fahrzeugen. Sind zum Beispiel Piraten mit ihrem selbstgebauten Boot unterwegs, ist diese höchst wahrscheinlich 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 rendervorgang des Bildes gestartet und in einen definierten Ordner abgespeichert. In diesem Ordner durchsucht \rec regelmäßig und bietet einen Import an.
\subsection{Export in CSD}
\subsection{Export in CSD}
...
@@ -95,6 +96,6 @@ Nachdem der Nutzer alle Informationen eingetragen hat, beginnt der eigentliche S
...
@@ -95,6 +96,6 @@ Nachdem der Nutzer alle Informationen eingetragen hat, beginnt der eigentliche S
Um eine wiederverwendbare Oberfläche einzubinden wird eine Schnittstelle angelegt (Siehe Bild \ref{figure:klassenRequest}). Die Schnittstelle wird aufgerufen, sobald der Nutzer einen Task absendet und bei der Auswahl einer Region Das CSD Plugin des Geoviewers implementiert diese Schnittstelle. Region Anfragen werden direkt bearbeitet und der Task request wird an den CSDAdapter gesendet. Im SBA wird das Interface von der CSDRequestAction implementiert. Der Regionsaufruf wird falls möglich an das CSDPlugin über ein DirectRequest weitergeleitet. Die Antwort darauf erhält der SBA erneut über einen DirectRequest. Eine DirectMessage ist im System des Backends nicht vorhanden und wird deshalb an dieser Stelle über zu Request gelöst. Wir können nicht einen einzigen Request verwenden, da der Nutzer beliebig lange zum Einzeichnen brauchen kann. Nutzt man einen einzigen DirectRequest so müsste die Antwort der Plugins innerhalb des Timeouts von 5 Sekunden erfolgen.
Um eine wiederverwendbare Oberfläche einzubinden, wird eine Schnittstelle angelegt (siehe Bild \ref{figure:klassenRequest}). Die Schnittstelle wird aufgerufen, sobald der Nutzer einen Task absendet und bei der Auswahl einer Region. Das CSD Plugin des Geoviewers implementiert diese Schnittstelle. Region-Anfragen werden direkt bearbeitet und der Task Request wird an den CSD-Adapter gesendet. Im SBA wird das Interface von der CSDRequestAction implementiert. Der Regionsaufruf wird falls möglich an das CSDPlugin über ein DirectRequest weitergeleitet. Die Antwort darauf erhält der SBA erneut über einen DirectRequest. Eine DirectMessage ist im System des Backends nicht vorhanden und wird deshalb an dieser Stelle über zu Request gelöst. Wir können nicht nur einen Request verwenden, da der Nutzer beliebig lange zum Einzeichnen brauchen kann. Nutzt man einen einzigen DirectRequest so müsste die Antwort der Plugins innerhalb des Timeouts von 5 Sekunden erfolgen.
\begin{figure}
\begin{figure}
\centering
\centering
...
@@ -14,41 +14,43 @@ Um eine wiederverwendbare Oberfläche einzubinden wird eine Schnittstelle angele
...
@@ -14,41 +14,43 @@ Um eine wiederverwendbare Oberfläche einzubinden wird eine Schnittstelle angele
\end{figure}
\end{figure}
\subsection{Task ausführen}
\subsection{Task ausführen}
Die Isaac.lib unterstützt 2 Arten von Anfragen an die CSD. Ein CSD Request ist eine einmalige Abfrage des Servers und übergibt alle Treffer an einen mit übergebenen ResultHandler und ist dann beendet. Eine Subskription liefert auch nach dem abfrage Zeitpunkt Ergebnisse. Wird zum Beispiel ein neuer Datensatz hinzugefügt der auf die Abfrage passt, so wird dieser auch an den ResultHandler übergeben. Beide Abfragen unterscheiden sich bei der Erstellung nur in der eigentlichen Abfrage. Deshalb wurde die Abstrakte Klasse CSDTask angelegt (siehe Abbildung \ref{figure:klassenTask}). Die Methode startRequest startet einen neuen Thread. Zuerst wird die abstrakte Methode beforeTask aufgerufen um Vorbereitungen zu treffen, zum Beispiel Ergebnisse von einem alten Task zu löschen. TODO local Request??.
Die Isaac.lib unterstützt 2 Arten von Anfragen an die CSD. Ein CSD-Request ist eine einmalige Abfrage des Servers, übergibt alle Treffer an einen mit übergebenen ResultHandler und ist dann beendet. Eine Subskription liefert auch nach dem Abfragezeitpunkt Ergebnisse. Wird zum Beispiel ein neuer Datensatz hinzugefügt, der auf die Abfrage passt, so wird dieser auch an den ResultHandler übergeben. Beide Abfragen unterscheiden sich bei der Erstellung nur in der eigentlichen Abfrage. Deshalb wurde die abstrakte Klasse CSDTask angelegt (siehe Abbildung \ref{figure:klassenTask}). Die Methode startRequest startet einen neuen Thread. Zuerst wird die abstrakte Methode beforeTask aufgerufen, um Vorbereitungen zu treffen, zum Beispiel Ergebnisse von einem alten Task zu löschen. TODO local Request??.
Die Ausfürhung der CSD Abfrage erfolgt in 3 Schritten. Erst wird der CSD Querry String generiert. Anschließend folgt eine Abfrage über die Anzahl der erwarteten Ergebnisse. Die Methode isValidTaskSize überprüft nun ob der Task ausgeführt werden soll oder ob das Ergebnis zu lange brauchen würde. Die Standard Implementierung vergleicht die erwarteten Ergebnisse mit einem Wert aus der Konfigurationsdatei. Ist der Task nicht zu groß wird die Methode querryCSD aufgerufen.
Die Ausfürhung der CSD-Abfrage erfolgt in 3 Schritten. Erst wird der CSD Querry String generiert. Anschließend folgt eine Abfrage über die Anzahl der erwarteten Ergebnisse. Die Methode isValidTaskSize überprüft nun, ob der Task ausgeführt werden soll oder ob das Ergebnis zu lange brauchen würde. Die Standard-Implementierung vergleicht die erwarteten Ergebnisse mit einem Wert aus der Konfigurationsdatei. Ist der Task nicht zu groß, wird die Methode queryCSD aufgerufen.
Die Methode wir den beiden Klassen CSDRequst und CSDSubscription, die vom CSDTask erben, implementiert. In dieser Methode wird die Verbindung zur CSD aufgebaut und durchsucht. Die Ergebnisse der Abfrage werden alle an den übergeben Result Handler weitergeleitet.
Die Methode wird von den beiden Klassen CSDRequst und CSDSubscription, die vom CSDTask erben, implementiert. % Hab ich den vorherigen Satz richtig korrigiert?
In dieser Methode wird die Verbindung zur CSD aufgebaut und durchsucht. Die Ergebnisse der Abfrage werden alle an den übergebenden Result Handler weitergeleitet.
Die Ergebnisse aus einer CSD Abfrage werden als Liste aus XML Dokumenten an die Methode newResults(List<Documents>) übergeben. Diese ist ein Teil des Interfaces isaac.lib.ResultHandler. Für den SBA und den CSDAdapter müssen zunächst einige allgemeine Informationen aus dem XML Dokument ausgelesen werden. Deshalb wurde die abstrakte Klasse ResultHandler in der CSDCommon Bibliothek angelegt (siehe Abbildung \ref{figure:klassenResult}. Für jedes neue Ergebnis wird zunächst alle allgemeinen Felder ausgelesen und anschließend die Methode newResult aufgerufen um das Ergebnis genau zu verarbeiten. Außerdem wird jeder Fehler der Bei der Auswertung passieren könnte abgefangen. Bricht die Verarbeitung eines Ergebnisses ab, so wird die Methode storeErrorProduct aufgerufen. In der Standard Implementierung wird das XML Dokument in einem Ordner abgelegt.
Die Ergebnisse aus einer CSD-Abfrage werden als Liste aus XML-Dokumenten an die Methode newResults(List<Documents>) übergeben. Diese ist ein Teil des Interfaces isaac.lib.ResultHandler. Für den SBA und den CSDAdapter müssen zunächst einige allgemeine Informationen aus dem XML Dokument ausgelesen werden. Deshalb wurde die abstrakte Klasse ResultHandler in der CSDCommon Bibliothek angelegt (siehe Abbildung \ref{figure:klassenResult}. Für jedes neue Ergebnis werden zunächst alle allgemeinen Felder ausgelesen und anschließend die Methode newResult aufgerufen, um das Ergebnis genau zu verarbeiten. Außerdem wird jeder Fehler abgefangen, der bei der Auswertung passieren könnte. Bricht die Verarbeitung eines Ergebnisses ab, so wird die Methode storeErrorProduct aufgerufen. In der Standard-Implementierung wird das XML-Dokument in einem Ordner abgelegt.
Ist ein Ergebnis verarbeitet wird im zugehörigen Task die Methode resultFinished aufgerufen. So kann der Task sobald alle Ergebnis ausgewertet sind die Methode afterTask aufrufen um einen eventuelle Nachbearbeitung durchzuführen.
Ist ein Ergebnis verarbeitet, wird im zugehörigen Task die Methode resultFinished aufgerufen. So kann der Task, nachdem alle Ergebnis ausgewertet sind, die Methode afterTask aufrufen, um einen eventuelle Nachbearbeitung durchzuführen.
Im CSD Adapter wird ein CSDRequest genutzt. Die Methoden beforeTask wird verwendet um alte Daten zu löschen. Außerdem wird wie auch in beforeTask und resultFinished eine Nachricht an den Goeviewer gesendet um ein Visuelles Feedback an den Nutzer zu geben, wie weit die Bearbeitung des Tasks vorangeschritten ist.
Im CSD-Adapter wird ein CSDRequest genutzt. Die Methoden beforeTask wird verwendet, um alte Daten zu löschen. Außerdem wird wie auch in beforeTask und resultFinished eine Nachricht an den Goeviewer gesendet, um ein visuelles Feedback an den Nutzer zu geben, wie weit die Bearbeitung des Tasks vorangeschritten ist.
Zur Kommunikation implementiert der CSDAdapter einen ConnectionServer und der Geoviwer einen ConnectionManager aus den MiddlewareTools. Das heißt die Kommunikation über neue Tasks und den Fortschritt läuft nicht über das Backend sondern direkt zwischen den Programmen. Im Gegensatz dazu werden alle erstellten Datenobjekte zusätzlich an das backen gesendet, sodass diese im System sind und alle angeschlossenen Programme die Daten darstellen könnten.
Zur Kommunikation implementiert der CSDAdapter einen ConnectionServer und der Geoviwer einen ConnectionManager aus den MiddlewareTools. Das heißt, die Kommunikation über neue Tasks und den Fortschritt läuft nicht über das Backend, sondern direkt zwischen den Programmen. Im Gegensatz dazu werden alle erstellten Datenobjekte zusätzlich an das Backend gesendet, sodass diese im System sind und alle angeschlossenen Programme die Daten darstellen könnten.
Die Verarbeitung der Ergebnisse im ResultHandler wird zunächst aufgeteilt. Der MainResultHandler erhält alle Ergebnisse und gibt diese je nach Typ des Ergebnisses an einen genaueren ResultHandler weiter. Sowohl der MainResultHandler als auch die spezifischen Handler erben von der allgemeinen Implementierung in der CSDCommons Bibliothek. In MainResultHandler wird die Methode newResults überschrieben um die Ergebnisse weiterzureichen.
Die Verarbeitung der Ergebnisse im ResultHandler wird zunächst aufgeteilt. Der MainResultHandler erhält alle Ergebnisse und gibt diese je nach Typ des Ergebnisses an einen genaueren ResultHandler weiter. % In welchem Sinne ``genauer''?
Sowohl der MainResultHandler als auch die spezifischen Handler erben von der allgemeinen Implementierung in der CSDCommons Bibliothek. In MainResultHandler wird die Methode newResults überschrieben, um die Ergebnisse weiterzureichen.
\subsection{SBA}
\subsection{SBA}
Im SBA ist zunächst die Auswahl-Oberfläche auf nur Bilder eingeschränkt. Andere Datentypen können nicht verarbeitet werden und sind deshalb auch nicht abfragbar.
Im SBA ist die Auswahl-Oberfläche zunächst nur auf Bilder eingeschränkt. Andere Datentypen können nicht verarbeitet werden und sind deshalb auch nicht abfragbar.