\documentclass[a4paper,11pt]{scrartcl}

\usepackage{a4}
\usepackage{a4wide,times}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{german}
\usepackage{epsfig}
\usepackage{longtable}

\newcommand{\documentdate}{22. November 2002}
\newcommand{\documentversion}{0.9}

\newenvironment{quelltextzitat}{\noindent \scriptsize
	\begin{longtable}{|p{14cm}|}
	\hline
	\endfirsthead
	\hline
	\endlastfoot}{\end{longtable}}%\vspace{-0.1cm}}

%\usepackage{html} % latex2html extension package

% -----------------------------------------------------------------
\begin{document}

\parindent0cm

\title{
Freie Vektor-Geodaten Osnabrück \\
\large :: Version \documentversion ::\\
\small Projektdokumentation\\
}

\author{Monika Schunke}

%\date{}

\maketitle

\vfill

This document has been designed with \LaTeX{}.
It is available as source code, PDF- and HTML-format.\\


Version: \documentversion \\
Date: \documentdate

\vspace{2cm}

\begin{center}Copyright (c) 2002 Intevation GmbH.\end{center}

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation.
A copy of the license is included in the section entitled "`GNU
Free Documentation License"'.

\newpage

\tableofcontents

\newpage

% -----------------------------------------------------------------
\section{Aufgaben und Ziele des Projektes}

Das Projekt "`Freie Geodaten Osnabrück"' wurde im Rahmen eines Praxissemesters ins Leben gerufen.
Die Intevation GmbH möchte damit Freie Geodaten analog zu Freier Software gewinnen, sie der Öffentlichkeit zur Verfügung stellen und erste Anwendungen mit diesen Daten realisieren. Bei der Entwicklung von Software und Vorstellung dieser beim Kunden, fehlen bisher immer Beispieldatensätze um die Programme vorzustellen.

Als Grundlage für die freien Vektordaten werden Orthofotos der Stadt Osnabrück verwendet, welche digitalisiert und attributiert werden sollten. Besonderer Wert wird dabei auf die (soweit möglich) vollständige Digitalisierung der Strassen der Stadt Osnabrück gelegt. Desweiteren sollten Öffentliche Gebäude und andere wichtige Objekte erfasst werden. Die digitalisierten Daten sollen dann weiterhin sinnvoll attributiert und unter der GNU GPL Lizenz der Öffentlichkeit zur Verfügung gestellt werden.

Das Projekt soll in einem Zeitraum von 18 Wochen realisiert und die Daten weiterhin ständig aktualisiert werden.

Die verwendeten Programme mit denen die Daten gewonnen und verarbeitet wurden, sind ausschließlich Programme "`Freier Software"'. Um die Möglichkeiten im GIS Bereich aufzuzeigen wurde zur Digitalisierung der Daten das Programm GRASS verwendet, welches ein weitverbreitetes Programm zur Ver- und Bearbeitung von Raster- und Vektordaten ist.

In GRASS ist es derzeit nur möglich ein Attribut und einen dazugehörigen Attributnamen zu vergeben, deswegen muß die Attributierung mit einem anderen Programm durchgeführt werden. Es wurde entschieden, für die Attributierung Thuban zu verwenden.
Thuban ist ein neuentwickelter Geodatenbetrachter, welcher in seiner aktuellen Version ausreichende Funktionalität bietet um die Daten,bzw. die Datenbankdatei zu bearbeiten.
Verwendet wurde die CVS Version vom 28.08.02 ,welche noch zusätzliche Funktionen zu der offiziellen Version 0.1.2 enthält.

Die Basis GIS Anwendung wurde mit UMN Mapserver aufgesetzt.
Ziel ist es Daten zu gewinnen die jedem zugänglich gemacht werden können und nach der GNU GPL frei verändert und bearbeitet werden können.


% -----------------------------------------------------------------
\section{Digitalisierung mit GRASS}

Die Aufgabe in GRASS ist es, Vektordaten durch Digitalisierung ausgehend von stereographisch ausgewerteten Luftbildern zu gewinnen. Diese Orthophotos liegen in digitaler Form vor. Für die Durchführung wurden georeferenzierte jpg formate mit entsprechendem Worldfile(jpgw) zur Verfügung gestellt.

Ein prinzipielles Wissen davon wie man ein Projekt in GRASS anlegt,wird an dieser Stelle vorausgesetzt, einführende Tutorials dazu existieren bereits, siehe FreeGIS Tutorial Version 1.0 Kapitel 2 und im GRASS Buch OPEN SOURCE GIS: A GRASS GIS Approach von NETELER/MITASOVA.

Es wurde mit der GRASS VERSION 5.0.0pre 5 digitalisiert. Bei dem Export der Daten wurde auf die GRASS VERSION 5.0.0 umgestiegen, da Probleme bei dem Export von Polygonen bestanden. 

Eine Bedingung für die Digitalisierung ist, unterschiedliche Themen in eigene Layer zu speichern.D.h. Strassen, Grünflächen, Gewässer und Sehenswürdigleiten als jeweils eigene Layer zu erfassen.
% -----------------------------------------------------------------

\subsection{Import der Daten}


Da anfängliche Schwierigkeiten mit dem jpg Format existierten, wurde entschieden die jpg's in tiff Format umzuwandeln. Dies geschieht mit Hilfe des Paketes GDAL (Sammlung von Bibliotheken), welches auf dem Rechner installiert sein muss(es ist enthalten auf der FreeGIS CD). Das Programm gdal\_translate muß ausgeführt werden. Dies fasst man am besten in einem Script zusammen.

\begin{quelltextzitat}
\begin{verbatim}
set -x (um die Vorgänge sichtbar zu machen)
for f in `ls luftbilder\_split/*.jpg`; do
        gdal\_translate \$f tiff/`basename \$f .jpg`.tif
done
\end{verbatim}
\end{quelltextzitat}

Danach müssen die jpgw's in tfw umgewandelt werden, dies geschieht mit einem einfachem cp Befehl. 

Man muß darauf achten, dass die tif und tfw Dateien zum Schluß in einem Verzeichnis stehen, da GRASS sonst das jeweilige Worldfile nicht zu dem entsprechendem Bild zuordnen kann.
\newline

Der Import der Daten erfolgt mit dem Modul {\bf r.in.gdal}, dabei muß man darauf achten den -o flag anzugeben, da GRASS die aktuelle Projektion überschreiben muß. Das Orthofoto wird nun in den 3 Bändern Rot, Grün und Blau eingelesen. Damit das Bild auch in Echtfarben dargestellt werden kann, müssen die Werte in den einzelnen Farbtabellen der Bänder auf Grau gesetzt werden. Dies geschieht mit dem Modul {\bf  r.colors} für jedes einzelne Farbband. Zuvor sollte man die Region mit {\bf  g.region} auf eines der drei Bänder setzen. Nun kann man sich das Bild mit {\bf d.rgb} auf dem Monitor, welcher zuvor mit {\bf d.mon} gestartet wurde, ausgeben lassen.Wenn man mit nur einem Bild weiterarbeiten möchte,  muß man die einzelnen Farbbänder vereinen. Dies ist für die gewählte manuelle Digitalisierung zwingend erforderlich. Um die Bilder zu vereinen muß das Modul {\bf  r.composite} ausgeführt werden. Danach kann man sich das Bild mit {\bf d.rast} anzeigen lassen und die einzelnen Bänder mit {\bf r.remove }löschen.

Diese einzelnen Schritte kann man wiederum sehr gut in einem Script zusammenfassen und ausführen. 
Bei dem untenstehenden Beispiel ist es nur noch erforderlich den Dateinamen und den Namen des Luftbildes auf der Kommandozeile einzugeben, z.Bsp. luftimport 3494 :

\begin{quelltextzitat}
\begin{verbatim}
set -x
r.in.gdal -o input=/home/monika/os-data/raster/aerial-photos/tiff/\$1.tif
output=r\$1

g.region raster=r\$1.1
r.colors r$1.1 color=grey
r.colors r$1.2 color=grey
r.colors r$1.3 color=grey
d.mon start=x0
d.rgb red=luftbild.1 green=luftbild.2 blue=luftbild.3
r.composite r_map=r$1.1 g_map=r$1.2 b_map=r$1.3 output=r$1
d.rast map=$1 #oder d.rgb red=r$1.1 green=r$1.2 blue=r$1.3

g.remove rast=r$1.1
g.remove rast=r$1.2
g.remove rast=r$1.3
\end{verbatim}
\end{quelltextzitat}

% -----------------------------------------------------------------

\subsection{Methoden der Digitalisierung in GRASS}

GRASS bietet verschiedene Methoden um Rasterbilder in Vektorbilder umzuwandeln.
Um sich für eine Methode zu entscheiden, wird versucht mit allen vorhandenen
Methoden ein Ergebnis zu erzielen.  Die Ergebnisse dieser Versuche sollen an
dieser Stelle kurz aufgeführt werden. Im Anschluss daran wird die manuelle
Digitalisierung mit {\bf v.digit}, welche für die Aufgabe am geeignetsten erschien
ausführlich vorgestellt.\newline

\subsubsection{Automatische Digitalisierung} 
Bei dieser Variante der Digitalisierung werden die 3 Farbbänder des
Rasterbildes benötigt, sie dürfen also nicht gelöscht werden. Die Vektoren mit Hilfe 
einer Clusteranalyse erzeugt und dann erstellt.

Zuerst müssen die drei Bänder des Luftbildes mittels {\bf i.group} gruppiert werden,
dabei muß noch eine Subgruppe definiert werden.  Danach wird die Clusteranalyse
mit {\bf i.cluster} durchgeführt. Es können dabei verschiedene Parameter eingestellt
werden und es wird ein `"Result signature file"' angelegt, indem die Daten der
einzelnen Punkte gespeichert werden. Danach wird das Modul
{\bf i.maxlik }ausgeführt, welches die Klassifikation des Luftbildes durchführt.  Als
Ergebnis bekommt man eine klassifizierte Rasterkarte, welche schlecht bis gar
nicht geeignet ist um eine Vektorkarte zu erzeugen, da die Klassifizierungen
der Straßen sehr schlecht vorgenommen wurden. Deswegen braucht  man hier
 nicht auf die eigentliche Vektorisierung eingehen, sie würde aber im
Prinzip genauso funktionieren wie bei der halbautomatischen Methode.  \newline

\subsubsection{Halbautomatische Digitalisierung}

Bei der halbautomatischen Digitalisierung müssen Trainingsgebiete definiert
werden, an denen sich die einzelnen Module zum auffinden von
Klasseneigenschaften orientieren.  GRASS bietet hier zwei verschiedene Methoden 
ein Vektorbild zu erzeugen.

Bei der ersten Variante wird mit {\bf i.class} gearbeitet, dies ist ein Modul mit dem
über die Trainingsflächen und deren Historgramme eine Klassifizierung
vorgenommen wird. Vorher müssen die Luftbilder erst über {\bf i.group} gruppiert
werden.  Nachdem das Modul ausgeführt wurde, muß wie auch bei der automatischen
Digitalisierung {\bf i.maxlik} ausgeführt werden und so die einelnen Pixel der
jeweiligen Klasse zugeordnet werden.

Mit diesem Modul, gelingt es jeweils nur eine Klassifizierung durchzuführen,d.h. es können
nicht mehrer Klassen festgelegt werden. Dieses Ergebnis ist für die Anwendung
nicht brauchbar, da in einem Luftbild durch Schattenbildung,z.Bsp. die Strassen ziemlich
hell aber auch ziemlich dunkel dargestellt sein können.

Erschwerend kommt hinzu, dass dieses Modul in der Version GRASS 5.0.0 pre5
nicht ganz funktionstüchtig erscheint, da das Befehlsfenster bei jedem Aufruf
manuell größer gestellt werden muß um Befehle auszuführen.

Die zweite Möglichkeit eine Klassifizierung durchzuführen ist über {\bf r.digit}.Bei
diesem Modul müssen manuell Trainingsgebiete festgelegt werden. Vorher müssen
die Luftbilder erst über {\bf i.group} gruppiert werden.  Bei dem Aufruf von
{\bf r.digit} muß ein Monitor mit der Luftbildkarte geöffnet sein, dann wird A für
neue Area ausgewählt. Nun kann man mit der Maus ein Trainingsgebiet festlegen.
Dabei muß die Karte schon soweit herangezoomt sein, dass man nur noch mit
Mausklicks das Gebiet festlegen muß.  Bei jedem Aufruf von {\bf r.digit} kann nur
eine Klasse festgelegt werden, d.h. um mehrere Klassen zu erzeugen muß {\bf r.digit}
mehrfach ausgeführt werden. Jedesmal wenn {\bf r.digit} ausgeführt wird, legt GRASS
eine neue Rasterkarte an. Um mehrere dieser Rasterkarten zu vereinen muß {\bf r.mapcalc} mit folgendem
Parametern ausgeführt werden:

\begin{quelltextzitat}
\begin{verbatim}
r.mapcalc
result='if(isnull(digit.1),digit.3,digit.1)'. 
\end{verbatim}
\end{quelltextzitat}

Wenn man diese Trainingsgebiete nun vorliegen hat, führt man {\bf r.gensigset} aus. Mit diesem Modul
wird die Clusteranalyse anhand der Trainingsgebiete durchgeführt. Um dann
die Punkte wieder einer Klasse zuzuordnen wird in diesem Fall {\bf i.smap}
ausgeführt.

Als Resultat bekommt man eine Rasterkarte mit einer brauchbaren Klassifizierung
für die Straßenachsen.  Man sollte die Klassen der Häuser auf `"no data"' Werte
setzen, da sie so nicht mit als Vektoren umgewandelt werden. Die Umwandlung dieser `"no data"' Klassen ist auch nicht nötig , da bei der Umwandlung unbrauchbare Ergebnisse entstehen würden.
\newline

Die eigentliche Umwandlung in eine Vektorkarte wird nun mit {\bf r.thin}
und anschließend mit {\bf r.line} durchgeführt. Wobei {\bf r.thin} eine
Skelettierung der Rasterkarte durchführt und die no data Punkte herausnimmt.
Das Modul {\bf r.thin }kann immer ohne Probeleme ausgeführt werden, es erzeugt jedoch
eine Karte bei der noch zuviel kleinste Linien vorhanden sind, sodass man
Probleme bei ausführen von{\bf r.line} bekommt.Es tritt dann folgender Fehler auf: bitte führen sie {\bf r.thin} durch.
Somit kommt man zu dem Ergebnis, dass man die Vektorisierung auch mit der halbautomatischen Methode nicht durchführen kann.


\subsubsection{weitere Methoden und Übersicht}

Ein weiterer Versuch die Digitalisierung durchzuführen ist über {\bf r.poly}. Dabei
bekommt man auch kein brauchbares Ergebnis, da man {\bf v.support} zwar ausführen
kann es sich aber, wahrscheinlich aufgrund der Größe, nicht vollständig
ausführen lässt.

Im folgenden noch eine Übersicht über die Methoden der Digitalisierung.

\begin{center}
\epsfig{file=images/uebersichtdigit.ps}
\end{center}


% -----------------------------------------------------------------

\subsubsection{Manuelle Digitalisierung in GRASS}

Die manuelle Digitalisierung erfolgt mit dem Modul {\bf v.digit} und ist nach einer geringen Eingewöhnungszeit recht gut beherschbar.
Vorher sollten aber noch ein paar vorarbeiten gemacht werden.

Da eine große Anzahl von Luftbildern digitalisiert werden soll, ist es sinnvoll mehrere Luftbilder zusammenzufassen. Dies macht die manuelle Digitalisierung ein wenig komfortabler und spart Zeit, da nicht so viele Überschneidungsbereiche existieren.

Es gibt 2 verschiedene Möglichkeiten Rasterbilder zu verschmelzen, die erste ist mit dem Modul {\bf r.mapcalc}. Zuvor muß man die Region auf die Eckpunkte der neuen Rasterkarte einstellen. Das Modul {\bf r.mapcalc} kann unterschiedlichste Berechnungen durch arithmetische Ausdrücke an max. 2 Rasterkarten durchführen, sowie neue Karten berechnen und erstellen. In dem Anwendungsbeispiel geschieht dies mit einer if Bedingung. Nach Ausführung der Verschmelzung ist ein Rasterbild mit 2 Farbtabellen entstanden. Da ein solches Bild mehr Rechnerzeit benötigt,wenn man es anzeigen und bearbeiten möchte, ist es nötig die Farbtabelle auf eins der vorherigen Bilder zu setzen. Dies geschieht mit dem Modul {\bf r.colors}.

\begin{quelltextzitat}
\begin{verbatim}
g.region n=5794000 s=5793000 e=3436000 w=3434000
r.mapcalc result = 'if(isnull(r3493),r3593,r3493)'
r.colors map=result rast=r3493
\end{verbatim}
\end{quelltextzitat}

Die zweite Möglichkeit Rasterbilder zu verschmelzen ist mit {\bf r.patch}. Dabei ist es möglich mehrere Rasterkarten gleichzeitig zu verschmelzen. Man sollte aber nicht mit mehr als 4 Karten arbeiten, da sonst die Zeit zur Berechnung der Karte sehr groß ist. Vorher ist es auch nötig die Region mit {\bf g.region} auf die Eckpunkte der Region zu setzen. Hinterher muß auch wie bei {\bf r.mapcalc} die Farbtabelle der neuen Karte mit {\bf r.colors} angepasst werden.

\begin{quelltextzitat}
\begin{verbatim}
g.region n=5794000 s=5793000 e=3436000 w=3432000
r.patch input=r3293,r3393,r3493,r3593 output=comp.1
r.colors map=comp.1 rast=r3293
\end{verbatim}
\end{quelltextzitat}

Man kann eine große Menge an Luftbildern (ca.23) verschmelzen, aber man sollte sich sehr gut überlegen wie man die Bereiche wählt. Ab einer Anzahl von ca.16 Rasterbildern, merkt man das mehr Rechenzeit benötigt wird um das Bild später in {\bf v.digit} aufzubauen. \newline

Nun kann man anfangen mit dem Modul {\bf v.digit} zu arbeiten, zuvor muß ein Monitor mit {\bf d.mon start=x0} gestartet werden.
Als erstes muß man wählen wie man digitalisieren möchte, dabei sollte die `"3"' für `"none"', also Bildschirmdigitalisierung, angegeben werden. Danach wird nach einer Vektorkarte gefragt. Hier kann man eine neue Vektorkarte anlegen, indem man einfach den Namen der Karte angibt. Der nächste Bildschirm der sich öffnet beinhaltet wichtige Basisinformationen für die Vektorkarte,z.Bsp. den Maßstab und die Kartengrenzen. Diese sollten auch richtig angegeben werden, da sonst keine korrekte Anzeige der Karte möglich ist und auch die `"Snappingwerkzeuge"' nicht richtig funktionieren.
Wenn man alle benötigten Eingaben getätigt hat, gelangt man in das Hauptmenü. Die Navigation darin ist ein wenig gewöhnungsbedürftig, aber nach einer Weile kommt man damit sehr gut zurecht. Um in die Untermenüs zu kommen muß man jeweils den Anfangsbuchstaben des Menüs GROSS eingeben und um die Untermenüs zu verlassen muß man q eingeben. Das Zoommenü ist von allen Untermenüs aus erreichbar. 

\begin{quelltextzitat}
\begin{verbatim}
 ----------------------------------------------------------------------------- 
| GRASS-DIGIT Modified  4.10                                       Main menu  |
|-----------------------------------------------------------------------------|
| MAP INFORMATION                                | AMOUNT DIGITIZED           |
|   Name:                                        |   # Lines:         0       |
|   Scale:        5000                           |   # Area edges:    252     |
|   Person:                                      |   # Sites:         0       |
|   Dig. Thresh.: 0.0300 in.                     | - - - - - - - - - - - - - -|
|   Map Thresh.:  3.8100 meters                  |   Total points:    4289    |
|                                                |                            |
|-----------------------------------------------------------------------------|
| OPTIONS:                                       |                            |
|                                                |                            |
|     Digitizer:     Disabled                    |                            |
|                                                |                            |
|                                                |                            |
|                                                |                            |
|                                                                             |
 ----------------------------------------------------------------------------- 
| Digitize  Edit  Label  Customize  Toolbox  Window  Help  Zoom  Quit  *  !  ^|
|                                                                             |
|                                                                             |
|GLOBAL MENU: Press first letter of desired command. [Upper Case Only]        |
 ----------------------------------------------------------------------------- 
\end{verbatim}
\end{quelltextzitat}

Als erstes soll das Rasterbild, von welchem digitalisiert werden soll, in den Hintergrund geladen werden. Dafür muß man in das Untermenü Custumize wechseln (C) und darin Select a Backdrop Cellmap (B) wählen, danach einfach noch den Namen des Rasterbildes angeben und schon wird es auf dem Monitor ausgegeben. Nun kann man mit (D) in das eigentliche Digitalisierungsmenü wechseln, mit drücken der Leertaste springt man in den eigentlichen Digitalisierungsvorgang. Aber zuvor sollte man noch einige Grundeinstellungen überprüfen.

Zuerst sollte man sich sicher sein ob man Linien, Flächen oder Punkte digitalisieren möchte. Die Grundeinstellung `"TYPE"' liegt bei area. VORSICHT bei jedem Neustart von v.digit wird diese Grundeinstellung wieder vorgenommen. Möchte man also Linien digitalisieren so muß man mit Toggle Type (t) den TYPE auf line stellen. Desweiteren sollte darauf geachtet werden das AutoLabel DISABLED ist, da man keine Attributierung vornehmen möchte.


\begin{quelltextzitat}
\begin{verbatim}
 ----------------------------------------------------------------------------- 
| GRASS-DIGIT Modified  4.10                              Digitizing menu     |
|---------------------------------------------------------------------------- |
|  Mouse Digitizer                                | AMOUNT DIGITIZED          |
|                                                |   # Lines:         0       |
|                                                |   # Area edges:    252     |
|                                                |   # Sites:         0       |
|                                                | - - - - - - - - - - - - - -|
|                                                |   Total points:    4289    |
|-----------------------------------------------------------------------------|
| Digitize options:                              | CURRENT DIGITIZER PARAMS.  |
|                                                |                            |
|  <space> Digitize                              |  MODE       TYPE           |
|    - Toggle MODE                               |   >POINT<     line         |
|  t - Toggle TYPE                               |    stream    >AREA EDGE<   |
|  l - Auto Label                                |               site         |
|  q - Quit to main menu                         |                            |
|                                                   AutoLabel:  DISABLED      |
 ----------------------------------------------------------------------------- 
| Edit  Label  Customize  Toolbox  Window  Help  Zoom  *  !  ^                |
|                                                                             |
|                                                                             |
|GLOBAL MENU: Press first letter of desired command. [Upper Case Only]        |
 ----------------------------------------------------------------------------- 
\end{verbatim}
\end{quelltextzitat}

Wenn man diese Einstellungen überprüft hat kann es mit (space) losgehen.
Es öffnet sich ein Menü, zur Orientierung wie man mit der Maus, Linien bzw. Punkte setzen muß und zoomen kann. Dies ist recht einfach verständlich und nach kurzer Eingewöhnungszeit recht schnell zu bedienen.

An dieser Stelle sollen noch ein paar grundlegende Regeln für die Digitalisierung mit v.digit in GRASS genannt und erläutert werden.


1. Es muß darauf geachtet werden, dass an sich kreuzenden Linien immer ein Knotenpunkt gesetzt wird. Da es im nachhinein schwer möglich ist diese Knotenpunkte zu erzeugen. Es existieren zwar Werkzeuge wie {\bf v.trim} und {\bf v.spag}. 

Aber in der von uns verwendeten Version funktioniert {\bf v.trim} leider nicht. {\bf v.spag} setzt beim ausführen an jede Kreuzung einen Knotenpunkt, dies ist aber für die Anwendung nicht erwünscht, da z.Bsp. an Brücken kein Knotenpunkt gesetzt werden soll um für eine spätere Anwendung z.Bsp. für Netzverfolgungen keine falschen Verbindungen zu schaffen. Deswegen ist es zwingend erforderlich wirklich an jede Kreuzung die keine Brücke o.ä. ist, einen Knotenpunkt zu setzen, dies ist einfacher als dies im nachhinein noch von Hand zu bearbeiten.
\newline

2. Es existiert ein Snappingwerkzeug um Linien auch wirklich in einem Punkt enden zu lassen. Die Snapdistance kann man unter (C) (s) einstellen, sie ist aber in Ihrer Voreinstellung vollkommend ausreichend. Man kann durch die Farbgebung, sehr gut nachvollziehen ob Linien wirklich in einem Punkt enden. Und man sollte darauf achten, dass auch wirklich gesnappt wird, sonst muß man dies im nachhinein noch per hand verändern. Dies ist wiederum sehr Zeitaufwendung und kann durch das Snappingwerkzeug vermieden werden.
\newline

3. Die Farbgebung der Linien und Punkte kann man unter (C) (C) einstellen. Man kann die Einstellungen so vornehmen, dass z.Bsp. Punkte mit nur einer Linie farbig anders dargestellt werden als Punkte mit mehreren Linien. Dies ist sehr wichtig für die Snapfunktionen und kann helfen Fehler bei der Digitalisierung aufzudecken. Aber auch für Linien können diese Farbeinstellungen sehr wichtig sein, z.Bsp. kann man sehr gut überprüfen, ob man auch als Type line oder area eingestellt hat. 
\newline

4.Für Nachbesserungen oder Aktualisierungen exitiert ein Untermenü zur Bearbeitung der digitalisierten Elemente (E).
Man kann Linien wieder löschen (r), diese sind dann allerdings nur für den Nutzer gelöscht, in der Datei aber noch vorhanden. Um sie endgültig zu löschen muß {\bf v.spag} mit dem -i Flag ausgeführt werden. VORSICHT: darauf achten das {\bf v.spag -i} angegeben wird, sonst werden noch Knotenpunkte an sich kreuzenden Linien gesetzt, obwohl man dies gar nicht möchte.
Es können auch Linien gebrochen und somit Knotenpunkte gesetzt (b) oder verschoben (m) werden. Eine manuelle Nachbearbeitung ist also jederzeit möglich, aber sehr zeitintensiv.\newline


Wenn man mit dem digitalisieren fertig ist, kann das Modul {\bf v.digit} verlassen werden. Um die gelöschten Linien aus der Vektorkarte zu entfernen, führt man {\bf v.spag -i} aus. Um dann noch die Topologie der Elemente der Karte zu bilden muß {\bf v.support} durchgeführt werden, geschieht dies nicht, kann die Karte weder exportiert noch weiterbearbeitet werden. Wenn man sich die Vektorkarte in einem Monitor anzeigen lassen möchte, sollte man die Eckpunkte des Monitors mit {\bf g.region} wieder einstellen.


% -----------------------------------------------------------------

\subsection{Export der Daten}
Der Export der Daten erfolgt mit dem Modul {\bf v.out.shape}.
Dabei sollte bei Polygonen darauf geachtet werden, dass vorher alle Polygone mit {\bf v.alabel} ein Attribut zugewiesen bekommen. Der Wert des Attributes wird nicht weiterverwendet, aber  muß für GRASS existent sein um den Export durchführen zu können.
GRASS legt dann die 3 zu dem Shapefile gehörenden Dateien ( .shp .shx und .dbf ) in dem Arbeitsverzeichnis an.\newline

Anmerkung: beim arbeiten mit GRASS sollte man darauf achten, dass die Region relativ oft verändert wird, unter anderem auch beim zoomen. Dadurch können schnell Fehler auftreten, wie z.Bsp.die Ausgabe eines leeren Bildschirmes. Möchte man also verschiedene Module benutzen sollte man immer kontrollieren, ob noch die richtige Region eingestellt ist und  vorsichtshalber nochmal {\bf g.region} durchführen.\newline


\begin{tabular}[]{|cccccccc|}\hline
\multicolumn{8}{|c|}{\Large \bf Digitalisierung in GRASS}\\
\multicolumn{8}{|c|}{}\\
\multicolumn{8}{|c|}{\large \bf Übersicht der verwendeten Module}\\\hline\hline
\multicolumn{8}{|l|}{Import}\\
r.in.gdal & g.region & r.colors & r.composite &\multicolumn{4}{c|}{ }  \\\hline\hline
\multicolumn{8}{|l|}{Digitalisierung}\\
d.mon & g.region & r.patch & r.colors & v.digit & g.region & v.spag -i & v.support\\\hline\hline
\multicolumn{8}{|l|}{Export}\\
(v.alabel) & v.out.shape &\multicolumn{6}{c|}{ } \\
(nur bei Polygonen) & &\multicolumn{6}{c|}{ }\\\hline\hline
\multicolumn{8}{|l|}{Visualisierung}\\
d.mon & g.region & d.rast & d.vect &\multicolumn{4}{c|}{ }\\\hline
\end{tabular}


% -----------------------------------------------------------------

\section{Attributierung mit Thuban}


Die Aufgabe der Attributierung ist es, den gewonnenen Daten, in diesem Fall die Strassenachsen und andere Objekte wie Gewässer und Sehenswürdigkeiten, sinnvolle Eigenschaften zuzuweisen. Dies geschieht in .dbf Dateien, welche zu den Shapefiles dazugehören. Auf das Datenmodell wird im folgenden noch eingegangen.
\newline

Um die .dbf Datei bearbeiten zu können,stehen 2 tools unter\newline
\verb"  http://www.usf.uos.de/~fkoorman/software/dbftools.de.html"\newline
zur Verfügung
Um sich die Dateien gut anschauen zu können, muß man sie mit dbf2txt in Textdateien umwandeln.
Eine Textdatei kann man am besten in einem Editor bearbeiten. Man fügt die noch fehlenden Attributspalten ein und benennt sie um.

Wenn man sich die .dbf Dateien genauer anschaut, stellt man fest das sie nur aus 2 Spalten bestehen, nämlich der ID, welche Fortlaufend durchnummeriert ist und einer Spalte genannt CAT\_ID in der keine Werte stehen. 
Nach dem bearbeiten der jeweiligen .txt Datei wandelt man die Datei mit txt2dbf wieder in ein .dbf Datei um.
\newline

Nun kann man mit der eigentlichen Attributierung anfangen, man muß Thuban aufrufen und die verschiedenen Layer die man angezeigt haben möchte hineinladen. Dann kann man sich die dazugehörige Tabelle anzeigen lassen. Mit dem Identify Shape kann man sich die jeweilige Linie anzeigen lassen und dort auch die Veränderungen vornehmen. Die Attributierung führt man dann an jeder Linie einzeln durch.

\subsection{Das Datenmodell}
Für die vorliegenden Daten wurde folgendes Datenmodell verwendet.
In der .dbf Datei der Strassen wurden 5 Attribute spezifiziert. Dies sind der eindeutige Schlüssel (ID), der Strassenname (Str\_name), welcher als Zahl gehalten wird, um doppelte Datenhaltung zu vermeiden. Die Strassennamen sind in der Datei strassennamen.dbf enthalten. Desweiteren der Strassentyp (Str\_typ), welcher auch als Zahl vergeben wird und auf die Datei strassentyp.dbf zurückgreift. Es werden die Ebenen, für Brücken gespreichert und es wird ein Attribut Spuren angelegt, welches in unserer Anwendung aber nicht weiter attributiert wird.


Da es in der aktuellen MapserverVersion (Version 3.6) nicht möglich ist, einen join von mehreren .dbf Dateien durchzuführen, ist man gezwungen die Dateien mit den Strassennamen und den Strassen, möglichst schon vor der Mapserveranwendung zu Joinen. Dies ist nötig, damit man sich später auch die Strassennamen anzeigen lassen kann.

Dies soll an dieser Stelle exemplarisch gezeigt werden.
Zum bearbeiten der .dbf Files müssen diese mit 
dbf2txt in Textdateien umgewandelt werden, diese sehen dann in etwa folgendermaßen aus.
\begin{quelltextzitat}
\begin{verbatim}
strassen.txt 				strassenname_tab.txt

#ID,Str_ID,Str_typ,Ebene,Spuren		#Str_ID,Strassenname
1,1,0,0,0				0,nicht attributiert
2,2,3,0,0				1,kein Name vorhanden
3,4,2,0,0				2,Georgstraße
4,0,1,0,0				3,Hasestraße
5,3,4,0,0				4,Torwall

\end{verbatim}
\end{quelltextzitat}

Nun muß ein join durchgeführt werden, bei dem die Strassennamen an die strassen.txt angefügt werden. D.h. die 2. Spalte der strassen.txt und die 1.Spalte der strassenname\_tab.txt müssen miteinander gejoint werden.

\begin{quelltextzitat}
\begin{verbatim}
strassenjoin.txt
#ID,Str_ID,Str_typ,Ebene,Spuren,Strassenname
1,1,0,0,0,kein Name vorhanden
2,2,3,0,0,Georgstraße
3,4,2,0,0,Torwall
4,0,1,0,0,nicht attributiert
5,3,4,0,0,Hasestraße

\end{verbatim}
\end{quelltextzitat}

Um den Join ausführen zu können, muß in der strassen.txt die 2. Spalte an die erste Stelle gesetzt werden und dann nach dieser Spalte sortiert werden.
Dies geschieht in der Kommandozeile mit:

\begin{quelltextzitat}
\begin{verbatim}
sed -e 1,$ s/\(.*\),\(.*\),\(.*,.*,.*\)/\2,\1,\3/ > strassen.txt
\end{verbatim}
\end{quelltextzitat}

nun kann man nach der ersten Spalte sortieren, wobei man darauf achten muß, dass das Ergebnis in eine Datei geschrieben wird und das eine numerische Sortierung vorgenommen wird.

\begin{quelltextzitat}
\begin{verbatim}
sort strassen.txt -o strassen_sort -n
\end{verbatim}
\end{quelltextzitat}

Da die strassenname\_tab schon sortiert ist kan nun der Join erfolgen, dabei muß darauf geachtet werden, dass auch alle Werte die nicht in der 2. Datei vorkommen mit übernommen werden.

\begin{quelltextzitat}
\begin{verbatim}
join -t, -n -a 1 strassen_sort strassenname_tab.txt >strassenjoin.txt
\end{verbatim}
\end{quelltextzitat}

Ist dies geschehen muß man noch in einem Editor die Spalten der strassenjoin.txt zurücktauschen und wieder nach der ersten Spalte sortieren. Danach muß man nur noch die Textdatei in .dbf umwandeln und dem zugehörigen Shapefile mitgeben.

\begin{quelltextzitat}
\begin{verbatim}
sed -e 1,$ s/\(.*\),\(.*\),\(.*,.*,.*,.*\)/\2,\1,\3/  > strassenjoin.txt
sort strassenjoin.txt -o ergebnis.txt -n
txt2dbf -I10 -I10 -I10 -I10 -I10 -C50 -d, ergebnis.txt ergebnis.dbf
\end{verbatim}
\end{quelltextzitat}

Für den Layer der Sehenswürdigkeiten wurden Punktdaten digitalisiert, welche wie folgt attributiert werden: ID , den Punkttypen, welcher als Zahl vergeben wird und mit der Datei Punkttyp.dbf verknüpft ist. Desweiteren wird der Name als Attribut vergeben.

Für den Gruenflächenlayer werden Polygone digitalisiert und wie folgt attributiert: ID, TYP, welcher mit der Datei gruenpolytyp.dbf verknüpft ist und gegebenenfalls ein Attribut Name.

Die Gewässer sind in 2 Layer aufgeteielt. Die Fließgewässer sind in der Datei gewaesserlinien enthalten. Die vergebenen Attribute sind ID und Name, welcher wiederum als Zahl gespeichert ist und mit der Datei gewaesserlinien.dbf verknüpft ist. Der zweite Layer ist gewaesserpoly mit den Attributen ID und Name.
 
% -----------------------------------------------------------------
\section{Mapserveranwendung}
Die Aufgabe besteht darin die gewonnenen Freien Geodaten in geeigneter Weise als Web Mapping Anwendung zur Verfügung zu stellen.
Als Programm dient der UMN Mapserver,welcher aus mehreren Komponenten besteht. Auch hier gibt es sehr gute Einführungen auf  den Heimatseiten des Mapservers http://mapserver.gis.umn.edu/index.html
Als erstes wird eine HTML Seite benötigt, von der der Mapserver angestoßen werden muß. Dabei müssen bestimmte Parameter an den Mapserver übergeben werden,wie z.Bsp. wo sich das Programm befindet und welche Layer dargestellt werden sollen.
Am besten löst man dieses Problem mit einem Link oder mit einem Button:

\begin{quelltextzitat}
\begin{verbatim}
 <form method=get action="/cgi-bin/mapserv">
    <input type="hidden" name="map" value="/spare/mapserver/
    		osnabrueck/monika/osnabrueck.map">
    <input type="hidden" name="layers" value="sonststrassen,
    		nebenstrassen,khauptstrassen,bundesstrassen,
		autobahn,Beschriftung">
    <input type="hidden" name="program" value="/cgi-bin/mapserv">
    <input type="hidden" name="map_web_imageurl" value="/tmp/">
    <p align=center>
    <input type="submit" value="Stadtplan Osnabr&uuml;ck">
 </form>

 
<a href="/cgi-bin/mapserv?map=%2Fspare%2Fmapserver%2Fosnabrueck
	%2Fmonika%2Fosnabrueck.map&layers=sonststrassen+nebenst
	rassen+hauptstrassen+bundestrassen+autobahn+Beschriftung&program
=%2Fcgi-bin%2Fmapserv&map_web_imageurl=%2Ftmp%2F"><b>Mapserver</b></a>
\end{verbatim}
\end{quelltextzitat}

Um nun diesen Link ,bzw. diesen Button ausführen zu können benötigt der Mapserver ein sogenanntes Mapfile( hier osnabrueck.map). In diesem werden Grundeinstellungen des Mapservers eingestellt und Legende, Maßstab, Layer, Beschriftung usw. festgelegt.
Desweiteren wird ein Template benötigt, indem die Darstellung der Ergebnisse des Mapservers geregelt wird. Dies ist eine HTML Datei mit möglichkeiten auf den Mapserver zuzugreifen.
Möglichkeiten zur Gestaltung und Funktionen des Mapfiles und Templates findet man auf unter http://mapserver.gis.umn.edu/doc36/

%\begin{quelltextzitat}
\begin{verbatim}
#Mapfile für freie Geodaten Osnabrück

NAME Osnabrueck
STATUS ON
SIZE 700 700
EXTENT 3427000 5787000 3444200 5801000 
UNITS METERS
SHAPEPATH "data"
SYMBOLSET "symbol.file"
FONTSET "fonts/fonts.list"
IMAGECOLOR 250 252 217


# WEB TEIL
WEB
  TEMPLATE "osnabrueck.html"
  IMAGEPATH "/tmp/"
  IMAGEURL "/tmp/"
  LOG "/tmp/osnabrueck.log"
END


#REFERENCEKARTE
REFERENCE
 IMAGE "/spare/mapserver/osnabrueck/monika/java/icons1/reference1.png"
 EXTENT 3427000 5787000 3444200 5801000
 SIZE 706 596
 STATUS ON
 COLOR -1 -1 -1
 OUTLINECOLOR 255 0 0
END 

#LEGENDE
LEGEND
  STATUS ON
  KEYSIZE 18 12
  IMAGECOLOR 160 200 255
  LABEL
    TYPE BITMAP
    SIZE MEDIUM
    COLOR 0 0 0
  END
  TEMPLATE "legendme.html"
END

#MASSSTAB
SCALEBAR
  STATUS TRUE
  STYLE 1
  LABEL
   COLOR 0 0 0
  END
  UNITS METERS
END

#1.Layer GRÜNFLACHEN
LAYER 
 NAME "Grünflächen"
 DATA "gruenpolyl"
 TYPE POLYGON
  CLASS
   NAME "Wald"
   COLOR 30 154 64
  END
 STATUS ON
END


#2.Layer Seen mit Fließgewässer zusammen in einer Gruppe
LAYER 
 NAME "gewaesserpolyl"
 DATA "gewaessepoly"
 GROUP "gewaesser"
 TYPE POLYGON
  CLASS
   NAME "See"
   COLOR 14 49 175
  END
 STATUS ON
END

#3.Layer Fließgewässer mit Seen in einer Gruppe
LAYER 
 NAME "gewaesserlinien"
 DATA "gewaesserlinien"
 GROUP "gewaesser"
 SYMBOLSCALE 2000
 TYPE LINE
  CLASS
   NAME "Fließgewässer"
   COLOR 24 64 206
   SYMBOL "str"
   SIZE 30
   MINSIZE 1
   MAXSIZE 30
  END
 STATUS ON
END


#Strassenlayer sind alle getrennt da damit eine bessere Zeichnung der Linien möglich ist
#4. Layer sonst. Strassen
LAYER
 NAME "sonststrassen"
 DATA "strassen"
 TYPE LINE
 SYMBOLSCALE 2000
CLASS
    NAME "sonstStrassen"
    SYMBOL "str"
    COLOR 200 200 200 
    MINSIZE 1
    MAXSIZE 15
    SIZE 15
   END
  STATUS ON
END

#5. Layer Nebenstrassen
LAYER
 NAME "nebenstrassen"
 DATA "strassen"
 TYPE LINE
 SYMBOLSCALE 2000
 CLASS
    NAME "Nebenstrasse"
     EXPRESSION ('[Strtyp_ID]'='4')
     COLOR 114 114 114
     SYMBOL "str"
     SIZE 22
     MAXSIZE 22
     MINSIZE 1
   END
 STATUS ON
END

#6. Layer Hauptstrassen
LAYER
 NAME "hauptstrassen"
 DATA "strassen"
 TYPE LINE
 SYMBOLSCALE 2000
 CLASS
    NAME "Hauptstrasse"
     EXPRESSION ('[Strtyp_ID]'='3')
     COLOR 249 234 15
     SYMBOL "str"
     MAXSIZE 25
     MINSIZE 1
     SIZE 25
    END
 STATUS ON
END

#7. Layer Bundesstrassen
LAYER
 NAME "bundesstrassen"
 DATA "strassen"
 TYPE LINE
 SYMBOLSCALE 2000
  CLASS
    NAME "Bundesstrasse"
     EXPRESSION ('[Strtyp_ID]'='2')
     COLOR 249 234 15
     SYMBOL "str"
     SIZE 35
     MAXSIZE 35
     MINSIZE 1
   END
 STATUS ON
END

#8. Layer Autobahnen
LAYER
 NAME "autobahn"
 DATA "strassen"
 TYPE LINE
 SYMBOLSCALE 2000
   CLASS
    NAME "Autobahn"
     EXPRESSION ('[Strtyp_ID]'='1')
     COLOR 242 102 9
     SYMBOL "str"
     MAXSIZE 45
     MINSIZE 3
    # MAXSCALE 40000
     SIZE 45
     OVERLAYCOLOR 75 75 75
     OVERLAYSIZE 1
     OVERLAYSYMBOL "str"
   END
    STATUS ON
END


#9. Layer Stadtgrenzen
LAYER
NAME "Stadtteilgrenzen"
DATA "stadtteile"
TYPE LINE
SYMBOLSCALE 10000
 CLASS
  NAME "Grenzen"
  COLOR 0 0 0
  SYMBOL "str"
  MINSIZE 1
  MAXSIZE 3
  SIZE 3
 END
END


#10. Layer Sehenswürdigkeiten
LAYER 
 NAME "Sehenswürdigkeiten"
 DATA "seights"
 TYPE POINT
 SYMBOLSCALE 5000
   CLASS
      NAME "Parkplatz"
     EXPRESSION ('[Punkttyp]'='3')
     SYMBOL "parkplatz"
     SIZE 25
     MAXSIZE 25
     MINSIZE 12
   END
   CLASS
     NAME "Friedhof"
     EXPRESSION ('[Punkttyp]'='1')
     COLOR 0 0 0 
     SYMBOL "friedhof"
     SIZE 15
     MINSIZE 1
     MAXSIZE 15
    END
   CLASS
     NAME "Kirche"
     EXPRESSION ('[Punkttyp]'='6')
     COLOR 0 0 0 
     SYMBOL "kirche"
     SIZE 7
     MINSIZE 1
     MAXSIZE 7
   END
   CLASS
   SIZE 10
   MINSIZE 1
   MAXSIZE 10
     NAME "anderes"
       COLOR 255 0 0 
     SYMBOL "andere"
   END  
 STATUS ON
END

#11. Layer Strassenbeschriftung
LAYER
 NAME "Beschriftung"
 DATA "strassen"
 TYPE ANNOTATION
 SYMBOLSCALE 4000
 MAXSCALE 10000
 LABELCACHE ON
   CLASS
      EXPRESSION (not '[Str_ID]'='1' and not '[Str_ID]'='0')
      LABEL
        TYPE TRUETYPE
        FONT arial
        SIZE 10
        MAXSIZE 10 
        COLOR 0 0 0
        MINDISTANCE 250
      # MINFEATURESIZE 10
        ANGLE AUTO
        POSITION CC
        OUTLINECOLOR 255 255 255 
        PARTIALS False
     END
   END
 LABELITEM "strname"
END



#12. Layer Beschriftung der Stadtteile
LAYER
NAME "grenzen"
DATA "stadtteile"
TYPE ANNOTATION
MINSCALE 10000
SYMBOLSCALE 10000
LABELCACHE ON
 CLASS
    LABEL
     TYPE TRUETYPE
     FONT arial
     COLOR 0 0 0
     ANGLE 360
     POSITION CC
     MINSIZE 10
     MAXSIZE 20
     SIZE 20
     PARTIALS false
    END
 END
LABELITEM "NAME"
END

END

\end{verbatim}
%\end{quelltextzitat}

Es ist nötig die einzelnen Strassen auch in einzelne Layer zu packen, da damit eine bessere Anzeige de Linien erfolgt. Würde man keine einzelnen Layer erstellen, würden z.Bsp. dicke über dünne Linienenden gepackt.Dies kann somit vermieden werden und das Erscheinungsbild entscheidend verbessern.
Die Beschriftung wurde in eigene Layer gepackt um die Anzeige variieren zu können und somit unabhängig von den Strassen zu haben.


Nun das Template:

%\begin{quelltextzitat}
\begin{verbatim}
<html>
<head>
<title>OSNABR&Uuml;CK</title>
</head>

<body link="000000" vlink="000000">
<form method=GET action="[program]" name="mapserver">
<!--Initialisierung der vom Applet zu setzenden Parameter-->
        <input type="hidden" name="imagewidth" value="[mapwidth]">
        <input type="hidden" name="imageheight" value="[mapheight]">
	
	<input type="hidden" name="INPUT_TYPE" value="">
    	<input type="hidden" name="INPUT_COORD" value="">
<table>
   <tr>
    <table border=1>
    <td>

  <applet name="RosaApplet" archive="/monika/java/rosa.jar"
  	code="Rosa2000" width="[mapwidth]" height="[mapheight]" MAYSCRIPT>

<!--allgemeine Parameter-->
	<param name="IMG_URL" value="[img]">
	<param name="INP_FORM_NAME" value="mapserver">
	<param name="INP_TYPE_NAME" value="INPUT_TYPE">
	<param name="INP_COORD_NAME" value="INPUT_COORD">
	
<!--Toolbar-->
	<param name="TB_POSITION" value="top">
	<param name="TB_ALIGN" value="left">
	<param name="TB_BUTTONS" value="zoomin|zoomout|fullextent|recenter|
					redraw">
	

<!--Buttons-->
	<param name="TB_BUT_zoomin_IMG" value="/monika/java/icons1/
						icon_zoomin_1.gif">
	<param name="TB_BUT_zoomin_CURSOR_TYPE" value="CROSSHAIR">
	<param name="TB_BUT_zoomin_INPUT" value="auto_rect">
        <param name="TB_BUT_zoomin_NAME" value="zoomdir">
	<param name="TB_BUT_zoomin_VALUE" value="1">
        <param name="TB_BUT_zoomin_IMG_PR" value="/monika/java/icons1/
							icon_zoomin.gif">    
        <param name="TB_BUT_zoomin_HINT" value="Zoom In: Vergroeßerte 
			Darstellung|eines gewaehlten Kartenausschnitts">


	<param name="TB_BUT_zoomout_IMG" value="/monika/java/icons1/
						icon_zoomout_1.gif">
	<param name="TB_BUT_zoomout_CURSOR_TYPE" value="CROSSHAIR">
	<param name="TB_BUT_zoomout_INPUT" value="auto_point">
        <param name="TB_BUT_zoomout_NAME" value="zoomdir">
	<param name="TB_BUT_zoomout_VALUE" value="-1">
        <param name="TB_BUT_zoomout_IMG_PR" value="/monika/java/icons1/
						icon_zoomout.gif">      
	<param name="TB_BUT_zoomout_HINT" value="Zoom Out:
		Verkleinerte Darstellung|des Kartenauschnitts">


	<param name="TB_BUT_recenter_IMG" value="/monika/java/icons1/
						icon_recentre_1.gif">
	<param name="TB_BUT_recenter_CURSOR_TYPE" value="CROSSHAIR">
	<param name="TB_BUT_recenter_INPUT" value="auto_point">
        <param name="TB_BUT_recenter_NAME" value="zoomdir">
	<param name="TB_BUT_recenter_VALUE" value="0">
        <param name="TB_BUT_recenter_IMG_PR" value="/monika/java/icons1/	
							icon_recentre.gif"> 
	<param name="TB_BUT_recenter_HINT" value="Recenter:	
		Zentrierung der Karte auf|einen gewaehlten Punkt">


	
	<param name="TB_BUT_fullextent_IMG" value="/monika/java/icons1/
						icon_fullextent_1.gif">
	<param name="TB_BUT_fullextent_CURSOR_TYPE" value="CROSSHAIR">
	<param name="TB_BUT_fullextent_INPUT" value="submit">
        <param name="TB_BUT_fullextent_NAME" value="imgext">
	<param name="TB_BUT_fullextent_VALUE" value="3427000 5787000
							3444100 5801000 ">
        <param name="TB_BUT_fullextent_IMG_PR" value="/monika/java/icons1/
							icon_fullextent.gif">       
	<param name="TB_BUT_fullextent_HINT" value="Full Extent:
						Anzeigen der ganzen Karte">

		
	<param name="TB_BUT_redraw_IMG" value="/monika/java/icons1/
						icon_update_1.gif">
<!--	<param name="TB_BUT_redraw_CURSOR_TYPE" value="CROSSHAIR">
-->	<param name="TB_BUT_redraw_INPUT" value="submit">
        <param name="TB_BUT_redraw_NAME" value="zoomdir">
	<param name="TB_BUT_redraw_VALUE" value="0">
        <param name="TB_BUT_redraw_IMG_PR" value="/monika/java/icons1/
						icon_update_2.gif">      
	<param name="TB_BUT_redraw_HINT" value="Update:
				Aktualisierung des Kartenausschnittes">



  </applet>

<!--	<input NAME="img"
	 TYPE="image"
	 Border="1"
	 SRC="[img]"
	 width=[mapwidth]
	 height=[mapheight]>
  -->
  </td>
  
  <td valign=top bgcolor="#A0C8FF">
  	<font size=4> <p>W&auml;hlen Sie den anzuzeigenden Layer aus </font>
    	<p>
    <table>
     <tr>
     <td width=170>
	
	<input type="checkbox" name="layers" value="sonststrassen nebenstrassen
	hauptstrassen bundesstrassen autobahn Beschriftung"
				[sonststrassen_check]>Strassen<br>
	<input type="checkbox" name="layers" value="Stadtteilgrenzen grenzen" 
						[Stadtteilgrenzen_check]>Grenzen<br>
	<input type="checkbox" name="layer" value="Sehenswürdigkeiten" 
					[Sehenswürdigkeiten_check]>
						Sehensw&uuml;rdigkeiten<br>
	<input type="checkbox" name="layer" value="Grünflächen" 
						[Grünflächen_check]>
						Gr&uuml;nfl&auml;chen<br>
	<input type="checkbox" name ="layer" value="gewaesser" 
						[gewaesser_check]>Gew&auml;sser<br>

    </td>
    <td> <!-- Referenzkarte -->
                  
		  <center>
                <input NAME="ref" TYPE="image" SRC=[ref] border="0">
            </center>

            <p>
<!-- referenzkarte ende-->


</td>
</tr>
</table>

	
	<p align=center>
	<input type="submit" value="Aktualisieren!">
	<p align=center>
    <font size=4>
    <a href="http://eukrante:9086/cgi-bin/mapserv?map=%2Fspare%2Fmapserver%2
    Fosnabrueck%2Fmonika%2Fosnabrueck.map&[get_layers]&zoomsize=2&
    	program=%2Fcgi-bin%2Fmapserv%2F
"> Ganze Karte anzeigen </a> </font>
	<p>

	<font size=3 ><strong>Legende</strong></font><br>
	<table > [legend] </table>


 </tr>
</table>
<tr>
	<td width="700" align=center>	
	<img src="[scalebar]">
        <!-- [scale]-->
</td>
</tr>	
  
</table>	





<!--weitere Einstellungen für den Mapserver-->

<input type="hidden" name="zoomdir" value="0">
<input type="hidden" name="zoomsize" value="2">
<input type="hidden" name="imgxy" value="[center_x] [center_y]">
<input type="hidden" name="imgext" value="[mapext]">
<input type="hidden" name="map" value="[map]">
<input type="hidden" name="program" value="[program]">

<input type="hidden" name="mode" value="">
<input type="hidden" name="savequery" value="true">


</form>
</body>
</html>


\end{verbatim}
%\end{quelltextzitat}

Für diese Anwendung wurde auf ein Rosa Applet zurückgegriffen, da die Navigation und Zoomfunktionen wesentlich komfortabler sind. Hilfe hierzu findet man unter \newline
\verb"http://www2.dmsolutions.on.ca/mapserver/rosa/index.html"\newline
In diesem speziellen Anwendungsfall,war es nötig nicht die Standartlegende, sondern eine HTML Legende anzulegen, da nicht alle Layer und auch nicht alle Klassen angezeigt werden sollen.
Dafür wird im Mapfile wiederum ein Template für die Legende definiert und eine HTML  datei geschrieben, welche wie folgt(in diesem speziellen Anwendungsfall) aussieht:

%\begin{quelltextzitat}
\begin{verbatim}
[leg_layer_html]<!-- dies ist die Layer Sektion-->
<!-- die Strassenlayer zusammenfassend-->
[if name=layer_name value=autobahn]
  <tr><td>
  <h5>Strassen:</h5>
  </td></tr>
[/if]

[if name=layer_name value=Sehenswürdigkeiten]
  <tr><td>
  <h5>[leg_layer_name]:</h5>
  </td></tr>
[/if]


[/leg_layer_html]<!--Ende des Layerbereichs-->



[leg_class_html]<!-- KLassenbereich-->
  <tr ><td>
	<!--Klassennamenbereich-->
  [if name=class_name value=Parkplatz]
  <tt> [leg_class_name] </tt></td>
  <td align=center>   <img src="/monika/java/icons1/Parkplatz.legende.gif" 
  						width="15" height="17" >
  [/if]

  [if name=class_name value=Friedhof]
  <tt> [leg_class_name] </tt></td>
  <td align=center>   <img src="/monika/java/icons1/friedhof.legende.gif"
  						width="17" height="13" >
  [/if]

  [if name=class_name value=Kirche]
  <tt> [leg_class_name] </tt></td>
  <td align=center>   <img src="/monika/java/icons1/kirche.legende.gif" 
  						width="28" height="21" >
  [/if]

   [if name=class_name value=anderes]
  <tt> andere besondere Punkte </tt></td>
  <td align=center>   <img src="/monika/java/icons1/punkt.legende.gif" 
  						width="25" height="15" >
  [/if]
   </td></tr>
   
 [if name=class_name value=Grenzen]
 <td><hr> <tt> Stadtteilgrenzen </tt><hr></td>
  <td align=center>   <img src="/monika/java/icons1/grenzen1.gif" 
  						width="25" height="15" >
  [/if]
   </td></tr>

 [if name=class_name value=Autobahn]
  <td><tt>[leg_class_name] </tt></td>
  <td align=center>   <img src="/monika/java/icons1/autobahn1.gif" 
  						width="25" height="15" >
  [/if]
   </td></tr>

 [if name=class_name value=Bundesstrasse]
  <td><tt>[leg_class_name] </tt></td>
  <td align=center>   <img src="/monika/java/icons1/bundes1.gif" 
  						width="25" height="15" >
  [/if]
   </td></tr>

[if name=class_name value=Hauptstrasse]
  <td><tt>[leg_class_name] </tt></td>
  <td align=center>   <img src="/monika/java/icons1/bundesstrassen.gif" 
  						width="25" height="15" >
  [/if]
   </td></tr>


[if name=class_name value=Nebenstrasse]
  <td><tt>[leg_class_name] </tt></td>
  <td align=center>   <img src="/monika/java/icons1/nebenstrassen1.gif"
  						width="25" height="15" >
  [/if]
   </td></tr>
[if name=class_name value=sonstStrassen]
  <td><tt> sonstige Strassen </tt></td>
  <td align=center>   <img src="/monika/java/icons1/sonststrassen1.gif"
  						width="25" height="15" >
  [/if]
   </td></tr>

[if name=class_name value=See]
  <td><hr><tt> Fließgewässer / See</tt><hr></td>
  <td align=center>   <img src="/monika/java/icons1/gewaesser.gif"
  						width="25" height="15" >
  [/if]
   </td></tr>

[if name=class_name value=Wald]
  <td><tt> Wald / Grünflächen</tt></td>
  <td align=center>   <img src="/monika/java/icons1/gruenflaechen.gif"
  						width="25" height="15" >
  [/if]
   </td></tr>

  
[/leg_class_html]
\end{verbatim}
%\end{quelltextzitat}

% -----------------------------------------------------------------

\section{Aktualisierung}
Was macht man nun wenn, wenn Fehler in den Daten feststellt werden oder man noch Ergänzungen durchführen möchte?
\newline

Aktualisierungen in GRASS werden durchgeführt indem man die Vektorkarte mit {\bf v.in.shape} wieder in GRASS importiert. Als Attribut muß man die Spalte ID an GRASS übergeben und als Label Name die Spalte Str\_ID.
GRASS übernimmt nur diese beiden Spalten aus der .dbf Datei.
Nun kann wie schon vorher beschrieben die Digitalisierung oder Änderungen vorgenommen werden. Also die Region mit {\bf g.region} festlegen, {\bf v.support} ausführen  und dann {\bf v.digit} durchführen. Am Ende nicht vergessen nochmals {\bf v.support} auszuführen um die Topologie de Elemente zu bilden.
Danach werden die Daten mit {\bf v.out.shape} exportiert. GRASS übergibt nun nach aussen seine (in GRASS selbst nicht zu erkennende) ID und die CAT\_ID
Man hat jetzt also 2 .dbf Dateien - alt und neu, welche miteinander gejoint werden müssen um die neuen Elemente in die alte Datei übernehmen zu können.

Dies soll an einem Beispiel veranschaulicht werden: 

hierbei wurde die 2.Linie in 2 neue Linien 4 und 5 geteilt. GRASS schreibt, die neu entstandenen Linien ans Ende seiner ID Liste und verschiebt, die freigewordenen Plätze in der Liste werden durch die bestehenden ID's ersetzt, bleiben aber in der bestehenden Reihenfolge erhalten.

\begin{quelltextzitat}
\begin{verbatim}
alte.txt 				neue.txt

#ID,Str_ID,Str_typ,Ebene		#ID, CAT_ID
1,2,0,0					1,1
2,324,3,0				2,3
3,22,2,0				3,4
4,0,1,0					4,2
					5,2

\end{verbatim}
\end{quelltextzitat}

Nun muß ein join durchgeführt werden, bei der in der neuen Datei die 2. Spalte durch die 2.-4. Spalte der alten Datei ersetzt wird, d.h.die erste Spalte der alten muß mit der zweiten Spalte der neuen Datei gejoint werden. Das Ergebnis soll wie folgt aussehen:

\begin{quelltextzitat}
\begin{verbatim}
nachdemjoin.dbf
#ID,Str_ID,Str_typ,Ebene
1,2,0,0
2,22,2,0
3,0,1,0geteielt

4,324,3,0
5,324,3,0

\end{verbatim}
\end{quelltextzitat}

Im folgenden wird der Ablauf des joinens für diesen speziellen Anwendungsfall beschrieben.
Dazu müssen beide Dateien in Textdateien umgewandelt werden

\begin{quelltextzitat}
\begin{verbatim}

dbf2txt -d, alt.dbf > alt.txt 
dbf2txt -d, neu.dbf > neu.txt 
\end{verbatim}
\end{quelltextzitat}

die beiden Spalten der neuen Datei müssen vertauscht  und dann nach der ersten Spalte sortiert werden.

\begin{quelltextzitat}
\begin{verbatim}
sed -e "s/\(.*\),\(.*\)/\2,\1/"  neu.txt|sort -n  >neu_sorted
\end{verbatim}
\end{quelltextzitat}

Nun wird der eigentliche Join durchgeführt mit dem -a Flag, dafür dass alle zeilen übernommen werden sollen und - n für alle Spalten.
Desweiteren wird die erste Zeile mit "`\#"' herausgelöscht

\begin{quelltextzitat}
\begin{verbatim}
join -a 1 -t "," -n  neu_sorted alt.txt | grep -v '#'  > xtest.txt
\end{verbatim}
\end{quelltextzitat}

Nun werden die erste Spalte, da sie ja nicht mehr gebraucht wird herausgeschnitten und an die Nullerzeilen werden auch 4 Spalten angehängt

\begin{quelltextzitat}
\begin{verbatim}
sed -e "s/\(^0,[0-9]*\)/\1,,,/" xtest.txt | cut -d "," -f 2-5  | \
 sort -n  > x1test.txt
\end{verbatim}
\end{quelltextzitat}

Nun muß noch die Überschriftenzeile eingefügt werden und die Datei in die .dbf Datei umgewandelt werden.

\begin{quelltextzitat}
\begin{verbatim}
echo \#Id,Str_ID,Str_typ,Ebene > ergebnis.txt  
cat x1test.txt >> ergebnis.txt
txt2dbf -I10 -I10 -I10 -I10 -d, ergebnis.txt ergebnis.dbf
\end{verbatim}
\end{quelltextzitat}

Nun hat man die neuen Daten in der ergebnis.dbf gespeichert und muß diese .dbf Datei nur noch mit dem Shapefile verknüpfen.
Wenn man nun möchte kann man wieder in Thuban Änderungen an den Attributen vornehmen.



% -----------------------------------------------------------------

\end{document}

