
\chapter{Rasterdateien georeferenzieren}\label{georeferencing_de}
\label{sec:rasterdaten_geokodieren}
\subsubsection{Aufgabenstellung}
Durch eine Georeferenzierung werden Daten mit einer Information (wir
erinnern uns: ein Datum über ein Datum = Metainformation) "uber ihre
Lage in einem bekannten Bezugssystem ausgestattet. Diese
Georeferenzierung kann sowohl Raster-, Vektor und Sachdaten betreffen.
Hierunter fällt Beispielsweise das Geokodieren von Karten, Luft- und
Satellitenbildern und allen anderen Raster-Geodaten.
Um aussagekräftige Ergebnisse bei Luftbildern zu
erhalten, sollten ausschließlich entzerrte Luftbilder, sogenannte
Orthophotos verwendet werden. Die Erzeugung von Orthophotos wird in einem
weiteren Kapitel besprochen. \index{Georeferenzierung}
\nomenclature{\bf Georeferenzierung}{\input{glossary-de/glossary-georef-de}}
\nomenclature{\bf Geokodierung}{siehe Georeferenzierung}

\subsubsection{Beispieldaten}
Zusätzlich zu den schon im Kapitel \ref{import_usgs_dem_de} Seite
\pageref{import_usgs_dem_de:grass} importierten Daten werden weitere Datensätze
des USGS Crater Lake Data Clearinghouse\footnote{http://craterlake.wr.usgs.gov/}
benutzt. Hier wären das Orthophoto Digital Orthophoto Quadrangle (DOQ) 
oder genauer ein Mosaic aus 12 7,5-Bogenminuten DOQs und
die digitalisierte Topographische Karte als Digital Raster Graphic
(DRG) in der selben Ausdehnung zu nennen. Da die Ost-West Ausdehnung
einer Bogenminute ihr Maximum am Äquator und ihr Minimum am Pol hat, 
jedoch die Nord-Süd Ausdehnung immer gleich ist (bei der Vorstellung
der Erde als Kugel), sind die DOQs und DRGs hier, gro"sz"ugig 
betrachtet rechteckig, nicht quadratisch.     
\subsubsection{Weitere Verwendung der Beispieldaten}
\nomenclature{\bf Bogenminute}{\input{glossary-de/glossary-bogenminute-de}}
\nomenclature{\bf Bogensekunde}{\input{glossary-de/glossary-bogensekunde-de}}

Die ab Seite \pageref{georeferencing_de:grass} ff bearbeiteten Daten werden in dem
folgenden Kapitel weiter benutzt:

\begin{itemize}

\item Kapitel \ref{computing_volumina_de} Seite
\pageref{computing_volumina_de:grass} ff.


\end{itemize}

 \section{Lösung mit GRASS}
 \label{georeferencing_de:grass}

Es wurde GRASS 5.0pre1 unter einer Debian GNU/Linux
Installation (woody) verwendet.\\


Man kann mehrere Fälle unterscheiden, im einfachsten soll eine
Rasterdatei in eine GRASS LOCATION importiert werden. Hierbei kann
es sich um ein Orthophoto, eine Karte oder ähnliches handeln.
Voraussetzung ist, da"s die Koordinatenbegrenzung der Datei bekannt
ist, da"s sie optimal auf das benutzte Koordinatensystem ausgerichtet
ist und da"s sie keine internen Verzerrungen aufweist. Diese
Voraussetzungen wird man in den seltensten Fällen haben, da z.B. eine
Karte auf einem Scanner nur beschränkt richtig, d.h. dem 
scannereigenen Koordinatensystem folgend, ausgerichtet werden kann
\cite{neteler}.
    \subsection{Rasterdatei einlesen}
    GRASS stellt unter anderen Importfilter f"ur TIFF, PPM und PNG
    -Dateien zur Verfügung.
\paragraph{TIFF-Format}
 Der Befehl {\tt r.in.tiff} \index{r.in.tiff} liest eine 8
 bit oder 24 bit - codierte Bilddatei im TIFF (tagged image
 file format) ein.  Die Eingabedatei wird mit {\tt input=}
 ausgewählt, die Rasterausgabedatei mit {\tt output=}
 benannt. Die Option {\tt -v} schaltet in den kommunikativen
 Modus, {\tt -b} importiert 24 bit codierte
 TrueColor-Dateien.  Die Anzahl der möglichen Farben kann
 mit {\tt nlev=} bestimmt werden.  M"oglich sind hier
 Angaben von 1-256 wodurch die Anzahl der Intensit"aten in
 den drei Farbkan"alen Rot, Gr"un und  Blau bestimmt wird.
 Grundeinstellung sind hier 20 Farbwerte also insgesammt
 \begin{math}20*20*20 = 8000 \end{math} verschiedene
 Farben. Sollen mehr Farben dargestellt werden kann  
 {\tt nlev=} erh2oht werden. Eine Eigenart von GRASS, 
 die mit der Version 5.1 abgestellt wird, ist aber, bei
 Farbtiefen gr"o"ser als 20 langsamer zu werden. 
  \index{RGB-Farbmodell}\\
\nomenclature{\bf TIFF}{\input{glossary-de/glossary-tiff-de}}
\nomenclature{\bf PPM}{\input{glossary-de/glossary-ppm-de}}
\nomenclature{\bf PNG}{\input{glossary-de/glossary-png-de}}
\nomenclature{\bf RGB Farbmodell}{\input{glossary-de/glossary-rgb-de}}


\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > r.in.tiff -v \
input=/tmp/test/luftbild.tif output=craterluftbild

\end{verbatim}
\end{kommando}

\paragraph{PPM-Format} 
 Um eine Portable Pixel Map (ppm) Datei einzulesen, benutzt
 man den Befehl {\tt r.in.ppm} \index{r.in.ppm}. Auch hier
 geben {\tt input=} und {\tt output=} die Namen der Ein- und
 Ausgabedatei an. Durch {\tt nlev=} wird die Anzahl der
 möglichen Farben begrenzt, die Voreinstellung ist 20, also
 wiederum 8000 Farben. Der Schalter {\tt -v} gibt
 Statusmeldungen über den Programmverlauf aus, {\tt -b}
 trennt die Ausgangsdatei w"ahrend des Importes in
 3 Grauwertdateien entsprechend den Farbkan"alen auf.
 Diese werden durch ein an den {\tt output=}
 Dateinamen jeweils angeh"angtes .r, .g und .b
 unterschieden.\\

\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > r.in.ppm \
input=/tmp/test/luftbild.ppm \
output=craterluftbild

\end{verbatim}
\end{kommando}

	 
\paragraph{PNG-Format}
 Das Importieren einer Portable Network Graphic (png) geschieht
 mit dem Befehl {\tt r.in.png}. \index{r.in.png}
 Mit {\tt input=} und {\tt output=} wird die Ein- und Ausgabedatei
 gew"ahlt. Der Ausgabedatei kann ein Titel {\tt title=}
 gegeben werden und das schon bekannte {\tt -v} schaltet
 in den verbose - Modus.

   \subsection{Georeferenzierung einer unverzerrten ausgerichteten Rasterdatei}
   Im diesem Fall reicht es zur Georeferenzierung aus, die Nord-, S"ud-,
   West- und Ostwerte der Bildkanten an GRASS zu "ubergeben. Dies
   geschieht mit dem Befehl {\tt r.support}, \index{r.support} da  die
   importierten Bilddateien als Raster gespeichert sind. Nach dem
   Aufruf an der Kommandozeile fragt der Befehl nach der zu
   bearbeitenden Rasterdatei. Durch Eingabe von {\tt list} k"onnen
   vorhandene Dateien angezeigt werden. Hat man die gew"unschte
   Datei ausgew"ahlt, fragt das Programm, ob der Header
   der Datei bearbeitet werden soll; dieses bejaht man.
   Die Aufforderung {\tt hit RETURN to continue} ignoriert man
   und dr"uckt die {\tt ESC-Taste} gefolgt von einem {\tt ENTER}
   um die Aufl"osungsparameter bearbeiten zu k"onnen.
   Nun bekommt man Informationen über die Auflösung der Rasterdatei
   {\em rows =} Reihen oder Spalten , {\em cols =} Zeilen und die
   Farbtiefe in Byte {\em bytes per cell}.  Durch Eingabe von {\tt
   ESC} und {\tt ENTER} kommt man zu der eigentlichen
   Georeferenzierung. Der CELL HEADER ist Träger der Geoinformation
   einer Rasterdatei in GRASS. \index{CELL HAEDER} Zur Orientierung
   wird die Ausdehnung der Region bzw.  des Mapset ausgegeben. Die
   Bestätigung der Eintragungen erfolgt durch {\tt ESC} gefolgt von
   {\tt ENTER}. Die weiteren Abfragen k"onnen mit {\tt ENTER}
   bestätigt werden.\\
\nomenclature{\bf Header}{\input{glossary-de/glossary-header-de}}

\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > r.support

Enter name of raster file for which you will create/modify support files
Enter 'list' for a list of existing raster files
Enter 'list -f' for a list with titles
Hit RETURN to cancel request
> craterluft
<craterluft>
Edit the header for [craterluft]? (y/n) [y]
Edit header for [craterluft]
cellhd compression: 1
3.0 compression indicated
pre 3.0 compression not indicated

hit RETURN to continue -->


Please enter the following information for [craterluft]

 4207   Number of rows
 4123_  Number of cols
 2____  Number of bytes per cell




           AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                            (OR <Ctrl-C> TO CANCEL)

\end{verbatim}
\end{kommando}

Importiert man die Rasterdaten mit dem schon in Kapitel
\ref{import_usgs_dem_de} vorgestellten Befehl
{\tt r.in.gdal} so wird gleich eine passende
{\em Default Region} erzeugt. So würden auch die Warnungen
{\em warning - north falls outside the default region} und 
{\em warning - east falls outside the default region} wegfallen.\\
 
\begin{kommando}
\begin{verbatim}


                           IDENTIFY CELL HEADER

           ============================= DEFAULT REGION ========
           |          Default North:1                          |
           |                                                   |
           |           =======  CELL HEADER  =======           |
           |           | NORTH EDGE:4775100____    |           |
           |           |                           |           |
 Def. West |WEST EDGE  |                           |EAST EDGE  | Def. East
 0         |550840_____|                           |592070_____| 1
           |           | SOUTH EDGE:4733020____    |           |
           |           =============================           |
           |                                                   |
           |          Default South:0                          |
           =====================================================
           PROJECTION: 1 (UTM)                        ZONE: 10

           AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                            (OR <Ctrl-C> TO CANCEL)

\end{verbatim}
\end{kommando}



\begin{kommando}
\begin{verbatim}


  projection:   1 (UTM)
  zone:         10
  north:       4775100
  south:       4733020
  east:        592070
  west:        550840

  e-w res:     10
  n-s res:     10

  total rows:             4200
  total cols:             4100
  total cells:      17,000,000

warning - north falls outside the default region
warning - east falls outside the default region

Do you accept this header? (y/n) [n] >y
header for [craterluft] updated

hit RETURN to continue -->
Update the stats (histogram,range) for [craterluft]? (y/n) [n] y

Edit the category file for [craterluft]? (y/n) [n] n
Create/Update the color table for [craterluft]? (y/n) [n] n
Edit the history file for [craterluft]? (y/n) [n] n
The null file for [craterluft] might indicate that some cells contain
no data. If null file for [craterluft] doesn't exist all 
zero cells in [craterluft]
are treated by GRASS application programs as no data.

Do you want to create/reset null file for [craterluft] so that
all cell values are considered valid data? (y/n) [n] n

Do you want to delete null file for [craterluft]
(all zero cells will then be considered no data)? (y/n) [n] n

\end{verbatim}
\end{kommando}

\subsection{Georeferenzierung einer unverzerrten nicht ausgerichteten Datei}
   Solche Daten ergeben sich oft durch das Scannen. Hierbei ist
   wichtig, da"s die Scanvorlage z.B. eine Karte geometrisch
   so einwandfrei wie m"oglich ist und auch durch den Scanvorgang
   keine unn"otigen Verzerrungen auftreten.
   Sind diese Voraussetzungen gegeben, ist bei der
   Georeferenzierung nur zu beachten, da"s es quasi 
   unm"oglich ist, die Vorlage auf dem Scanner
   exakt auszurichten. Die so entstehende Rotation
   kann durch eine einfache Transformation berichtigt werden.
   \paragraph{Vorbereitung einer Transformation}
   Zum Ausführen einer Transformation benötigt GRASS zwei {\em
   LOCATION} Umgebungen, eine für das Ausgangskoordinatensystem {\em
   start} und
   die andere für das Zielsystem {\em ziel}, dies ist im Normalfall das
   "`Arbeitssystem"', also die schon erstellte {\em LOCATION}. Für das
   Ausgangssystem wird eine neue {\em LOCATION} mit einem  {\em
   MAPSET} in  einem X,Y- Koordinatensystem erstellt. Dies
   entspricht ja den durch den Scanvorgang erzeugten, ebenen
   Koordinaten. In die Ausgangs - {\em MAPSET} wird die Rasterdatei
   je nach Dateiformat z.B. mit {\tt r.in.tiff} eingelesen. Die {\em
   REGION} - Parameter des {\em MAPSET} können mit dem Befehl {\em
   g.support rast=Rasterdateiname} angepasst werden.\\

\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > g.support rast=craterluft

\end{verbatim}
\end{kommando}

   Um das Transformieren und damit gleichzeitig das Geokodieren von
   mehreren Rasterdateien in einem Schritt zu erm"oglichen, wird {\em
   i.group} aufgerufen. Dies hat auch dann zu erfolgen, wenn nur
   eine Datei zu bearbeiten ist. Hier k"onnte eine Liste von 
   Rasterdateien erstellt werden die in eine Ziellocation 
   transformiert werden sollen. Im folgenden Dialog werden die zu
   transformierenden Dateien einer Gruppe zugeordnet.\\ 

\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > i.group

LOCATION: start             i.group             MAPSET:start

This program edits imagery groups. You may add data layers to, or remove
data layers from an imagery group. You may also create new groups

Please enter the group to be created/modified


GROUP:    start__________   (list will show available groups)


AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                (OR <Ctrl-C> TO EXIT)


start - does not exist, do you wish to create a new group?(y/n)[n] y


\end{verbatim}
\end{kommando}

\begin{kommando}
\begin{verbatim}

LOCATION: start       GROUP: start         MAPSET:start


Please mark an 'x' by the files to be added in group [start]

MAPSET: tutorial

x_ craterluft



           AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                            (OR <Ctrl-C> TO CANCEL)


Group [start] references the following raster file
-----------------------
        craterluft in start
-----------------------
Look ok? (y/n)y

\end{verbatim}
\end{kommando}


 Zum definieren
   des Zielsystems dient der Befehl {\tt i.target}, hier werden über
   einen Dialog zuerst die Dateien {\tt group} und dann die
   Ziel-{\tt LOCATION} benannt. Durch die Eingabe von {\tt list}
   werden alle m"oglichen Gruppen und Ziellocations/ -mapsets ausgegeben.\\



\label{sec:passpunkte}
\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > i.target

Please select the target LOCATION and MAPSET for group <start>


CURRENT LOCATION: start
CURRENT MAPSET:   start


TARGET LOCATION:  craterlake
TARGET MAPSET:    tutorial


(enter list for a list of locations or mapsets within a location)

AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                 (OR <Ctrl-C> TO CANCEL)

\end{verbatim}
\end{kommando}


\paragraph{Passpunkte}
Um die Transformationsparameter, in diesem Fall f"ur eine
Rotation und ggf. eine Maßstabsänderung, bestimmen zu k"onnen, sind
sogenannte Passpunkte zu bestimmen. Im Idealfall nimmt man hier die
Eckpunkte der Rasterdatei, z.B. einer Karte, für die natürlich
Koordinaten in Start- und Ziellocation/ -mapset vorliegen m"ussen.
Es k"onnen aber auch Punkte innerhalb der Rasterdatei, wie etwa Gitterkreuze
oder andere bekannte Punkte benutzt werden. Diese sollten nach
Möglichkeit ein Rechteck aufspannen und gro"sflächig "uber
den zu transformierenden Bereich verteilt sein.
In diesen Fällen reichen 4 Punkte aus, um die Transformation
mit einer Kontrolle durchzuführen.  Sollten keine Punkte bekannt sein,
kann man die Transformationsparameter durch Bestimmung identischer
Punkte in der Startdatei und einer schon im Zielsystem vorhandenen
geokodierten Datei erfolgen. \index{Passpunkte}
Als Beispiel k"onnten in einem Luftbild anhand einer schon in GRASS
vorhandenen georeferenzierten Karte so entsprechende Passpunkte
erzeugt werden.
Die Bestimmung der Passpunkte erfolgt mit Unterstützung eines
Monitores, der mit {\em d.mon} ge"offnet wird. Nach dem Starten des
Programmes {\em i.points} wird die Start - {\em GROUP} abgefragt. Im
Monitor kann jetzt per doppeltem Mausklick im Menü {\em Mapset
import} die zu transformierende Datei ausgewählt werden.  Links unten
im Monitor befindet sich eine Befehlszeile mit den durch Anklicken
ausw"ahlbaren Befehlen {\em Quit} zum Beenden, {\em ZOOM} für eine
Auschnittsvergrößerung, {\em PLOT RASTER} um weitere Rasterdateien
anzeigen zu lassen und schließlich kann mit {\em ANALYZE} eine
Aufstellung der Einzel- und Gesamtfehler der Passpunkte  ausgegeben
werden. In dieser Aufstellung können einzelne Passpunkte durch
Doppelklicken aus der Transformation entfernt oder hinzugefügt
werden. Als Minimum braucht GRASS 4 Punkte um eine Analyse zu
erstellen. Nach\cite{neteler} sollte der Gesamtfehler nicht
gr"o"ser sein als die halbe Aufl"osung ({\em GRID RESOLUTION}) des
Zielsystems.\\

\nomenclature{\bf Passpunkte}{\input{glossary-de/glossary-passpunkte-de}}
\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin >d.mon x0


GRASS:/spare/gisdata/grass/bin >i.points

\end{verbatim}
\end{kommando}

\paragraph{Nummerische Passpunkteingabe}
Als Passpunkt wird per Mauszeiger gegebenenfalls nach Vergrößerung
mit {\em ZOOM} ein Punkt ausgew"ahlt. Im Terminalfenster erscheinen
nun die sogenannten "'Tisch- oder
Bildschirmkoordinaten".\nomenclature{\bf Tischkoordinaten}{\input{glossary-de/glossary-tischkoordinaten-de}}
\index{Tischkoordinaten}\index{Bildschirmkoordinaten} Die
Aufforderung {\em Enter coordinates as east north: } beantworten wir
mit der Eingabe der Koordinaten des Punktes im Zielsystem
(Rechtswert Hochwert getrennt durch ein Leerzeichen). Sind per {\em
ANALYZE} Passpunkte entfernt worden, so werden sie durch einen roten
Punkt symbolisiert. Die für die Transformation benutzten Punkte
werden als grüner Punkt angezeigt. Sind die ausgegebenen Differenzen
weiterhin zu gro"s sollten ggf. die Passpunkte in einem stärker
vergr"o"sertem Ausschnitt ausgew"ahlt werden.
\nomenclature{\bf Bildschirmkoordinaten}{\input{glossary-de/glossary-bildschirmkoordinaten-de}}

\paragraph{Passpunktidentifikation}
Sollen anstatt vorhandener Passpunkte geokodierte Rasterdateien zur
Identifikation von Passpunkten benutzt werden, ruft man die fragliche
Datei mit {\em PLOT RASTER} auf (Abb. \ref{grass_georef_1}). Die
Aufforderung {\em Indicate which side should be plotted} wird mit
einem Mausklick in die rechte Monitorhälfte beantwortet. Im
folgenden Menü werden alle im Zielmapset vorhandenen Dateien
angezeigt. Die Auswahl geschieht durch einen Doppelklick.
Nun weren die Passpunkte im Start- und Zielsytem durch 
heranzoomen und anklicken identifiziert. Auch hier
kann mit {\em ANALYZE} die Übereinstimmung der Passpunkte
"uberpr"uft werden (Abb. \ref{grass_georef_2}). 
   
        \begin{figure}[h]
        \centering
        \includegraphics[width=0.8\textwidth]{georeferencing-raster/georef-1.eps}
        \caption[Screenshot GRASS Georeferenzierung 1]{\label{grass_georef_1}GRASS-Monitor
	w"ahrend einer Georeferenzierung}
        \end{figure}


        \begin{figure}[h]
        \centering
        \includegraphics[width=0.8\textwidth]{georeferencing-raster/georef-2.eps}
        \caption[Screenshot GRASS Georeferenzierung 2]{\label{grass_georef_2}Analyse der Passpunkte}
        \end{figure}

\paragraph{Transformation}
Die eigentliche Transformation geschieht durch den Befehl {\em i.rectify}.
Nach der Angabe der zu transformierenden Dateigruppe
fragt GRASS nach dem Grad der Transformation.  M"ogliche Eingaben
sind hier 1, 2 oder 3 für den Grad des von GRASS aufzustellenden
Transformationspolynomes. In unserem Fall einer Translation,
Rotation und Skalierung gleichen Faktors in x und y-Richtung ist
eine 1 einzugeben.  

  \subsection{Georeferenzierung einer verzerrten unausgerichteten Datei}
  Soll beispielsweise eine Rasterdatei, deren Scanvorlage von
  geringer geometrischer Qualität ist, georeferenziert werden, so kann
  GRASS dies durch eine höhergradige Transformation ausf"uhren.
  Hierbei werden nicht nur Rotationen, Verschiebungen (Translationen)
  und gemeinsame Maßstabsänderungen für alle Koordinatenrichtungen
  berücksichtigt, sondern auch Ver"anderungen in den Winkelbeziehungen
  der Achsen, verschieden große Maßstabsänderungen, Verschiebungen der
  einzelnen Achsen, sowie verschiedene Bezugssysteme für die H"ohe in
  verschiedenen Koordinatensystemen.
  In diesen Fällen m"ussen mindestens 6 (2. Grad) oder 10 (3. Grad) 
  Passpunkte eingegeben oder identifiziert werden und an {\em
  i.rectify} wird als Grad der Transformation eine {\tt 2} oder {\tt 3}
  übergeben.\\


\begin{kommando}
\begin{verbatim}

GRASS:/spare/gisdata/grass/bin > i.rectify

\end{verbatim}
\end{kommando}
 

        \begin{figure}[h]
        \centering
        \includegraphics[width=0.8\textwidth]{georeferencing-raster/craterkarte3d.eps}
        \caption[Screenshot GRASS Craterlake Topograhie 3D]{\label{grass_georef_3}Ergebniss einer
	Georeferenzierung: Karte und DEM im GRASS-Modul {\em Nviz}}
        \end{figure}


        \begin{figure}[h]
        \centering
        \includegraphics[width=0.8\textwidth]{georeferencing-raster/craterluft3d.eps}
        \caption[Screenshot GRASS Craterlake Luftbild 3D]{\label{grass_georef_4}Ergebniss einer
	Georeferenzierung: Luftbild und DEM im GRASS-Modul {\em Nviz}}
        \end{figure}


