% Spezifikationen von den Tabellen für den EDBS-Konverter
% von : Ludwig Reiter begonnen: 30.8.2004
% von Silke Reimer am 1.9.2004 überarbeitet
% aktualisiert von Stephan Holl, 29.01.2007

\documentclass[german,a4paper,oneside]{scrbook}

%----------------------------------------------
% PACKAGE MANAGEMENT
%
\usepackage[latin1]{inputenc} 
\usepackage{times}
\usepackage{fancyhdr}
\usepackage{german}
%\usepackage[all, light]{draftcopy}
\usepackage{supertabular}
%\usepackage{colortbl}
%\usepackage{epsf}
\usepackage{graphicx}
\usepackage{wasysym}
\usepackage{url}

%----------------------------------------------
% Document DATE and VERSION
% set these values when releasing a new version

\newcommand{\documentdate}{$ 29.01.2007 $}
\newcommand{\documentversion}{0.9.1}

%----------------------------------------------
% MACRO DEFINITION
%
%   \Fig{figure}{text}  : creates an mbox around 'figure' and
%                         writes 'text' at the bottom with leading
%                         'Fig. section.figno:'.
%                         Example:
%                         \Fig{\epsfxsize30mm \epsffile{x.eps}}{the x}\\
%   \FigNoEntry{}{}     : same as above, no entry in figures list
%
%   \FigCaption{}       : line with figure caption, setting figure
%                         counter and figures list
%

%****************************************************************************
%       Figure makro for graphics continously enumerated.
%

\newcounter{FigCnt}[chapter]
\newcommand{\Fig}[3]%
{
        \refstepcounter{FigCnt}
        \addcontentsline{lof}{figure}%
                {\protect\numberline{\thechapter.\arabic{FigCnt}}{#2}}
        \mbox{#1}
\nopagebreak

        {Fig. \thechapter.\arabic{FigCnt}: #3}
}

\newcommand{\FigNoEntry}[2]%
{
        \refstepcounter{FigCnt}
        \mbox{#1}
\nopagebreak

        {Fig. \thechapter.\arabic{FigCnt}: #2}
}

\newcommand{\FigCaption}[1]%
{
        \refstepcounter{FigCnt}
        \addcontentsline{lof}{figure}%
                {\protect\numberline{\thechapter.\arabic{FigCnt}}{#1}}

        %{Figure \thechapter.\arabic{FigCnt}: #1}
}


\newcommand{\APIMethod}[1]{{\small\tt #1 }}

%
% END MACRO DEFINITION
%----------------------------------------------


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


%-----------------------------------
% HEADER/FOOTER DEFINITION
% The settings here are for single page documents (only odd page set)

% for some pages latex switches back to pagestyle plain :-(
\fancypagestyle{plain}{%
	\fancyhf{} % clear all header and footer fields
	\fancyhead[LO]{\footnotesize edbsilon-Dokumentation V. \documentversion\\ \leftmark}
	\fancyfoot[RO]{\footnotesize Intevation GmbH} % Author
	\fancyfoot[CO]{\footnotesize \thepage/\pageref{theverylastpage}}
	% set the document title for the footer here!
	\fancyfoot[LO]{\footnotesize \documentdate}
	\renewcommand{\footrulewidth}{0.4pt}
}

% and now define pagestyle fancy
\fancyhead{} % clear all fields
\fancyhead[LO]{\footnotesize edbsilon-Dokumentation V. \documentversion\\ \leftmark}

\fancyfoot{}% clear all fields
\fancyfoot[RO]{\footnotesize Intevation GmbH} % Author
\fancyfoot[CO]{\footnotesize \thepage/\pageref{theverylastpage}}
% set the document title for the footer here!
\fancyfoot[LO]{\footnotesize \documentdate \\ edbsilon-Dokumentation V. \documentversion}

\renewcommand{\footrulewidth}{0.4pt}

%
% END Header/Footer Definition
%-----------------------------------

%-----------------------------------
% DOCUMENT SETTINGS
\pagestyle{fancy}
\parindent0cm
% \parskip0.2cm 


%-----------------------------------
% TITLE PAGE
{

	 {\tt http://intevation.net}\\[2.0cm] 
}

% reenter the TITLE here
{
	\sffamily\bfseries\Large 
% e.g.:
	edbsilon\\[0.5cm]
	\huge Dokumentation\\
	{\large Version \documentversion} \\ [4cm]

}

% a possible SUBTITLE
%\begin{flushleft}
%	\sffamily\bfseries\large 
%    	by Intevation GmbH\\[0.5cm]
%\end{flushleft}

\thispagestyle{empty}

\vfill

{\sffamily\small
	Intevation GmbH\\
	Georgstrasse 4\\
	49074 Osnabrück\\
	Germany\\
	\\
	Datum: \documentdate
}


\newpage

% PAGE 4

\vfill

Dieses Dokument wurde erzeugt mit \LaTeX{}.

{\scriptsize
\begin{verbatim}
\end{verbatim}
}

\vfill

\begin{center}Copyright (c) 2004-2007 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"'.

\tableofcontents

%
%
%
\chapter{Das Programm EDBSilon}
\section{Einleitung}
edbsilon ist ein Konverter für Daten im EDBS- oder BZSN-Format. Die
EDBS-Dateien werden eingelesen und nach Folien getrennt in andere Formate
transformiert.

Es stehen zwei Modi zur Verfügung:
\begin{enumerate}
\item SQL-Modus (siehe Abschnitt \ref{sec:mod-sql})
\item OGR-Modus (siehe Abschnitt \ref{sec:mod-ogr})
\end{enumerate}

Standardmäig werden SQL-Kommandos zum Eintrag in eine
Oracle Spatial Geodatenbank ausgegeben.

%
%
%
\section{Warum wurde edbsilon entwickelt?}

Es wurde ein EDBS-/BSZN-Konverter benötigt, der die folgenden Eigenschaften besitzen sollte:

\begin{itemize}
   \item Freie Software
   \item lauffähig unter GNU/Linux und Windows
   \item leicht auf andere Bundesländer anpassbar
   \item Konvertierung von BZSN
   \item auch im Batch-Mode benutzbar 
\end{itemize}

Dies ist in edbsilon vereint.

%
%
%
\chapter{Die Konfigurationsdatei}
\label{chap:konffile}

\section{Allgemeine Informationen}

Die Konfigurationsdateien {\em konf/land.konf} ist dazu gedacht, dass Programm
variable zu machen für die ALK-Daten der verschiedenen Länder. Es besteht
aus Zeilen der Form: 

\begin{small}
\verb+foliennr,BesondereInfo,Darstellungsart|Tabellenname,Tabellenflags|Attributliste+
\end{small}

Eine beispielhafte Konfigurationsdatei ist der Software im Ordner {\em
konf} beigelegt.

Grundsätzlich unterscheiden sich 2 Fälle in jeder Konfigurationszeile:
\begin{enumerate}
\item Wenn der {\em Tabellenname} leer ist, wird der Textteil
der Besonderen Informationen der Art {\em foliennr, BesondereInfo,
Darstellungsart} je nach Attributliste in die Folientabelle geschrieben.
\item  Wenn die {\em Tabelle} einen Wert beinhaltet, wird der Textteil der
Besonderen Information je nach Attributliste in die Tabelle 
{\em Tabelle} geschrieben.
\end{enumerate}

Es gibt Zeilen, in denen nur Tabellenflags und foliennr besetzt sind. Diese
Zeile geben an, welche Tabellen für die eigentlichen Objekte (also nicht
Teilobjekte) einer Folie angelegt werden sollen. Damit ist es z.B. möglich
die Gebäude aus den Foliennummern 011 und 082 in einer gemeinsamen Tabelle
{\em gebaeude} zu speichern. 
\minisec{Beispiel}
\begin{verbatim}
#
# Folie 001 - Flurstücke
#
001,,|f001,f|
\end{verbatim}

Zeilen, die mit \# beginnen werden als Kommentar betrachtet.

\section{Genauere Beschreibung}

Die Einstellungsmöglichkeiten in der Konfigurationsdatei
im Detail:

\begin{description}
\item[foliennr] Diese Variable beinhaltet die Foliennummer für die diese
Zeile die Vorgehensweise angibt. Foliennummer, Art der Besonderen Info und
Darstellungsart geben eindeutig den Fall an, um den es sich handelt.

\item[BesondereInfo] Diese Variable beinhaltet die Art der Besonderen Info.
Sie dient zur Fallbestimmung.

\item[Darstellungsart] Diese Variable beinhaltet die Darstellungsart der
Besonderen Information.  Sie dient zur Fallbestimmung.

\item[Tabelle] Diese Variable ist leer, wenn die Daten in die Folientabelle
geschrieben werden sollen. Sonst beinhaltet sie den Namen der Tabelle in
der je nach Attributliste die Besonderen Informationen abgespeichert werden
sollen.

\item[Tabellenflags] In diesen Feld wird festgehalten, welche Tabellen
erzeugt werden sollen:\\ 
{\em n} für ohne Anhang, {\em p} für Punkte (\_p), {\em l} für Linien
(\_l), {\em f} für Fläche (\_f) und {\em r} für Rahmen (\_r).

\item[Attributliste] Diese Variable hat die Form\\ 
\verb+Attribut,Attributslaenge;Attribut,Attributslaenge;...+\\ 
Dabei gibt {\em Attribut} den Spaltennamen an, in der die Zeichen der Anzahl
{\em Attributslaenge} gespeichtert werden sollen.
\end{description}

\minisec{Beispiel}


\begin{verbatim}
001,14,1230|folie001_namenp,nlp|text,1:33
\end{verbatim}

Folgende Zeile in der Konfigurationsdatei besagt, dass alle Informationen
der Folie 001 mit der besonderen Info 14 und der Darstellungsart 1230 in
der Tabelle {\em folie001\_namenp} in der Spalte {\em text} eingetragen werden sollen.
Das ganze Textfeld hat nur 33 Zeichen. Also wird alles in text gespeichert.
\\


edbsilon enthält eine Beispielkonfiguration für die ALK-Daten des Landes
Brandenburg. 
% Im Anhang ist das Ergebnis dieser Konfiguration in Form von
% SQL-CREATE-Kommandos zu sehen. Die Kommandos zum Erzeugen der räumlichen
% Indizes werden allerdings nicht mit ausgegeben.
Diese Tabellenstruktur baut auf den "`Richtlinien für die
Einrichtung der Automatisierten Liegenschaftskarte in
Brandenburg"'\footnote{Im Internet sind die Richtlinien unter\newline 
\url{http://www.vermessung.brandenburg.de/sixcms/media.php/1071/73000501.pdf} zu
finden. Stand 1. September 2004}

%
%
%
\chapter{Benutzung von edbsilon}
Edbsilon kann auf zwei unterschiedliche Arten genutzt werden. Im Normalfall
werden standardmäßig SQL-Dateien zum Import in eine Oracle-Datenbank
erstellt.
\\

Um ESRI-kompatible Shapedateien (oder andere durch OGR unterstützte
Formate) zu erstellen, kann die OGR-Bibliothek über
die Python-Schnittstelle eingebunden werden. Dadurch erweitert sich die
Exportfunktionalität auf alle durch OGR unterstützten Formate.

\section{Erstellung von SQL-Dateien} \label{sec:mod-sql}

Bevor man die INSERT-SQL-Kommandos für die nach Folien separierten
SQL-Dateien von edbsilon benutzen kann, muss man die richtigen
Tabellen in der Oracle-Datenbank angelegt haben. 

Dazu wird die Datei {\em createalk.sql} erstellt, die Informationen über 
die Tabellenstruktur, Indizes und Metainformationen enthält und diese
anlegt. 
Diese ist vor dem eigentlichen Import der Folien-SQL-Skripte auszuführen.\\

Ferner wird die Datei  {\em drop.sql} erstellt, die ein rückstandsfreies
Löschen der Tabellen, Indizes und Metainformationen ermöglicht.

%
%
\section{Erstellung von OGR-unterstützten Formaten} \label{sec:mod-ogr}
Neben den SQL-Dateien kann edbsilon als Ausgabeformat auch andere Formate
schreiben. Dazu wird über die Python-Schnittstelle der OGR-Bibliothek
auf die unterstützten Formate zugegriffen.

Eine Liste der von OGR unterstützen Vektorformate sind auf der Webseite
\url{http://www.gdal.org/ogr/ogr_formats.html} aufgelistet.

Der folgende Befehl gibt Auskunft darüber, welche Formate von der
installierten OGR-Version unterstützt werden:
\begin{verbatim}
ogrinfo --formats
Loaded OGR Format Drivers:
  -> "ESRI Shapefile" (read/write)
  -> "UK .NTF" (readonly)
  -> "SDTS" (readonly)
  -> "TIGER" (read/write)
  -> "S57" (read/write)
  -> "MapInfo File" (read/write)
  -> "DGN" (read/write)
  -> "VRT" (readonly)
  -> "AVCBin" (readonly)
  -> "REC" (readonly)
  -> "Memory" (read/write)
  -> "CSV" (read/write)
  -> "GML" (read/write)
  -> "ODBC" (read/write)
  -> "PostgreSQL" (read/write)
\end{verbatim}


\section{Aufruf des Konverters}

Das Programm edbsilon.py ist der Hauptteil des EDBS-Konverters. Es wird
aufgerufen mit folgender Zeile:

\begin{small}
\begin{verbatim}
python edbsilon.py [-h] [-o Ziel] [-l Logbuch ] [-f Format] \
[-a EDBS-Format] [-k Konfdatei ] Quellen... 
\end{verbatim}
\end{small}

Die Angabe der fünf in eckigen Klammern genannten Parameter ist optional. Werden sie nicht
angegeben, so werden default-Werte für die Parameter eingesetzt und
SQL-Dateien für Oracle erstellt.
\\

Die Flagge -h gibt folgenden Hilfetext aus:

\begin{small}
\begin{verbatim}
edbsilon -- Konvertiert EDBS-Daten
Benutzung: python edbsilon.py [Optionen] Quelldatein...
Optionen: -o <Ziel>         -- SQL-Kommandos [Default: edbsilon.sql]
          -k <Konfdatei>    -- Konfigurationsdatei [Default: alk.konf]
          -l <Logbuch>      -- Logbuch [Default: edbsilon.log]
          -f <Format>       -- Format [Default: ORACLE]
          -a [alk|atkis]    -- Setzt EDBS-Format auf ALK
                               bzw.  ATKIS [Default: alk]
          -h                -- für diese Hilfe
\end{verbatim}
\end{small}

\subsection{SQL-Modus (für Oracle)}
Ruft man edbsilon mit den Standardwerten auf, geht es die EDBS-Quellen der
Reihenfolge nach durch und erzeugt in der 
Standardkonfiguration INSERT-SQL Kommandos für die einzelnen ALK-Objekte in der Quelle und die
einzelnen Besonderen Informationen der ALK-Objekte.
Dann werden SQL-Kommandos erzeugt, die die Spatial Indizes neu aufbauen.
\\

Die SQL-Kommados werden in die Datei {\em fFolienummer.sql} 
eingetragen.
Existiert bereits eine Datei für diese Folie, wird die Ausgabe an diese
Datei angehängt. Wird dies nicht gewünscht, sollte die Datei vor dem Aufruf
von edbsilon gelöscht werden.

Die {\em  Konfigurationsdatei } muss die wie in Kapitel \ref{chap:konffile}
beschriebene Form haben. 
\\

Ein Aufruf zur Erstellung von SQL-Dateien sieht wie folgt aus:
\begin{verbatim}
# Ordner für Ausgabe erstellen
mkdir ausgabe

# edbsilon starten
python Konverter/edbsilon.py -o ausgabe/ -k <konfiguration.konf> \
-l ausgabe/edbsilon_sql-log.txt -a alk <Edbsdatei.edb>
\end{verbatim}

\subsection{OGR-Modus (für OGR-unterstützte Formate)}

Für die Erstellung von Shapefiles wird der OGR-Modus von edbsilon genutzt.
Dazu ist es unbedingt nötig, dass die von OGR bereitgestellten
Python-Bindungen installiert sind. \\
Ist dies der Fall, können sämtlich von OGR unterstützten Formate exportiert
werden. 
Im folgenden Beispiel wird die Syntax zur Generierung von ESRI Shapefiles
exemplarisch dargestellt:
\begin{verbatim}
# Ordner für Ausgabe erstellen
mkdir ausgabe

# edbsilon starten
python Konverter/edbsilon.py -o ausgabe/ -k <konfiguration.konf> \
-l ausgabe/edbsilon_log.txt -f "ESRI Shapefile" \
-a alk <Edbsdatei.edb>
\end{verbatim}

Die resultierenden Shapedateien sind im Ordber {\em ausgabe} enthalten, der
vor dem Start des Programms erstellt wurde.

\label{theverylastpage}
 
\end{document}
