Entwurf und Implementierung eines Datenmodells für Bodendaten zur datenbankgestützten Integration von Methoden der physischen Geographie Diplomarbeit im Studiengang Mathematik mit der Studienrichtung Informatik - Universität Hannover - Vorgelegt von: Jens Helge Pfau Prüfer: Prof. Dr. Udo Lipeck, Prof. Dr. Thomas Mosimann Betreuer: Dipl.-Math. Carsten Kleiner, Dipl.-Geogr. Markus Neteler 15. Februar 2000 Zusammenfassung Geografische Informationssysteme werden für die Speicherung, Verknüpfung und grafische Darstellung räumlicher Daten eingesetzt. Sie sind dabei optimiert für Berechnungen auf geometrischen Daten. Datenbanksysteme hingegen sind für die konsistente Verwaltung und flexible Verknüpfung beliebiger Daten konzipiert. Das Spatial Cartridge des objekt-relationalen Datenbanksystems Oracle8i implementiert Methoden Geografischer Informationssysteme für ein Datenbanksystem. Im Rahmen dieser Arbeit wird untersucht, inwieweit damit geografische Methoden, insbesondere Berechnungen auf geometrischen Objekten implementiert werden können. Für diese Untersuchung wird zunächst ein Datenmodell für Bodendaten entwickelt und und anschließend eine Methode implementiert, die aus unterschiedlich komplexen Teilmethoden zusammengesetzt ist. Dabei werden sowohl einfache Verknüpfungen von Daten, als auch komplexe Berechnungen auf geometrischen Objekten durchgeführt. Inhaltsverzeichnis 1 Einleitung 1 2 Geografische Informationssysteme 5 2.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Informationsebenen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 GIS-Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3.1 Rasterdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.2 Vektordaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.3 Punktdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.4 Rasterdatenformat vs. Vektordatenformat . . . . . . . . . . . . . 8 2.4 GIS-Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3 Datenbanksysteme 15 3.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2 Datenbankentwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.1 Architekturprinzipien . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.2 Phasen des Datenbankentwurfs . . . . . . . . . . . . . . . . . . . 18 3.3 Unified Modelling Language (UML) . . . . . . . . . . . . . . . . . . . . . 19 3.3.1 Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3.2 Generalisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.3.3 Assoziationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.4 Relationenmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.4.1 Modellierungskonzepte . . . . . . . . . . . . . . . . . . . . . . . . i 22 ii INHALTSVERZEICHNIS 3.4.2 Modellinhärente Integritätsbedingungen . . . . . . . . . . . . . . 23 3.4.3 Transformation von UML ins Relationenschema . . . . . . . . . . 24 3.5 Oracle 8i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.5.1 Objektrelationale Datenbanksysteme . . . . . . . . . . . . . . . . 25 3.5.2 Komplexe Datentypen in Oracle8i . . . . . . . . . . . . . . . . . . 25 3.5.3 Oracle8i Spatial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.3.1 Speicherung räumlicher Daten . . . . . . . . . . . . . . . 27 3.5.3.2 Anfragemodell . . . . . . . . . . . . . . . . . . . . . . . 32 3.5.3.3 Indexe auf räumlichen Daten . . . . . . . . . . . . . . . 33 3.5.3.4 Operationen auf räumlichen Daten . . . . . . . . . . . . 35 4 Datenbankentwurf 39 4.1 Anforderungsanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.1.1 Informationsebene Boden . . . . . . . . . . . . . . . . . . . . . . 41 4.1.2 Informationsebene Nutzung (Vegetation) . . . . . . . . . . . . . . 42 4.1.3 Informationsebene Klima . . . . . . . . . . . . . . . . . . . . . . . 43 4.1.4 Informationsebene Relief . . . . . . . . . . . . . . . . . . . . . . . 43 4.1.5 Methoden und Operationen . . . . . . . . . . . . . . . . . . . . . 44 4.2 Externe Datenbankschemata (UML) . . . . . . . . . . . . . . . . . . . . 46 4.2.1 Externes Schema der Informationsebene Boden . . . . . . . . . . 46 4.2.2 Externes Schema der Informationsebene Nutzung . . . . . . . . . 46 4.2.3 Externes Schema der Informationsebene Klima . . . . . . . . . . . 48 4.2.4 Externes Schema der Informationsebene Relief . . . . . . . . . . . 48 4.3 Konzeptionelles Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4 Logisches Modell (Relationenmodell) . . . . . . . . . . . . . . . . . . . . 51 4.4.1 Informationsebene Boden . . . . . . . . . . . . . . . . . . . . . . 51 4.4.2 Informationsebene Nutzung . . . . . . . . . . . . . . . . . . . . . 52 4.4.3 Informationsebene Klima . . . . . . . . . . . . . . . . . . . . . . . 52 4.4.4 Informationsebene Relief . . . . . . . . . . . . . . . . . . . . . . . 53 4.5 Physischer Entwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 INHALTSVERZEICHNIS iii 4.5.1 Typdefinitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.5.2 Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.5.3 Indexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5 Datenimport 57 5.1 Vorbereitungen zum Datenimport . . . . . . . . . . . . . . . . . . . . . . 57 5.2 Import der Sachdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.3 Import der geometrischen Daten . . . . . . . . . . . . . . . . . . . . . . . 59 5.4 Datenbereinigung der Geometriedaten 63 . . . . . . . . . . . . . . . . . . . 6 Methoden 67 6.1 Ableitungen innerhalb einer Klasse . . . . . . . . . . . . . . . . . . . . . 6.1.1 68 Methoden der Klasse BodenHorizont . . . . . . . . . . . . . . . . 68 6.1.1.1 Lagerungsdichte . . . . . . . . . . . . . . . . . . . . . . 68 6.1.1.2 Effektive Durchwurzelungstiefe eines Horizonts . . . . . 71 6.1.1.3 Nutzbare Feldkapazität eines Horizonts . . . . . . . . . . 72 Methoden der Klasse KlimaDatum . . . . . . . . . . . . . . . . . 72 6.1.2.1 Sättigungsdampfdruck . . . . . . . . . . . . . . . . . . . 73 6.1.2.2 Aktueller Dampfdruck . . . . . . . . . . . . . . . . . . . 73 6.1.2.3 Potenzielle Verdunstung nach Haude . . . . . . . . . . . 74 6.2 Ableitungen innerhalb einer Informationsebene . . . . . . . . . . . . . . . 74 6.1.2 6.2.1 Effektive Durchwurzelungstiefe eines Bodenprofils . . . . . . . . . 75 6.2.2 Nutzbare Feldkapazität des effektiven Wurzelraumes . . . . . . . 79 6.2.3 Ableitung der mittleren kapillaren Aufstiegsrate . . . . . . . . . . 80 6.3 Verschneidung von Informationsebenen . . . . . . . . . . . . . . . . . . . 83 6.3.1 Vorbereitungen zur Kartenerzeugung . . . . . . . . . . . . . . . . 83 6.3.2 Verschneidung von Vektordaten mit Vektordaten . . . . . . . . . 86 6.3.3 Verschneidung von Raster- und Vektordaten . . . . . . . . . . . . 89 6.3.3.1 Rastergenerierung . . . . . . . . . . . . . . . . . . . . . 89 6.3.3.2 Wertzuweisung an Rasterpunkte 92 . . . . . . . . . . . . . iv INHALTSVERZEICHNIS 6.3.4 Verschneidung von Rasterdaten mit Rasterdaten . . . . . . . . . . 94 6.4 Probleme bei der Verschneidung . . . . . . . . . . . . . . . . . . . . . . . 97 6.5 Ableitungen für verschnittene Geometrien . . . . . . . . . . . . . . . . . 100 6.5.1 Dauer des kapillaren Aufstiegs . . . . . . . . . . . . . . . . . . . . 101 6.5.2 Mittlerer kapillarer Aufstieg . . . . . . . . . . . . . . . . . . . . . 104 6.5.3 Pflanzenverfügbares Bodenwasser . . . . . . . . . . . . . . . . . . 105 6.5.4 Sickerwasserrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 7 Erfahrungen und Ausblick 111 A Definition der Relationen 113 A.1 Neues Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 A.2 Schemata für alte Dateiformate . . . . . . . . . . . . . . . . . . . . . . . 117 B Tipps und Tricks 121 C Visualisierung 123 C.1 Rasterkarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 C.2 Vektorkarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 D Hilfsprogramme Datenimport 125 D.1 Konvertierung der Sachdaten . . . . . . . . . . . . . . . . . . . . . . . . 125 D.2 Konvertierung der Polygone . . . . . . . . . . . . . . . . . . . . . . . . . 126 E Beispielanfragen 127 Kapitel 1 Einleitung Im Bereich der Informatik bilden Datenbanksysteme ein zentrales Thema. Ihre Kernaufgabe ist die effiziente Speicherung und Verwaltung großer Datenbestände. Abhängig von der Struktur der Daten und der Komplexität der Anfragen an ein Datenbanksystem wird zwischen Datenbanksystemen für Standardanwendungen beziehungsweise Nichtstandardanwendungen unterschieden. Standardanwendungen zeichnen sich dadurch aus, dass große Datenmengen primitiver (eindimensionaler) Datentypen mit simplen Algorithmen und einfachen Integritätsbedingungen verwaltet werden. Sie treten beispielsweise im Banken- und Versicherungswesen auf. Die Verwaltung erfolgt mithilfe relationaler Datenbankmanagementsysteme (RDBMS), die seit etwa Mitte der 1970er Jahre entwickelt wurden. Nichtstandardanwendungen sind durch komplex strukturierte Objekte sowie aufwendigen Berechnungen und Anfragen auf diesen Objekten, wie sie typischerweise im naturwissenschaftlich-technischen Bereich vorkommen, charakterisiert. Da relationale Datenbankmanagementsysteme nur bedingt für die Verwaltung komplexer Daten und Anfragen geeignet sind, wurden seit etwa 1980 zwei weitere Arten von Datenbankmanagementsystemen entwickelt, objektorientierte (OODBMS) und insbesondere objekt-relationale Datenbankmanagementsysteme (ORDBMS), wie zum Beispiel Oracle8i, das im Rahmen dieser Arbeit verwendet wird. Objektrelationale Datenbankmanagementsysteme erweitern die am weitesten entwickelten relationalen Datenbankmanagementsysteme um objektorientierte Ansätze. Hierzu sollten nach Stonebraker[22] die Erweiterung um benutzerdefinierte Basistypen, die Unterstützung komplexer Objekte und die Konzepte der Vererbung zählen. Verschiedene objektrelationale Datenbankmanagementsysteme unterstützen einige dieser geforderten Erweiterungen, momentan ist allerdings kein Anbieter auf dem Markt, der alle Forderungen erfüllt. Ein Beispiel für eine Nichtstandardanwendung ist der Bereich der geografischen Datenverarbeitung. In diesem Wissenschaftszweig werden Geografische Informationssysteme (GIS) eingesetzt, die räumliche Daten speichern, miteinander verknüpfen und grafisch darstellen. Die Verwaltung der Daten kann dabei sowohl GIS-intern als auch extern in einer angekoppelten Datenbank erfolgen. Geografische Informationssy- 1 2 KAPITEL 1. EINLEITUNG steme werden in den unterschiedlichsten Bereichen eingesetzt. Anwendung finden sie in der Verkehrs- und Bauplanung ebenso wie in der Geografie bei der Untersuchung ökologischer Prozesse und Prozesszustände. Im Rahmen mehrerer am Geographischen Institut der Universität Hannover durchgeführten DFG-Forschungsprojekte wurden Simulationsmodelle entwickelt, um Stoffverlagerungen in Landschaften vorherzusagen [7]. Unter Stoffverlagerungen sind in diesem Zusammenhang sowohl der Transport von Partikeln im Boden als auch Bodenerosion zu verstehen. Kenntnisse über diese Transportprozesse werden beispielsweise benötigt, um durch Pflanzendünge- und schutzmittel verursachte stoffliche Belastungen von Gewässern abzuschätzen, die durch Fließgewässer an Erosionssysteme angeschlossen sind. Üblicherweise sind die entwickelten Simulationsmodelle an ein Geografisches Informationssystem gekoppelt. Die Eingangsdaten der Simulationsmodelle sind vielfältig. Ihre Aufnahme, Verwaltung und Speicherung erfolgt in sogenannten Informationsebenen. Eine Informationsebene enthält thematisch zusammenhängende Informationen über einen bestimmten Ausschnitt der realen Welt, beispielsweise den Boden, das Klima oder die Vegetation. Für die Ableitung von Daten aus Eingangsdaten müssen gegebenenfalls mehrere Informationsebenen miteinander verknüpft werden. Zum Beispiel ist die Bodenfeuchte, die in der Praxis nicht an allen Orten zu messen ist, für die Bodenerosion von zentraler Bedeutung und durch geeignete Verfahren quasiflächenhaft abzuschätzen. Diese Abschätzung verknüpft die Informationsebenen Boden, Klima, Vegetation und Relief. Ein bei diesen Verknüpfungen auftretendes Problem ist, dass die Daten in unterschiedlichen Datenformaten vorliegen, die bei Berechnungen gegebenenfalls unter Informationsverlust ineinander konvertiert werden müssen. Geografische Informationssysteme sind primär entwickelt worden, um geometrische Operationen durchzuführen und Karten zu erzeugen. Datenbanksysteme hingegen sind für die Speicherung und Verwaltung der an geometrische Informationen gebundenen Sachdaten den Geografischen Informationssystemen vorzuziehen. Im Rahmen dieser Arbeit wird zunächst ein semantisches Datenmodell für Bodendaten entwickelt, das anschließend implementiert wird. Dieses Datenmodell enthält neben den Sachdaten der verschiedenen Informationsebenen auch geometrische Informationen, damit GIS-extern mehrere Informationsebenen an beliebigen Punkten miteinander verknüpft werden können. Desweiteren werden beispielhaft Methoden implementiert, die aus Eingangsdaten mehrerer Informationsebenen neue Daten ableiten. Grundlage für die Verknüpfungen der Eingangsdaten bilden die vom Niedersächsischen Landesamt für Bodenforschung herausgegebenen Auswertungsmethoden im Bodenschutz [17] und die von der Ad-hoc-Arbeitsgruppe Boden der Geologischen Landesämter und der Bundesanstalt für Geowissenschaften und Rohstoffe der Bundesrepublik Deutschland unter Leitung von Werner Pälchen erarbeitete Bodenkundliche Kartieranleitung [1]. Die für die Methoden benötigten Eingangsdaten sind vom Geographischen Institut der Universität Hannover, Abteilung Physische Geografie und Landschaftsökologie, bereit- 3 gestellt worden. Sie basieren auf Messungen in einem ca. 20 km südlich von Hildesheim gelegenen Untersuchungsgebiet (Groß-Ilde), das eine räumliche Ausdehnung von ca. 3km × 3km km hat. Aus diesen inhaltlichen Zielvorgaben ergibt sich für diese Arbeit der folgende Aufbau: Kapitel 2 gibt eine Einführung in Geografische Informationssysteme, insbesondere werden die in Geografischen Informationssystemen üblichen Datenformate und Operationen erläutert. Kapitel 3 gibt einen Überblick über den Entwurf von Datenbanksystemen. Es werden die Architekturprinzipien sowie die Phasen des Datenbankentwurfs vorgestellt und die in den folgenden Kapiteln benötigten Konzepte des verwendeten semantischen Datenmodells (UML) vorgestellt. Zusätzlich wird eine Einführung in das Relationenmodell gegeben, das Grundlage des implementierten Datenmodells von Oracle8i ist. Oracle8i wird als Datenbanksystem im Rahmen dieser Arbeit verwendet. Daher schließt Kapitel 3 mit einem Überblick über die objekt-relationalen Konzepte dieses Datenbanksystems, die über das Relationenmodell hinausgehen und stellt das Spatial Cartridge vor, das zur Verwaltung räumlicher Daten entwickelt wurde. Kapitel 4 befasst sich mit dem konkreten Entwurf eines Datenmodells für Bodendaten. Es wird eine Anforderungsanalyse durchgeführt und externe Schemata entwickelt, die in ein konzeptionelles Schema integriert werden. Das konzeptionelle Schema wird schließlich in ein logisches Modell transformiert und implementiert. Kapitel 5 beschreibt die zum Datenimport der zur Verfügung gestellten Daten notwendigen Schritte sowie die erforderliche Datenbereinigung. In Kapitel 6 wird beispielhaft die Methode zur Ableitung der Sickerwasserrate implementiert. Diese Methode ist in mehrere Schritte zu unterteilen, die in den einzelnen Unterabschnitten erläutert werden. Hierzu zählen sowohl einfache Ableitungen neuer Daten aus Ausgangsdaten als auch komplexe geometrische Berechnungen, die durch Methoden des Spatial Cartridge ausgeführt werden. In diesem Zusammenhang werden räumliche Indexe untersucht, die für eine effiziente Bearbeitung der räumlichen Anfragen an das Datenbanksystem eingesetzt werden. Kapitel 7 schließt die Arbeit mit einem Überblick über die gemachten Erfahrungen und einen kurzen Ausblick auf zukünftige Entwicklungen ab. 4 KAPITEL 1. EINLEITUNG Kapitel 2 Geografische Informationssysteme 2.1 Allgemeines Geografische Informationssysteme (GIS) dienen der effizienten Speicherung, Verwaltung und Visualisierung räumlicher Daten (Objekte) der realen Welt. Sie sind gegenwärtig selbstverständliche Werkzeuge bei der Bearbeitung raumbezogener Fragestellungen in Forschung und Praxis. Generell können Geografische Informationssysteme überall dort eingesetzt werden, wo Karten zur Planung, Dokumentation und Entscheidungsfindung genutzt werden, die Daten mit einem gemeinsamen Raumbezug miteinander verknüpfen. Als Beispiel sei hier lediglich die Analyse landschaftshaushaltlicher Prozesse, die Daten sowohl horizontal, als auch vertikal miteinander verknüpft, angeführt. Im Gegensatz zu Standard-Datenbanksystemen werden in Geografischen Informationssystemen auch räumliche Informationen bereitgehalten. Jedes Objekt, das mit einem GIS verwaltet wird, hat räumliche und Sachinformationen. Die räumlichen Informationen bestimmen die geographische Lage sowie die Ausdehnung, die Sachinformationen die Eigenschaften des Objektes. Die Verwaltung der räumlichen Daten erfolgt im GIS. Die Sachdaten können ebenfalls im GIS oder alternativ durch ein an das GIS gekoppeltes Datenbanksystem verwaltet werden. Dieses Kapitel gibt einen Überblick über die heutzutage in Geografischen Informationssystemen verwendeten Datenstrukturen und die gängigen Methoden und Operationen zur räumlichen Datenanalyse. Betrachtet werden insbesondere der Speicherbedarf und die Genauigkeit der unterschiedlichen Datenformate sowie der Aufwand verschiedener Methoden unter Berücksichtigung der zugrunde liegenden Datenstruktur. Zunächst folgt aber ein Abschnitt, in dem erläutert wird, wie Daten bereits bei der Aufnahme grob in sogenannte Informationsebenen unterteilt werden. 5 6 2.2 KAPITEL 2. GEOGRAFISCHE INFORMATIONSSYSTEME Informationsebenen Zur Arbeit mit einem GIS werden Daten benötigt, die im Wesentlichen durch örtliche Feldarbeiten (z.B. Vermessungen, geologische Stichproben) sowie Luftbilder und Satellitenaufnahmen gewonnen werden. Die Aufnahme der Daten erfolgt üblicherweise für einen Ausschnitt der realen Welt, durch Bodenproben werden beispielsweise Bodeninformationen erhalten, durch Klimamessungen Informationen über das Klima. Die Daten werden thematisch zusammengehörig als Daten einer Informationsebene bezeichnet, die mehrere, möglichst alle, diesen Bereich betreffenden Informationen enthält. Ein Layer ist ein thematischer Ausschnitt einer Informationsebene oder eine Kombination mehrere Attribute. In diesem Sinn ist auch eine Informationsebene ein Layer, da sie mehrere Attribute kombiniert. Layer werden betrachtet, wenn einzelne Informationen (verschiedener Informationsebenen) miteinander kombiniert werden sollen. Beispielsweise könnte die Temperaturverteilung (Informationsebene Klima) in Abhängigkeit von der Vegetation (Informationsebene Nutzung) interessieren. Hierzu werden die entsprechenden Layer zueinander in Beziehung gesetzt, um Aussagen darüber zu machen, ob und wie die Vegetation die Temperatur beeinflusst. 2.3 GIS-Daten Es gibt eine Vielzahl geografischer Objekte und Phänomene, die durch ein GIS verwaltet werden. Diese Objekte variieren stark hinsichtlich Ausdehnung, Form, struktureller Komplexität und ihrer Verteilung im Raum. Ein GIS muss daher sowohl kontinuierliche Erscheinungen, die flächenhaft und quasi unbegrenzt im Raum auftreten (z.B. Temperatur der untersten Luftschicht), als auch diskrete Erscheinungen, d.h. abgrenzbare Flächen (z.B. See), linienhafte Phänomene (z.B. Straße) sowie punkthafte Informationen (z.B. geologische Bohrdaten) verwalten können. Für diese unterschiedlichen Anforderungen wurden mehrere Datenformate für Geografische Informationssysteme entwickelt, um zum einen den Speicherplatzbedarf und zum anderen den Verlust an Information bei der digitalen Codierung der Realdaten, zu minimieren. Die vier wichtigsten Datenformate, die von jedem GIS unterstützt werden sollten, sind Rasterdaten, Vektordaten, Punktdaten und Sachdaten. Es ist anzumerken, dass einige Geografische Informationssysteme Punktdaten den Vektordaten unterordnen. Rasterdaten, Vektordaten und Punktdaten sind geografische Daten, die die Lage, Form und Ausdehnung räumlicher Objekte beschreiben, Sachdaten halten objektbezogene nichträumliche Informationen vor. Ein GIS sollte neben diesen unterschiedlichen Datenstrukturen selbst, auch Methoden bereitstellen, die die unterschiedlichen räumlichen Datenformate mit minimalem Informationsverlust ineinander konvertieren. In den folgenden Unterabschnitten werden die unterschiedlichen räumlichen Formate, sowie ihre Vor- und Nachteile diskutiert. 2.3. GIS-DATEN 2.3.1 7 Rasterdaten Rasterdaten werden eingesetzt, um kontinuierlich im Raum verteilte und flächenhafte Daten aufzunehmen. Dabei wird eine Fläche bzw. ein Raum äquidistant in Zellen eingeteilt, sodass eine Matrixstruktur quadratischer bzw. würfelförmiger Rasterzellen entsteht. Jedes solche Matrixelement wird bezüglich des betrachteten Sachdatums (Attribut) beziehungsweise einer Kombination von Sachdaten als homogen angesehen und erhält einen Wert zugewiesen (Abbildung 2.1). Die entstandene Matrix wird abgespeiy 5 1 1 1 2 2 2 2 2 2 3 3 3 4 1 1 1 1 3 2 2 1 1 3 3 1 3 2 2 1 1 3 2 1 3 3 3 3 1 2 2 2 1 3 3 1 1 2 1 1 1 1 1 2 3 3 3 3 1 1 2 2 1 2 2 1 2 3 4 5 6 7 8 9 10 11 12 x Abbildung 2.1: Rasterdaten chert. Der Zugriff auf die einzelnen Rasterzellen der Matrix erfolgt über die Angabe von Zeile und Spalte oder über die geografischen Koordinaten (in Abbildung 2.1 als x bzw. y bezeichnet). Die Genauigkeit der Beschreibung räumlicher Objekte ist dabei abhängig von der Auflösung des Rasters. 2.3.2 Vektordaten Vektordaten werden eingesetzt, um linienhafte Elemente und homogene Flächen zu speichern. Linienhafte Elemente werden als Polygonzüge, homogene Flächen als geschlossene Polygonzüge abgelegt (siehe Abbildung 2.2). Die Polygonzüge werden aus Punkten mit Verbindungslinien zusammengesetzt, die mehrere Koordinaten besitzen. Innerhalb der durch einen Polygonzug umschriebenen Fläche werden die Sachdaten als homogen angesehen. 2.3.3 Punktdaten Punktdaten werden eingesetzt, um Stichproben an unregelmäßig im Raum verteilten Standorten aufzunehmen. In manchen Geografischen Informationssystemen stellen Punktdaten ein eigenes Format dar, in anderen sind sie dem Vektorformat untergeordnet. 8 KAPITEL 2. GEOGRAFISCHE INFORMATIONSSYSTEME y 4 3 2 1 1 2 4 3 4 3 1 2 x Abbildung 2.2: Vektordaten Punktdaten dienen der Darstellung und Verortung von Messpunkten aller Art. Üblicherweise werden die Punktdaten als Grundlage für eine flächenhafte Extrapolation von Messwerten benutzt. Ein typisches Beispiel für diese Zuordnung ist die Verknüpfung von an einem Standort gemessenen Daten (Punktdaten) mit einem zugeordneten (geschlossenen) Polygon. Die an dem Standort aufgenommenen Daten werden für alle durch das Polygon umschlossenen Punkte als Referenzwerte angesehen. Grund für diese Extrapolation ist, dass in der Praxis nicht an jedem beliebigen Punkt Werte gemessen werden können. Fachpersonal bestimmt daher Flächen, die bezüglich der aufgenommenen Daten gleiche oder zumindest sehr ähnliche die Daten beeinflussende Faktoren aufweisen und ordnen diesen Flächen die für den Referenzstandpunkt erhaltenen Werte oder eine Referenz auf diesen Standort zu. 2.3.4 Rasterdatenformat vs. Vektordatenformat Das Rasterdatenformat und das Vektordatenformat sind für die Aufnahme flächenhafter Phänomene die dominierenden Formate. Sie unterscheiden sich allerdings stark hinsichtlich des Speicheraufwands und der Genauigkeit der Beschreibung. Abhängig von der realen Größe der Objekte im Verhältnis zu dem der Datenaufnahme zugrunde liegenden Maßstab und den auf die Daten anzuwendenden Operationen, ist daher häufig eines der beiden Datenformate vorzuziehen. Die Abbildungen 2.3 und 2.4 verdeutlichen diese Problematik. Gegeben ist ein Untersuchungsgebiet mit zwei flächenhaften Objekten (Ackerschlag, Wald) und einem linienhaften Objekt (Abflussgraben). Wird dieses Untersuchungsgebiet wie in Abbildung 2.3 durch ein Raster überlagert, so fallen zwei Dinge auf: 1. Die flächenhaften Objekte Ackerschlag und Wald belegen viele Rasterzellen und benötigen daher viel Speicherplatz. 2.3. GIS-DATEN 9 a b c d e f g h i j k l m n o 1 2 3 4 5 6 7 8 Ackerschlag Abflussgraben Wald Rasterlinie Abbildung 2.3: Abflussgraben zwischen Ackerschlag und Wald im Rasterdatenformat 2. In den Rasterzellen k1 − k8 treten zwei Attributwerte (Abflussgraben und Wald) auf, jeder Rasterzelle kann aber nur ein Attributwert zugewiesen werden. Das erste Problem ist, falls keine hoch aufgelösten Raster verwendet werden, durch stark gestiegene und stark steigende Rechner- und Speicherkapazitäten vermutlich vernachlässigbar. Für das zweite Problem werden allerdings Entscheidungsregeln benötigt, die den betreffenden Rasterzellen eindeutig einen Wert zuweisen. Hier kann nun auf verschiedene Arten argumentiert werden: 1. Da der Abflussgraben in den betrachteten Rasterzellen weniger Raum als der Wald einnimmt, wird diesen Zellen das Attribut Wald zugewiesen. Der Abflussgraben bleibt unberücksichtigt. 2. Der Abflussgraben ist von großer bodenkundlicher Bedeutung und muss berücksichtigt werden. Den Zellen wird das Attribut Abflussgraben zugewiesen. Je nach betrachtetem Problembereich ist eine der Alternativen vorzuziehen. Beispielsweise ist der Abflussgraben für Erosionsprozesse und damit für den Abfluss von Dünge- und Pflanzenschutzmitteln in Gewässer von entscheidender Bedeutung. Die erste Alternative vermindert daher beträchtlich den Informationsgehalt und auf diesen Daten berechnete Simulationen wären mit einer großen Unsicherheit behaftet. Ordnet ein GIS allerdings jeder Rasterzelle immer den Wert zu, der den meisten Raum der Rasterzelle einnimmt, so schafft eine Verfeinerung des Rasters im vorliegenden Fall Abhilfe. Dadurch würde allerdings, je nach Verfeinerung, ein Vielfaches an Datenmaterial zu speichern und zu verwalten sein, ohne Erhöhung des Informationsgehalts für die flächenhaften Objekte Ackerschlag und Wald bzw. mit nur minimal mehr Information für den Wald. Dies ist aber, wie bereits erwähnt, eventuell vernachlässigbar. An dieser Stelle sei darauf hingewiesen, dass das eben beschriebene Problem der Speicherung linienhafter Daten im Rasterformat ebenfalls bei der Beschreibung gekrümmter (linienhafter) Elemente auf- 10 KAPITEL 2. GEOGRAFISCHE INFORMATIONSSYSTEME tritt. Die Behandlung dieser Problematik ist in den verschiedenen verfügbaren Geografischen Informationssystemen nicht einheitlich. Es existiert sowohl der oben beschriebene Ansatz, also die Zuordnung des räumlich größten Attributs an die Rasterzelle, als auch Ansätze, die unterschiedlichen möglichen Attributen verschiedene Prioritäten zuordnen und diese Prioritäten mit in den Entscheidungsprozess einbeziehen, ähnlich der zweiten Alternative. Für kleine und linienhafte Objekte ist allerdings eine angemessenere Datenstruktur zur Speicherung entwickelt worden, das Vektorformat. Abbildung 2.4 veranschaulicht die Speicherung der Objekte aus Abbildung 2.3 im Vektorformat. Ackerschlag Abflussgraben Wald Vektorlinie Abbildung 2.4: Abflussgraben zwischen Ackerschlag und Wald im Vektorformat Im Vektorformat werden lediglich die Stützstellen der Polygone (in geordneter Reihenfolge) abgespeichert. Für die Objekte Ackerschlag und Wald sind daher nur vier Werte nötig, für den Abflussgraben reichen zwei Werte (Anfangs- und Endpunkt des Abflussgrabens) zur räumlichen Beschreibung aus. Nicht geeignet sind Vektordaten allerdings zur Erfassung von quasi-kontinuierlichen Flächendaten (z.B. Niederschlagsverteilung, Bilddaten, Höhenprofilen), die aus sehr vielen kleinen Objekten bestehen, also insgesamt eine stark heterogene Struktur aufweisen und daher eine Vielzahl von Polygonen zur Beschreibung benötigen, die jeweils nur kleine Flächen umfassen. Neben der Speicherung der raumbezogenen Daten ist als weiterer Aspekt die Menge und Komplexität der Methoden und Operationen auf den Daten für die Auswahl des Datenformates von Bedeutung. Die Grundoperationen eines GIS werden im folgenden Abschnitt erläutert. 2.4. GIS-OPERATIONEN 2.4 11 GIS-Operationen Zur Analyse der aufgenommenen Daten sollte ein Geografisches Informationssystem eine Grundmenge an Operationen unterstützen. 1. Konvertierungen und Generierung neuer Daten Daten, die in einer Datenstruktur vorliegen, sollten mit möglichst geringem Informationsverlust in eine andere Datenstruktur konvertiert werden können. Zusätzlich sollte die Möglichkeit bestehen, abgeleitete Daten in einer anderen als der Eingangsdatenstruktur zu speichern. Beispiel: Informationen über die Beschaffenheit des Geländes eines Beobachtungsgebietes (Geländemodell) werden üblicherweise im Rasterdatenformat aufgenommen. Aufgenommener Wert ist die Höhe, aus der die Hangneigung und die Ausrichtung (Exposition) des Geländes für die den Rasterpunkten zugeordneten Flächen berechnet werden. Sind nun für die Kartenerzeugung oder Berechnung abgeleiteter Werte die Höhenlinien des Untersuchungsgebietes von Interesse, so bietet sich in natürlicher Weise das Vektorformat für die weitere Bearbeitung an, da dieses Format linienhafte Elemente, beispielsweise Höhenlinien, wie oben erläutert deutlich effizienter unterstützt als das Rasterformat. 2. Räumliche/Geometrische Selektion Eine häufige Anfrageart an ein Geografisches Informationssystem sind Punkt- und Bereichsanfragen, wie in den Abbildungen 2.5 und 2.6 dargestellt. Gesucht sind alle x Abbildung 2.5: point-query Abbildung 2.6: window-query Objekte, die einen gegebenen Punkt bzw. ein gegebenes Polygon geometrisch beinhalten oder schneiden. Ein Sonderfall der Bereichsanfragen sind Fenster-Anfragen (Window-Queries). In diesem Fall ist der Anfragebereich kein beliebiges Polygon, sondern ein achsenparalleles Rechteck wie es beispielsweise mit der Maus auf Karten aufgezogen werden kann. 3. Nachbarschaftsanfragen Gesucht sind benachbarte Objekte eines ausgezeichneten Objektes (Abbildung 2.7) oder eine Menge von Objekten, die innerhalb einer bestimmten Umgebung um ein Objekt liegen (Abbildung 2.8). Eine Beispiel für eine Nachbarschaftsanfra- 12 KAPITEL 2. GEOGRAFISCHE INFORMATIONSSYSTEME Abbildung 2.7: Nachbarobjekte Abbildung 2.8: Objekte innerhalb einer bestimmten Entfernung ge wäre: Welche Gebäude liegen an einer bestimmten Straße ?“ Diese Anfragen ” sind insbesondere bei dynamischen Simulationsprozessen von Bedeutung, da sich die Objekte gegenseitig beeinflussen und es daher von Interesse ist, in welcher räumlichen Beziehung bestimmte Objekte stehen. 4. Flächenverschneidungen Durch die Verschneidung (overlay) zweier Informationsebenen entsteht ein neuer Layer, der beide Informationsebenen zusammenfasst und die Auflösung des Layers verfeinert (siehe Abbildung 2.9). 1 b 2 3 Informationsebene Boden 1a a 4 Verschneidung d c 4a 1b 4d 2b 3d 2c 3c Informationsebene Nutzung Abbildung 2.9: Verschneidung zweier Informationsebenen Abhängig von der Wahl des Datenformates der räumlichen Daten erfordern Nachbarschaftsanfragen und Flächenverschneidungen einen unterschiedlich hohen Aufwand und es stellt sich heraus, dass der Rasteransatz für Flächenverschneidungen dem Vektoransatz überlegen ist, während bei Nachbarschaftsanfragen das Vektorformat Vorteile bietet. Die Flächenverschneidung im Vektorformat erfordert die Berechnung von Schnittpunkten verschiedener Polygone, um daraus neue Polygone abzuleiten. Hierbei entsteht ein weiteres Problem und zwar, dass aufgrund kaum zu vermeidender Digitalisierungsfehler eine Vielzahl kleinster Flächen entstehen können, die nach der Verschneidung manuell korrigiert werden müssen. Für die Flächenverschneidung im Rasterformat ist es ausreichend, jeweils Rasterzellen an der gleichen Stelle miteinander zu verknüpfen. Für diese Operation im Rasterformat muss allerdings gewährleistet sein, dass die zu verschneidenden Raster denselben Ursprung, dieselbe Orientierung und denselben Maßstab, also 2.4. GIS-OPERATIONEN 13 insbesondere dieselbe Rasterzellengröße, besitzen. Bei genauer Betrachtung der Flächenverschneidung fällt auf, dass im Vektorformat neue geometrische Objekte gebildet werden, denen die Sachdaten der urspränglichen Informationsebenen angeheftet werden. Es findet demnach eine Berechnung auf den geometrischen Daten statt. Die Flächenverschneidung im Rasterformat ordnet lediglich bereits vorhandenen Rasterzellen neue Werte zu. Hier werden also keine Berechnungen, sondern ausschließlich Vergleiche und Zuweisungen durchgeführt. Dies erklärt die wesentlich schnellere Berabeitung der Verschneidungsoperationen im Rasterformat. Nachbarschaftsanfragen hingegen sind für im Vektorformat vorliegende Daten effizienter zu bearbeiten. Es muss im Vektorformat lediglich berechnet werden, welche Objekte an der Grenze zu einem Objekt oder in einer bestimmten Entfernung liegen. Die geometrischen Informationen über die Ausdehnung der Objekte können dann aufgrund der Zuordnung von Objektdaten und Geometriedaten leicht erhalten werden. Im Rasterformat müssen die einzelnen Rasterzellen untersucht werden und die Überprüfung stattfinden, ob ein Punkt noch zu einem Objekt gehört. Die Ausmaße von Objekten sind im Rasterformat also nur schwierig zu bestimmen. Zusammenfassend ist festzuhalten, dass sowohl das Raster- als auch das Vektorformat Vor- und Nachteile bieten, sodass die Entscheidung für ein Format abhängig von den zu erwartenden Anfragen getroffen werden sollte, soweit es nicht bereits durch die Art der Datenaufnahme festgelegt ist. Weitere Informationen zu Geografischen Informationssystemen finden sich zum Beispiel in [4] und [16] oder auch im Internet [24]. 14 KAPITEL 2. GEOGRAFISCHE INFORMATIONSSYSTEME Kapitel 3 Datenbanksysteme Gegenstand dieses Kapitels sind Datenbanksysteme (DBS) unter besonderer Betrachtung des in dieser Arbeit verwendeten Datenbanksystems Oracle8i. Zunächst wird erläutert aus welchen Komponenten ein DBS zusammengesetzt ist und welche Phasen beim praktischen Entwurf einer Datenbank existieren. Es schließt sich ein Überblick über die Modellierungssprache UML sowie das Relationenmodell an, in dem die grundlegenden Konzepte dieser Datenmodelle dargestellt werden. Abschließend werden die später verwendeten objektrelationalen Konzepte von Oracle8i erläutert, und es wird ein Überblick über das Spatial Cartridge gegeben, in dem die in ihm definierten Objekttypen und Methoden vorgestellt werden. 3.1 Allgemeines Ein Datenbanksystem (DBS) besteht aus zwei Teilen: • Datenbestand • Datenbankmanagementsystem Der Datenbestand ist die Menge der durch das Datenbankmanagementsystem (DBMS) verwalteten Daten. Das DBMS selbst ist eine Sammlung von Programmen, die für die Verwaltung des Datenbestandes notwendig sind. Zugriffe auf die Daten erfolgen durch das DBMS, das als zwischen Benutzer und Daten geschaltete Schicht die Konsistenz der Daten gewährleistet. Für die Benutzer stellt es eine Datenbanksprache zur Verfügung. Die Datenbanksprache gliedert sich in einen Teil zur Datendefinition (Data Definition Language DDL) und einen Teil zur Datenmanipulation (Data Manipulation Language DML), beispielsweise für Anfragen und Änderungen des Datenbestandes. Durch das DBMS und die zentrale Verwaltung der Daten werden folgende Punkte gewährleistet: 15 16 KAPITEL 3. DATENBANKSYSTEME • alle Daten werden in einem integrierten Bestand nach Möglichkeit jeweils nur einmal und dauerhaft gespeichert, wodurch weitgehend Redundanzfreiheit gewährleistet ist • Daten bleiben über die jeweilige Lebensdauer des auf sie zugreifenden Programms hinaus erhalten • Daten sind konsistent • gleichzeitiger Transaktionen mehrerer Benutzer werden synchronisiert Hervorzuheben ist, dass durch ein DBS verschiedene Daten in einem Bestand integriert werden und so die Möglichkeit besteht, sehr flexibel mithilfe der DML Anfragen an das DBS zu stellen, das diese Daten beliebig miteinander verknüpfen kann. Die Struktur der zu verwaltenden Daten wird dem DBMS durch die DDL übergeben. Der Inhalt dieser Datenbeschreibung wird auch als Datenbank-Schema bzw. als MetaDaten bezeichnet. Äquivalente Ausdrücke für die gespeicherten Daten sind DB-Zustand, Inhalt oder auch Ausprägung der Datenbank. Ein Datenbankschema ist aus mehreren Bestandteilen zusammengesetzt. Das theoretische Minmum bilden • Strukturbeschreibungen • Integritätsbedingungen und • Zugriffsrechte. Die Strukturbeschreibungen beschreiben die Struktur der zu verwaltenden Daten, beispielsweise welche Objekte durch das DBMS zu verwalten sind und welche Attribute die Objekte besitzen. Die Notation erfolgt häufig durch Datenmodelle. Ein Datenmodell ist eine Sammlung von Konzepten zur Datenbeschreibung und -strukturierung. Integritätsbedingungen sichern die Konsistenz der Daten. Ein Beispiel einer Integritätsbedingung für ein Reservierungssystem einer Fluggesellschaft wäre, dass kein Sitzplatz eines Fluges mehr als einmal reserviert werden darf. Schließlich schränkt die Vergabe von Zugriffsrechten die Anfragemöglichkeiten der einzelnen Benutzer ein. Dies dient insbesondere dem Datenschutz. In der Praxis kommen zu diesen drei Bestandteilen üblicherweise noch weitere hinzu. Dazu gehören Trigger, die für die Einhaltung komplexer Integritätsbedingungen eingesetzt werden, Sichten (Views), um Benutzern nur einen (für sie relevanten) Ausschnitt der Datenbank zu zeigen sowie Zugriffe darauf zu ermöglichen und prozedurale Erweiterungen der DML, die selbst mengenorientiert arbeitet. 3.2. DATENBANKENTWURF 3.2 17 Datenbankentwurf Beim Entwurf einer Datenbank ist zwischen der Architektur und dem physischen Entwurf eines Datenbanksystems zu unterscheiden. 3.2.1 Architekturprinzipien Nach einem Vorschlag von ANSI/SPARC (American National Standard Institute / System Planning and Requirement Comittee) aus dem Jahr 1978 gliedert sich die Architektur eines Datenbanksystems in drei Ebenen: • interne Ebene • konzeptionelle Ebene • externe Ebene Die interne Ebene beschreibt die physische Organisation der Daten. Es wird eine vollständige Beschreibung der Speicherung der Daten und der Zugriffspfade gegeben. Insbesondere werden hier auch Indexe auf den Daten angegeben. Die konzeptionelle Ebene beschreibt eine Gesamtsicht auf die zu verwaltenden Daten. Das konzeptionelle Schema enthält keine Details über Speicherstrukturen, sondern beschreibt Objekte, Datentypen, Beziehungen, benutzerdefinierte Operationen und zusätzliche Bedingungen (Integritätsbedingungen) der Datenbank. Zur Beschreibung der konzeptionellen Ebene werden semantische Datenmodelle (zum Beispiel (E)ER-Modell [8] oder UML [20]) verwendet. Die externe Ebene beinhaltet verschiedene Sichten der Benutzer auf die Daten. Jede externe Sicht beschreibt einen Teil der Datenbank, der für einen bestimmten Benutzer oder eine Benutzergruppe relevant ist. Auch für diese Beschreibungen werden semantische Datenmodelle eingesetzt. Die Trennung in verschiedene Architekturebenen hat zum Ziel, einen gewissen Grad an Datenunabhängigkeit zu gewährleisten. Die zwei Arten von Datenunabhängigkeit sind: • physische Datenunabhängigkeit: Möglichkeit innerhalb der internen Ebene Veränderungen vorzunehmen, ohne dass das konzeptionelle (oder das externe) Schema verändert werden muss. Beispiel: Einführung zusätzlicher Zugriffsstrukturen (Indexe), die den Zugriff auf die Daten beschleunigen sollen. Allerdings sind nur im Idealfall gar keine Änderungen der anderen Ebenen notwendig. • logische Datenunabhängigkeit: Möglichkeit am konzeptionellen Schema Änderungen vorzunehmen, ohne dass das externe Schema oder Anwendungsprogramme verändert werden müssen. Beispiel: Erweiterung des Schemas. Alle Sichten und Anwendungsprogramme auf ursprünglichen Daten bleiben unverändert erhalten. 18 KAPITEL 3. DATENBANKSYSTEME 3.2.2 Phasen des Datenbankentwurfs Es wird zwischen vier Phasen des Entwurfs einer Datenbank unterschieden: 1. Anforderungsanalyse: In dieser Phase werden die Anforderungen an die zu entwerfende Datenbank gesammelt und analysiert. Hierbei werden sowohl die zu verwaltenden Objekte, als auch Methoden, die auf und zwischen den Objekten realisiert werden sollen, mit einbezogen. 2. Konzeptioneller Entwurf: Das konzeptionelle Schema beschreibt mithilfe eines semantischen Datenmodells Objekte, Beziehungen und Integritätsbedingungen, die sich aus der Anforderungsanalyse ergeben. In diesem Schema werden keine Implementierungsdetails angegeben. 3. Logischer Entwurf: Nach dem Entwurf des konzeptionellen Schemas wird dieses Modell in das Datenmodell des Datenbanksystems transformiert, das für die Anwendung zum Einsatz kommen soll. Das Ergebnis dieser Transformation ist das logische Schema. Ein weit verbreitetes und in dieser Arbeit verwendetes Datenmodell ist das RelationenModell. 4. Physischer Entwurf: In diesem Entwurf werden die internen Speicherstrukturen, Zugriffspfade auf die Daten und Details über die Organisation der Dateien der Datenbank festgelegt. Grundlage einer Datenbank ist ein Datenbankschema in einem semantischen Datenmodell. Als semantische Datenmodelle existieren unter anderem das für die Datenbankentwicklung klassische (Extended-)Entity-Relationship-Modell ((E)ER-Modell) und die für objektorientierte Analyse- und Entwurfsmethoden entwickelte Unified Modelling Language (UML). Die UML-Notation ist auch in anderen Bereichen der Informatik, wie beispielsweise der Softwareentwicklung, weit verbreitet und es stehen für die Modellierung mithilfe von UML ausgereifte Entwicklungswerkzeuge (z.B. Rational Rose) zur Verfügung. Sie ist allerdings sehr viel umfassender als das EER-Modell, da sie den gesamten Softwareentwicklungsprozess beschreibt. Unter anderem werden für die objektorientierte Entwicklung Klassendiagramme als Konzept zur Verfügung gestellt, die aber nur einen Ausschnitt des gesamten Spektrums von UML bilden. Für die Modellierung der Datenbankschemas werden Klassendiagramme in der UML-Notation verwendet. Da UML in dieser Arbeit als semantisches Datenmodell eingesetzt wird, bilden die Konzepte von UML den Gegenstand des nächsten Abschnitts. 3.3. UNIFIED MODELLING LANGUAGE (UML) 3.3 19 Unified Modelling Language (UML) Entscheidend für die Ausdrucksfähigkeit eines semantischen Datenmodells sind die vom Datenmodell zur Verfügung gestellten Konzepte. UML bietet an Modellierungskonzepten unter anderem Klassen mit entsprechenden Attributen und Methoden, Generalisierungen sowie (qualifizierte) Assoziationen an. Die für den Entwurf der Datenbank benötigten Modellierungskonzepte von UML werden in den folgenden Unterabschnitten kurz erläutert. Eine vollständige(re) Auflistung und Beschreibung von UML findet sich zum Beispiel in [9]. 3.3.1 Klassen Zunächst sollen die Begriffe Klasse, Objekt und Instanz erläutert werden. Ein Objekt der realen Welt besitzt bestimmte Eigenschaften (Attribute). Gleich strukturierte Objekte sind durch dieselbe Menge an Attributen bestimmt, wobei sich die Ausprägung der Attribute unterscheiden kann. Beispiel: Jeder Rechner (Klasse) hat einen Prozessor (Attribut), zwei verschiedene Rechner (Objekt, Instanz) können aber mit unterschiedlichen Prozessoren (Ausprägung) ausgestattet sein. Für gleich strukturierte Objekte wird eine Klasse eingeführt, deren Attribute denen der Objekte entsprechen. Ein Objekt ist dann eine Instanz der Klasse, d.h. es besitzt die Attribute der Klasse mit bestimmten Attributausprägungen. Objekt und Instanz werden im weiteren Text häufig synonym verwendet. Klassen werden in UML durch Rechtecke gekennzeichnet und mit ihrem Klassennamen benannt (Abbildung 3.1). Zusätzlich zum Klassennamen können Klassen noch Attribu- Klassenname attribut:Typ=initialer Wert Klassenname operation(argumentliste):rückgabetyp Abbildung 3.1: Klassen in UML te und Methoden angeheftet werden. Während der Klassenname ein Objekt bezeichnet (z.B. Standort oder Boden), beschreiben die Attribute Eigenschaften dieser Objekte (z.B. die Koordinaten eines Standortes oder den Typ eines Bodens). Die einer Klasse zugeordneten Methoden und Operationen können die Attribute der Klasse setzen, modifizieren, auslesen oder miteinander verknüpfen. Ein Beispiel für eine Methode wäre die Umwandlung von Koordinaten eines Standortes von einem Koordinatensystem in ein anderes. Eine Klasse kann abstrakt deklariert werden. Ist dies der Fall, so wird die Klasse im physischen Entwurf nicht implementiert, sondern dient lediglich als Schnittstelle zwi- 20 KAPITEL 3. DATENBANKSYSTEME schen verschiedenen Klassen. Notiert wird eine abstrakte Klasse durch Kursivschrift des Klassennamens. 3.3.2 Generalisierung Generalisierung wird eingesetzt, falls verschiedene Klassen Gemeinsamkeiten, aber auch Unterschiede besitzen. Abbildung 3.2 zeigt ein Beispiel. In dem Beispiel sind drei Klassen Person Name Adresse Geburtsdatum Alter() Angestellter Student Einstellungsdatum MatrikelNr Gehalt Semester Fachbereich Studiengang Jahresgehalt() Abbildung 3.2: Generalisierung in UML dargestellt, wie sie in einem Datenbankschema der Personalabteilung einer Universität vorkommen könnten. Instanzen der Klassen Angestellter und Student besitzen beide einen Namen, eine Adresse und einen Geburtstag. Daher wird eine Klasse Person eingeführt, der genau die gemeinsamen Attribute dieser beiden Klassen zugeordnet werden. Es findet eine Generalisierung statt. Die Klassen Angestellter und Student sind Unterklassen der Oberklasse Person. Neben diesen gemeinsamen Attributen sind in den jeweiligen Unterklassen noch weitere Attribute angegeben, beispielsweise wird für jeden Angestellten sein Gehalt und das Einstellungsdatum mit abgespeichert. Diese beiden Attribute sind aber lediglich für Instanzen der Klasse Angestellter und nicht für Instanzen der Klasse Student von Bedeutung. Daher werden sie nicht in die Oberklasse Person mit aufgenommen. Wird nun eine Instanz einer Unterklasse gebildet, so besitzt diese Instanz alle Attribute der Unterklasse und erbt zusätzlich die Attribute der Oberklasse. Eine Instanz von Student hat demnach die sechs Attribute Name, Adresse, Geburtsdatum, MatrikelNr, Semester und Studiengang. 3.3. UNIFIED MODELLING LANGUAGE (UML) 21 Ebenso wie Attribute können auch Methoden in Oberklassen definiert werden, die sich auf die Unterklassen, in denen zusätzliche Methoden angegeben werden können, vererben. Vorstellbar wäre hier eine Methode zur Berechnung des Alters einer Person für Instanzen von Person zu definieren, während die Berechnung des Jahresgehalts eine Methode der Klasse Angestellter ist. Das Alter von Personen kann dann für Instanzen beider Unterklassen berechnet werden, während das Jahresgehalt nur für Angestellte ermittelt wird. 3.3.3 Assoziationen Assoziationen repräsentieren Beziehungen zwischen Instanzen von Klassen und können mit einem Namen benannt werden (Abbildung 3.3). An einer Assoziation sind mindeName der Assoziation Klasse A Klasse B Abbildung 3.3: Assoziation in UML stens zwei Klassen beteiligt. Den an einer Assoziation beteiligten Klassen werden Kardinalitäten zugeordnet. Diese bestimmen die Anzahl der an einer Assoziation beteiligten Instanzen. Die Notation für Kardinalitäten in UML zeigt Abbildung 3.4, ein Beispiel ist in Abbildung 3.5 dargestellt. Die Angaben der Kardinalitäten im Beispiel legen fest, 1 * 0..1 m..n Klasse genau ein Klasse viele (Null oder mehr) Klasse optional (Null oder Eins) Klasse numerische Angabe Abbildung 3.4: Kardinalitäten in UML dass jeder Student an genau einer Universität studiert, an einer Universität aber mehrere Studenten eingeschrieben sind. Weiterhin hört ein Student eine beliebige Anzahl an Vorlesungen und eine Vorlesung wird von mehreren Studenten besucht. Als weiteres Konzept von UML ist in dem Beispiel eine Assoziationsklasse Studienzeit dargestellt. Eine Assoziationsklasse ist an eine Assoziation geheftet und durch die Angabe der an der Assoziation beteiligten Klassen eindeutig bestimmt. Im Beispiel besteht zwischen den Klassen Student und Universität die Beziehung studiert an, an die die Assoziationsklasse Studienzeit geheftet ist, die die Dauer der Zeit des Studiums an einer Universität dieser Beziehung hinzufügt. Die Assoziationsklasse besitzt die beiden Attribute Beginn und Ende, die Anfang und Ende der Zeit des Studierenden an einer Universität bezeichnen. 22 KAPITEL 3. DATENBANKSYSTEME Studienzeit Beginn Ende 1 Universität * studiert an n m Student Vorlesung Abbildung 3.5: Beispiel für Kardinalitäten Assoziationsklassen können ebenso wie andere Klassen Methoden besitzen. Im Beispiel wäre eine Methode zur Berechnung des Zeitintervalls denkbar. Zu bemerken ist, dass eine Instanz einer Assoziationsklasse durch die Angabe der an der Assoziation beteiligten Instanzen von Klassen eindeutig festgelegt ist. 3.4 Relationenmodell Nachdem ein Datenbankschema in einem semantischen Datenmodell entwickelt worden ist, ist die nächste Phase des Datenbankentwurfs die Transformation in ein implementiertes Datenmodell. Die wichtigsten verfügbaren implementierten Datenmodelle sind das hierarchische Modell, das Netzwerkmodell, das Relationenmodell, sowie eine Erweiterung des Relationenmodells, das objektrelationale Modell. Das hierarchische und das Netzwerkmodell sind satzorientierte Datenmodelle, die Datensätze über Referenzen miteinander verknüpfen. Sie haben heute fast nur noch historische Bedeutung. Grundlage vieler moderner DBMS ist das Relationenmodell. Es wurde in den 1970er Jahren entwickelt und verarbeitet Daten mengenorientiert. Es ist im Vergleich zu den satzorientierten Datenmodellen sehr einfach strukturiert und besteht im Wesentlichen aus flachen Tabellen (Relationen), in denen Zeilen einzelnen Datenobjekten entsprechen. 3.4.1 Modellierungskonzepte An Modellierungskonzepten stellt das Relationenmodell Objekte und Attribute zur Verfügung, Assoziationen sind durch Verknüpfungen von Relationen, auch Relationenschema genannt, bzw. Tupeln rekonstruierbar. Eine Relation ist mathematisch wie folgt definiert: Gegeben seien n nicht notwendigerweise unterschiedliche Wertebereiche D1 , D2 , . . . , Dn , die nur atomare Werte (Zahlen, Zeichenketten, ...) enthalten. Dann ist eine Relation R 3.4. RELATIONENMODELL 23 definiert als Teilmenge des kartesischen Produkts der n Wertebereiche: R ⊆ D 1 × D2 × . . . Dn Ein Element der Menge R heißtTupel. Im Datenbankbereich werden den einzelnen Komponenten der Tupel Namen gegeben und als Attribute bezeichnet. Das folgende einfache Beispiel verdeutlicht diese Vorgehensweise anhand einer Relation Student. Ein Student ist vereinfacht als eine Teilmenge des folgenden Kreuzproduktes festgelegt: Student ⊆ number(10) × char(20) × char(8) × number(2) Hierbei repräsentiert number(10) die Matrikelnummer, char(20) den Namen, char(8) das Fach und number(2) die Semesteranzahl des Studenten. Diese vier Werte sind die Attribute der Relation Student. Im Relationenschema würde diese Relation daher wie in Abbildung 3.6 notiert werden. Student (Matrikelnummer:number(10),Name:char(20),Fach:char(8), Semesteranzahl:number(2)) Abbildung 3.6: Relation Student Ein relationales Datenbankschema ist eine Sammlung mehrerer Relationen bzw. Relationenschemata mit verschiedenen Namen, wobei sich auch die Attribute je Relation unterscheiden müssen. Genaugenommen ist zwischen dem Schema einer Relation, das durch die Wertebereiche gegeben ist und der aktuellen Ausprägung zu differenzieren. Im obigen Beispiel wäre als Tupel auch (0,’abc’,’xyz’,99) korrekt, allerdings wird es kein Tupel mit dieser Ausprägung in der Datenbank geben. 3.4.2 Modellinhärente Integritätsbedingungen Zu einem vollständigen Relationenschema gehören neben der Deklaration von Relationenund Attributnamen, sowie der Wertebereiche der Attribute noch die im folgenden beschriebenen modellinhärenten Integritätsbedingungen: • Zu jedem Relationenschema muss ein Primärschlüssel definiert sein. Im obigen Beispiel ist dies Matrikelnummer. Dies wird durch die Unterstreichung des Attributes ausgedrückt. Durch einen Primärschlüssel können Tupel in Relationen eindeutig identifiziert werden, d.h. es gibt in einer Relation keine zwei Tupel, deren Attributausprägungen mit Ausnahme des Primärschlüsselattributs übereinstimmen. 24 KAPITEL 3. DATENBANKSYSTEME • Für die Modellierung von Beziehungen werden Fremdschlüssel eingesetzt. Für Fremdschlüssel muss die folgende Bedingung erfüllt sein: B 0 sei Schlüssel einer Relation R2 . Dann ist B Fremdschlüssel der Relation R1 bzgl. der Relation R2 , falls für jedes Tupel t1 aus R1 ein Tupel t2 aus R2 existiert, sodass die Werte von B und B 0 übereinstimmen. Formal: ∀(t1 : R1 )∃(t2 : R2 )(t1 .B = t2 .B 0 ). • Attribute dürfen bis auf Primarschlüsselattribute optional sein, also Nullwerte annehmen. 3.4.3 Transformation von UML ins Relationenschema UML bietet mehr Modellierungskonzepte als das Relationenmodell an, Grundlage eines in UML erstellten konzeptionellen Schemas bilden aber Klassen mit ihren Attributen, sowie Assoziationen zwischen Klassen. Daher wird zunächst die Transformation dieser Basiskomponenten betrachtet. • Klassen: Eine Klasse in UML entspricht einer Relation im Relationenmodell. Der Name der Klasse wird ebenso wie die Attribute üblicherweise übernommen, kann aber auch geändert werden. Für jede Relation wird ein (eventuell extra eingeführter) Primärschlüssel ausgezeichnet, der der Objektidentität von Instanzen der Klassen in UML entspricht. Abstrakt deklarierte Klassen werden nicht transformiert, da sie nur bei Generalisierungen eingesetzt werden und die Attribute dann den Attributen der Unterklasse hinzugefügt werden. • Assoziationen: Für jede Assoziation wird eine Relation erstellt. Attribute dieser Relationen sind die an die Assoziation gehefteten Attribute, die Attribute eventuell vorhandener Assoziationsklassen, ein gegebenenfalls wieder einzuführender Primärschlüssel, sowie Fremdschlüssel für die an der Assoziation beteiligten Klassen bzw. deren vorher entworfene Relationen. Die weiteren in Abschnitt 3.3 erläuterten Modellierungskonzepte von UML werden wie folgt transformiert. Für abstrakte Oberklassen, die bei Generalisierungen eingeführt werden, werden keine Relationen erzeugt. Die Attribute der abstrakten Oberklassen werden in die Attributliste der Unterklassen mit aufgenommen. Ist eine Oberklasse nicht abstrakt deklariert, so wird diese Klasse wie oben beschrieben in eine Relation transformiert und in den Unterklassen ein Fremdschlüsselattribut eingeführt, dass auf ein Tupel in der Relation der Oberklasse verweist. 3.5 Oracle 8i In dieser Arbeit wird das objektrelationale Datenbanksystem Oracle8i verwendet. Die verwendeten objektrelationalen Konzepte bilden den Gegenstand dieses Abschnitts. 3.5. ORACLE 8I 3.5.1 25 Objektrelationale Datenbanksysteme Wie bereits an der Transformation eines in UML entwickelten konzeptionellen Schemas in das Relationenmodell zu sehen ist, ist das Relationenmodell zu restriktiv, um objektorientierte Modellierungen direkt zu übersetzen. Aus diesem Grunde und der immer größer werdenden Verbreitung objektorientierter (OO) Techniken bei der Softwareentwicklung, wurde auch im Datenbankbereich mit der Entwicklung sogenannter Objektorientierter Datenbanksysteme (OODBS) begonnen. Diese bieten die Funktionalität herkömmlicher DBS, besitzen aber ein an objektorientierte Programmiersprachen angelehntes Datenmodell. Im Jahr 1989 wurde ein Kriterienkatalog entwickelt, der die Mindestanforderungen an OODBS festlegt und als sogenanntes OODB-Manifesto [2] bekannt geworden ist. Alternativ zur vollständigen Neuentwicklung OODBS wurde ein zweiter Weg beschritten, der die Relationalen Datenbanksysteme (RDBS) um objektorientierte Konzepte erweitert. Das Ergebnis dieser Erweiterung sind Objektrelationale Datenbanksysteme (ORDBS). Diese sollten auch die Punkte des Kriterienkatalogs erfüllen, allerdings sind keine DBS auf dem Markt, die dies vollständig leisten. 3.5.2 Komplexe Datentypen in Oracle8i Im Wesentlichen wird in dieser Arbeit das objektrelationale Konzept der komplexen Datentypen verwendet, das im Hinblick auf Oracle8i nun dargestellt wird. In Oracle8i können sogenannte benutzerdefinierte (user-defined) Objekttypen erzeugt werden. Ein Objekttyp besteht dabei aus einem Namen, einer Attributmenge und Methoden. Attributbereiche dürfen dabei selbst wieder objektwertig sein. Beispiel: CREATE TYPE Typ_Person AS OBJECT ( Name VARCHAR2(20), Geburtsdatum DATE, Anschrift TYP_ADRESSE, MEMBER FUNCTION age RETURN NUMBER, PRAGMA RESTRICT_REFERENCES (age,WNDS) ); ------ Name Geburtstag Adresse (Objekttyp) Methode Restriktionen für Methode Das Beispiel definiert einen neuen Objekttyp Person. Attribute dieses Objekttyps sind Name, Geburtsdatum und Anschrift, wobei der Wertebereich von Anschrift selbst wieder objektwertig ist. Schließlich wurde für diesen Objekttyp noch eine Methode age() definiert. Die Implementierung dieser Methode erfolgt getrennt von der Objekttypdefinition. Die letzte Zeile informiert Oracle8i über Seiteneffekte der Methode und schränkt Zugriffsrechte auf Tabellen gegebenenfalls ein. Ein definierter Objekttyp kann im Folgenden auch zur Deklaration von Tabellen verwendet werden. 26 KAPITEL 3. DATENBANKSYSTEME Beispiel: CREATE TABLE Mitarbeiter OF Typ_Person; Eine so deklarierte Tabelle kann als klassische Tabelle mit normalen Attributen (Objekttyp aufgelöst) oder als Tabelle mit einem (unbenannten) Attribut, auf das durch den Operator value zugegriffen werden kann, interpretiert werden. Zusätzlich können bei der Deklaration von Tabellen mithilfe eines Objekttyps auch Bedingungen, beispielsweise die Auszeichnung eines Primärschlüssels mit angegeben werden. Im obigen Beispiel würde unter der vereinfachenden Annahme, dass eine Person durch ihren Namen eindeutig zu identifizieren sei, Name wie folgt als Primärschlüssel einer neuen Tabelle festgelegt: CREATE TABLE Mitarbeiter OF Typ_Person ( Name PRIMARY KEY); Nach der Deklaration von Methoden für Objekttypen wird die Implementierung der Methoden mithilfe der Sprache PL/SQL separat vorgenommen. Die Implementierung folgt dabei folgendem Schema (am Beispiel der Methode age für den Objekttyp Typ Person): CREATE TYPE Typ_Person AS MEMBER FUNCTION age return NUMBER IS -- Variablendeklarationen BEGIN -- Methodenrumpf END; END; Definierte Methoden können in SQL-Statements wie Attribute genutzt werden, wobei hinter dem Methodennamen lediglich noch mögliche Parameterwerte geklammert übergeben werden: SELECT P.Name, P.age() FROM Mitarbeiter; Neben Objekttypen unterstützt Oracle8i auch zwei Arten von Kollektionstypen, Arrays und geschachtelte Tabellen (nested tables). Arrays sind allerdings für Anfragen nicht praktikabel, da sie nur als Einheit gelesen und geschrieben werden können und innerhalb eines SQL-Statements kein Zugriff auf einzelne Arrayelemente möglich ist. Geschachtelte Tabellen werden eingesetzt, falls ein Attribut mehrere Tupel aufnehmen soll. Ein Beispiel wäre die Speicherung mehrerer Adressen (verschiedene Wohnsitze) einer Person. Dies kann wie folgt implementiert werden. Zunächst wird ein Objekttyp Typ Adresse für Adressen erzeugt. Anschließend wird ein Typ Typ Adressen Tabelle definiert, der die Definition einer Tabelle ist und als Attribut den Objekkttyp Typ Adresse besitzt. CREATE TYPE Typ_Adresse AS OBJECT ( Stadt VARCHAR2(10), Strasse VARCHAR2(20), Hausnummer NUMBER 3.5. ORACLE 8I 27 ); CREATE TYPE Typ_Adressen_Tabelle AS TABLE OF Typ_Adresse; Als geschachtelte Tabelle wird dieser Typ dann wie folgt genutzt: CREATE TABLE Person ( Name VARCHAR2(10), Adressen Typ_Adressen_Tabelle ) NESTED TABLE Adressen STORE AS Wohnsitze; Die Werte der geschachtelten Tabelle werden in der nach store as angegebenen Tabelle abgelegt. Intern speichert Oracle8i die Werte der Tupel aller geschachtelten Tabellen dieser Tabelle darin. Der Zugriff auf die geschachtelte Tabelle erfolgt mithilfe des Schlüsselwortes the. INSERT INTO THE ( SELECT Adressen FROM Person WHERE Name = ’xyz’ ) VALUES (’abcde’,’fghij’,0); Eventuell kann bei diesem insert-Statement ein Fehler auftreten, der vermieden wird, indem die Tabelle zunächst durch einen leeren Konstruktor initialisiert wird. INSERT INTO Person VALUES( ’xyz’,Typ_Adressen_Tabelle() ); Der nächste Abschnitt beschreibt das Spatial Cartridge von Oracle8i. 3.5.3 Oracle8i Spatial Für die Speicherung, Verwaltung und Analyse räumlicher Daten bietet Oracle8i eine Sammlung integrierter Funktionen und Prozeduren an, die unter dem Namen Oracle8i Spatial, kurz Spatial, zusammengefasst sind. Die in Spatial verwendeten Datentypen und Formate entsprechen der vom Open-GIS-Consortium erarbeiteten Norm (siehe auch [18]). In diesem Abschnitt wird erläutert, wie räumliche Daten mittels Spatial in einer Datenbank abgelegt werden, wie Anfragen zu formulieren sind und welche Arten der Indexierung in Spatial existieren, um die Anfragen effizient zu bearbeiten. 3.5.3.1 Speicherung räumlicher Daten Für die Speicherung von Objekten mit einer räumlichen Komponente im objektrelationalen Schema von Oracle8i wird eine beliebige vom Benutzer anzulegende Tabelle benötigt, die eine Spalte vom Objekttyp MDSYS.SDO GEOMETRY besitzt. In dieser Tabelle wird für jede geometrische Instanz eine eigene Zeile angelegt. Bevor der Objekttyp 28 KAPITEL 3. DATENBANKSYSTEME MDSYS.SDO GEOMETRY genauer betrachtet wird, soll kurz erläutert werden, welches Datenmodell Spatial verwendet. Das Spatial zugrunde liegende Datenmodell ist hierarchisch aufgebaut und besteht aus Elementen, Geometrien und Layern. Räumliche Daten werden als Layer abgespeichert, die aus Geometrien zusammengesetzt sind, die wiederum aus Elementen bestehen. Elemente sind die Basiseinheiten eines geometrischen Objektes. In Spatial sind dies Punkte, Linienzüge und Polygone. Geometrien repräsentieren ein räumliches Merkmal, das aus primitiven Elementen zusammengesetzt ist. Eine Geometrie kann aus nur einem Element bestehen, das eine Instanz eines primitiven Typs ist. Ebenso kann eine Geometrie aber auch aus einer homogenen bzw. heterogenen Menge primitiver Datentypen zusammengesetzt sein. Ein Layer ist eine heterogene Sammlung von Geometrien, die alle dieselbe Attributmenge besitzen. Der Objekttyp SDO GEOMETRY ist in Spatial wie folgt definiert: CREATE TYPE sdo_geometry AS OBJECT ( SDO_GTYPE NUMBER, SDO_SRID NUMBER, SDO_POINT SDO_POINT_TYPE, SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY, SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY ); Das erste Attribut SDO GTYPE ist ein numerischer Wert, der den Typ der Geometrie angibt. Möglichen Attributwerte und ihre Bedeutung sind der Tabelle aus Abbildung 3.7 zu entnehmen. Der Geometrietyp Collection kann in Oracle 8i5 außer aus den primitiven Wert 0 1 2 3 Geometry Type UNKNOWN GEOMETRY POINT LINESTRING POLYGON 4 Collection 5 6 7 MULTIPOINT MULTILINESTRING MULTIPOLYGON Beschreibung wird ignoriert Geometrie enthält einen Punkt Geometrie enthält einen Streckenzug Geometrie enthält ein Polygon mit oder ohne Loch Geometrie ist heterogene Sammlung von Elementen Geometrie hat mehrere Punkte Geometrie hat mehrere Streckenzüge Geometrie hat mehrere disjunkte Polygone Abbildung 3.7: Werte für SDO GTYPE elementaren Datentypen noch aus folgenden Datentypen zusammengesetzt sein: • 2-D Arc-Line-Strings (durch Kreisbögen zusammengesetzte Streckenzüge) • 2-D Arc-Polygons (durch Kreisbögen zusammengesetzte Polygone) • 2-D Circles (Kreise) 3.5. ORACLE 8I 29 • 2-D Optimized Rectangles (Rechtecke) Das Attribut SDO SRID ist für zukünftige Zwecke reserviert. Es soll als Fremdschlüssel für eine Referenztabelle zur Definition von Geometrien dienen. Das Attribut SDO POINT ist ein Objekttyp mit drei numerischen Attributen X, Y und Z. Sind die beiden folgenden Attribute SDO ELEM INFO und SDO ORDINATES beide null und ist dieser Wert ungleich null gesetzt, so werden die Werte von X und Y als Koordinaten einer Punktgeometrie aufgefasst. Dies ist die optimale Art der Speicherung von Punktdaten. Ist eines der beiden folgenden Attribute nicht null, so wird dieser Wert von Spatial ignoriert. Das Attribut SDO ELEM INFO ist eine Array von Zahlen, dessen Größe variiert. Die in diesem Array angegebenen Werte bestimmen die Interpretation der Werte des Attributs SDO ORDINATES. Die Größe des Arrays in ein Vielfaches von 3, da für jede Geometrie, die abgespeichert wird, drei Zahlen in diesem Attribut angegeben werden müssen. Diese drei Zahlen sind: 1. SDO STARTING OFFSET bestimmt den Offset des ersten Punktes eines Elementes in SDO ORDINATES relativ zum Anfang des Arrays SDO ORDINATES. Der erste Punkt im Array hat den Offset 1. 2. SDO ETYPE bestimmt den Typ des Elementes. Ist durch SDO GTYPE bereits festgelegt, um was für Elemente es sich handelt, so wird hier redundante Information abgespeichert. Diese Situation tritt ein, falls es sich um eine homogene Menge an geometrischen Elementen handelt. Ist allerdings in SDO GTYPE angegeben, dass eine heterogene Menge an geometrischen Elementen vorliegt, so spezifiziert dieser Wert den genauen Typ der einzelnen Elemente. Erlaubt sind Werte von 0 bis 5. Der Wert 0 wird bisher nicht unterstützt, die Werte 1, 2 und 3 stehen für einfache Elemente. Die Werte 4 und 5 repräsentieren zusammengesetzte Elemente. Für diese hat das Attribut SDO ETYPE mindestens einmal drei Werte als header und anschließend n-mal drei Elemente für die einfachen Elemente. n ist dabei die Anzahl der einfachen Elemente, aus denen das Element zusammengesetzt ist. Ein Beispiel findet sich in Abbildung 3.8. 3. SDO INTERPRETATION ist ein von SDO ETYPE abhängiger Wert. Ist in SDO ETYPE angegeben, dass es sich um ein zusammengesetztes Element handelt (Wert 4 oder 5), so gibt dieser Wert die Anzahl der Untertypen an, aus denen das Element besteht. Hat SDO ETYPE einen der Werte 1, 2 oder 3, so bestimmt SDO INTERPRETATION, wie die Werte in SDO ORDINATE zu diesem Element zu interpretieren sind. Beispielsweise wird für ein durch SDO ETYPE als Polygon definiertes Objekt durch SDO INTERPRETATION bestimmt, ob die einzelnen Punkte in SDO ORDINATES durch Geraden oder Kreisbögen miteinander verbunden werden. Möglich ist auch, dass das Polygon nur ein Rechteck beschreibt oder einen Kreis, sodass zwei bzw. drei Punkte zur Beschreibung des geometrischen Objektes ausreichen. 30 KAPITEL 3. DATENBANKSYSTEME Eine vollständige Beschreibung der Kombinationsmöglichkeiten und Werte der Attribute SDO ETYPE und SDO INTERPRETATION findet sich in der OnlineDokumentation zu Oracle8i Spatial [23]. Das letzte Attribut SDO ORDINATES ist ein Array variabler Länge von Zahlen, die die Koordinaten der Ränder der einzelnen Elemente bestimmen, aus denen das Geometrieobjekt besteht. Die Werte in diesem Array sind immer nach Dimensionen geordnet. Soll zum Beispiel ein Polygon abgespeichert werden, dessen Rand aus 2-dimensionalen Punkten besteht, so hat das Array die Form (x1 , y1 , x2 , y2 , x3 , y3 , . . .). Sind die Punkte 3-dimensional, so ergibt sich ein Array mit folgender Struktur: (x1 , y1 , z1 , x2 , y2 , z2 , . . .). Bisher unterstützt Spatial allerdings nur zweidimensionale geometrische Objekte. Die Koordinaten der Elemente werden in diesem Array direkt nacheinander ohne bestimmte Trenn- oder Steuerungszeichen aufgelistet. Die letzte Koordinate eines Elements steht daher direkt vor der ersten Koordinate des nächsten Elements. Abbildung 3.8 zeigt ein Beispiel für das Anlegen eines geometrischen Objektes vom Objekttyp SDO GEOMETRY. Der Wert SDO GTYPE = 3 definiert das Objekt als ein y (2,6) 6 5 (1,5) (6,5) 4 3 2 (5,6) (3,4) (4,4) (3,3) (4,3) (1,2) SDO_GEOMETRY column = ( SDO_GTYPE = 3 SDO_SRID = NULL SDO_POINT = NULL SDO_ELEM_INFO = (1,3,1, 19,3,1) SDO_ORDINATES = (1,2 , 2,1 , 5,1 , 6,2 , 6,5 , 5,6 , 2,6 , 1,5 , 1,2 , 3,3 , 4,3 , 4,4 , 3,4 , 3,3 ) ) (6,2) 1 (2,1) (5,1) x 1 2 3 4 5 6 Abbildung 3.8: Polygon mit Loch (Inselpolygon) Polygon, eventuell mit Loch. SDO SRID bekommt grundsätzlich den Werte null zugewiesen, da es von Spatial noch nicht verwendet wird. SDO POINT ist ebenfalls auf null gesetzt. Der Grund dafür ist, dass es sich nicht um eine Punkt-Geometrie handelt. Dies ist auch daraus zu ersehen, dass die nächsten beiden Arrays nicht null gesetzt sind. SDO ELEM INFO ist ein Array mit sechs Einträgen, die Gesamtgeometrie besteht folglich aus zwei Elementen. Der erste Wert 1 in diesem Array gibt an, an welcher Position (Offset vom Anfang) des Arrays SDO ORDINATES, die erste Geometrie beginnt. Sie beginnt demnach mit dem ersten Eintrag in SDO ORDINATES. Die 3 an der zweiten Position gibt den Typ des betreffenden geometrischen Objektes an, in diesem Fall ein Polygon. Der dritte Wert 1 besagt, dass die Punkte des Polygons durch gerade Linien miteinander verbunden werden. Diese drei Arrayelemente definieren die Struktur des ersten geometrischen Objektes. Hätte das Array SDO ELEM INFO keine weiteren Einträge, so würden alle in SDO ORDINATES vorkommenden Werte zu einem Polygon 3.5. ORACLE 8I 31 zusammengesetzt. Da SDO ELEM INFO aber noch weitere Einträge besitzt, setzt sich die Gesamtgeometrie noch aus weiteren Elementen zusammen. Der vierte Eintrag (19) gibt den Offset vom Beginn des Arrays SDO ORDINATES für das zweite Element an, aus dem das Gesamtgeometrie besteht. Das bedeutet, dass nur die ersten 18 Einträge der ersten Geometrie zugeordnet sind. Es ist hierbei zu beachten, dass für ein geschlossenes Polygon der erste und letzte Wert in SDO ORDINATES übereinstimmen müssen. Daher sind 18 Koordinaten zur Beschreibung des ersten Objektes notwendig, obwohl es nur aus acht Punkten und demnach 16 Koordinaten besteht. Die weiteren Werte von SDO ELEM INFO sind für die zweite Geometrie ebenso wie für die erste zu interpretieren, da es sich auch bei dem zweiten Element um ein Polygon handelt, das aus geraden Linien zusammengesetzt ist. Die Information, dass das Gesamtobjekt ein Polygon mit Loch ist, ist implizit in der Definition vorhanden, da das zweite Objekt vollständig im ersten enthalten ist. Es wäre auch möglich, das zweite Objekt als Rechteck zu definieren, das bereits durch zwei Punkte eindeutig beschrieben ist. Das zweite Tripel in SDO ELEM INFO müsste dazu in (1,3,1,19,3,3) abgeändert werden. Die letzte 3 im Array gibt dann an, dass es sich beim zweiten Objekt um ein Rechteck handelt. Entsprechend würden in dem Array SDO ORDINATES zwei Punkte, also vier Koordinaten, zur Beschreibung der zweiten Geometrie ausreichen. Das erzeugte Objekt kann nun in der Spalte einer Tabelle abgelegt werden, die vom Typ MDSYS.SDO GEOMETRY ist. Die Definition einer Tabelle mit einem räumlichen Attribut folgt der üblichen Syntax: CREATE TABLE expanse ( id integer, shape MDSYS.SDO_GEOMETRY ); Ist eine solche Tabelle angelegt worden, so muss in einer weiteren, vom Benutzer anzulegenden Relation, ein Eintrag für diese Tabelle und ihr räumliches Attribut vorgenommen werden, um Anfragen an und Operationen auf den geometrischen Daten durchführen zu können. Diese Relation enthält Metadaten über Tabellen mit Attributen vom Typ MDSYS.SDO GEOMETRY und wird mit SDO GEOM METADATA bezeichnet. Dieser Name ist fest vorgegeben. Die Relation muss aber vom Benutzer selbst angelegt und verwaltet werden. Der Aufbau dieser Relation ist wie folgt: CREATE TABLE SDO_GEOM_METADATA ( TABLE_NAME VARCHAR2(30), COLUMN_NAME VARCHAR2(30), DIMINFO MDSYS.SDO_DIM_ARRAY ); Für jede Relation mit räumlichen Daten muss in dieser Relation ein Tupel angelegt werden. TABLE NAME gibt dabei den Namen der Relation und COULMN NAME den Namen der Spalte vom Typ MDSYS.SDO GEOMETRY an. DIMINFO ist ein Array variabler Länge des Objekttyps SDO DIM ARRAY, wobei die Länge des Arrays der Dimension der räumlichen Daten entspricht. SDO DIM ARRAY ist definiert als 32 KAPITEL 3. DATENBANKSYSTEME CREATE TYPE SDO_DIM_ARRAY as VARRAY(4) of SDO_DIM_ELEMENT; und SDO DIM ELEMENT wiederum ist definiert als: CREATE TYPE SDO_DIM_ELEMENT as OBJECT ( SDO_DIMNAME VARCHAR2(64), SDO_LB NUMBER NOT NULL, SDO_UB NUMBER NOT NULL, SDO_TOLERANCE NUMBER NOT NULL ); SDO DIMNAME gibt hierbei den Namen und SDO LB bzw. SDO UB die untere bzw. obere Grenze bezüglich der Dimension an. SDO TOLERANCE bestimmt, um welchen Wert sich Koordinaten maximal unterscheiden dürfen, damit sie von Spatial noch als gleich angesehen werden. Die Reihenfolge der Dimensionen im DIMINFO-Array muss mit der Reihenfolge der Koordinaten in SDO ORDINATES übereinstimmen, da Spatial dies voraussetzt. Das heißt, falls die Koordinaten als (x1 , y1 , . . . , xn , yn ) in SDO ORDINATES angegeben sind, muss auch in dem DIMINFO-Array zunächst die Informationen über die x-Dimension und danach die Information über die y-Dimension angegeben sein. Es sind hier auch mehr Dimensionen möglich, die Methoden von Spatial unterstützen allerdings nur zweidimensionale Daten. 3.5.3.2 Anfragemodell Spatial benutzt ein Zwei-Ebenen-Anfrage-Modell (two-tier query model), um räumliche Anfragen zu bearbeiten (siehe Abb. 3.9). Das bedeutet, dass räumliche Anfragen in zwei Operationen aufgeteilt werden, deren Ergebnis das exakte Resultat liefert. Die zwei Operationen werden als Primärfilter bzw. Sekundärfilter bezeichnet. Es ist aber nicht zwingend notwendig, beide Filter in Anfragen zu benutzen. Dies dient in erster Linie der Effizienzsteigerung. Aufgabe des Primärfilters ist es, aus der Gesamtmenge der geometrischen Daten in möglichst kurzer Zeit eine Teilmenge (Kandidatenmenge) herauszufiltern, die als Eingabe an den Sekundärfilter übergeben wird. Diese indexbasierte Primärfilter-Operation benutzt als Eingabe approximierte Geometrieinformationen, um den Rechenaufwand zu verringern. Das Ergebnis der Operation des Primärfilters ist eine Obermenge des exakten Resultats. Der Sekundärfilter führt anschließend exakte, meistens teure Operationen auf der vom Primärfilter übergebenen Kandidatenmenge aus und liefert die exakte Ergebnismenge der Anfrage. Ein wesentlicher Faktor für die Bearbeitungszeit räumlicher Anfragen ist die Selektivität des Primärfilters, da die Zeit, die Primärfilter-Operationen im Vergleich zu den Sekundärfilter-Operationen benötigten, praktisch vernachlässigbar ist. Daher ist eine hohe Selektivität des Primärfilters wünschenswert. Bestimmt wird sie durch Indexe auf den geometrischen Daten. 3.5. ORACLE 8I Menge geometrischer Daten 33 Primärfilter Menge an Kandidaten Sekundärfilter exakte Ergebnismenge Enthält mindestens die Menge des exakten Ergebnisses Abbildung 3.9: two-tier query model 3.5.3.3 Indexe auf räumlichen Daten Zur Verringerung von Antwortzeiten bei Anfragen an eine Datenbank werden Indexe eingeführt. Indexe werden auf einem Attribut (oder einer Attributkombination) einer Relation definiert. Die Auswahl dieses Attributes bzw. dieser Attribute ist abhängig von den erwarteten Anfragen. Typische Anfragen, für deren Bearbeitung räumliche Indexe benötigt werden, sind: • Bereichsanfragen (window-query): Welche Objekte liegen in einem bestimmten Bereich (window-query) oder überdecken einen gegebenen Punkt ? • Räumlicher Verbund (spatial join): In welcher räumlichen Beziehung stehen Objekte zueinander ? Die Einträge eines räumlichen Index sind abhängig von den Koordinaten der räumlichen Objekte (Geometrien). Sie sind allerdings nicht mehrdimensional, sondern angeordnete Integer-Werte. Dies bedeutet, dass den Integer-wertigen Indexeinträgen Teilflächen des gesamten Raumes (Kacheln) zugeordnet werden. Das Prinzip der Indexerstellung für räumliche Daten wird nun erläutert. Bei der Erstellung eines Indexes mit Spatial wird der Koordinatenraum, der alle Geometrien enthält, in kleinere Teilflächen (Kacheln) zerlegt, die den Raum partitionieren. Dieser Zerlegungsprozess wird als tessellation bezeichnet. In einem ersten Schritt wird der gesamte Koordinatenraum entlang der Seitenhalbierenden in vier gleich große Kacheln zerlegt. Spatial bietet nun zwei mögliche Vorgehensweisen an: • Fixed Indexing: alle Kacheln haben gleiche Größe und Form • Hybrid Indexing: Größe und Form der Kacheln variieren Beim fixed indexing wird der erste Schritt mit den entstandenen kleineren Kacheln wiederholt, bis ein Abbruchkriterium erfüllt ist. Das Ergebnis ist eine Zerlegung des Koordi- 34 KAPITEL 3. DATENBANKSYSTEME natenraumes in Kacheln, die alle dieselbe Größe und Form haben (siehe Abb. 3.10 oben). Für jede Kachel wird abgespeichert mit welchen Geometrien sie interagiert. Beim hy- 2 0 22 23 32 33 20 21 30 31 02 03 12 13 00 01 10 11 3 1 Abbildung 3.10: Zerlegung einer Fläche und Zuordnung des z-Codes brid indexing werden zwei Zerlegungen des Koordinatenraumes vorgenommen. Einerseits wird der Prozess des fixed indexing durchgeführt, zusätzlich wird aber noch eine zweite Zerlegung vorgenommen, die immer nur die Kacheln weiter teilt, die mit dem Rand einer Geometrie interagieren, wie in Abbildung 3.11 dargestellt. Auch dies wird wiederholt, bis ein Abbruchkriterium erfüllt ist. Der Vorteil der Erzeugung zweier Indexe ist, dass der durch das fixed indexing erstellte Index schnelle Ergebnisse für den Primärfilter liefert, während der hybride Index die Geometrien relativ genau approximiert und dadurch den Rechenaufwand für die nachfolgenden Methoden verringert. Mögliche Abbruchkriterien des tessellation-Prozesses sind beispielsweise die Größe der Kacheln oder eine maximale Anzahl von Kacheln, die für die Überdeckung einer Geometrie verwendet werden. Die 1. Teilung 2. Teilung 3. Teilung 4. Teilung Abbildung 3.11: Variable Kachelgröße bei hybrider Indexierung numerische Codierung der entstandenen Flächen zur Zuweisung an Indexwerte erfolgt 3.5. ORACLE 8I 35 durch den z-Code. Die unteren Grafiken in Abbildung 3.10 veranschaulichen einen sequenziellen Durchlauf durch die erzeugten Kacheln mithilfe einer raumfüllenden Kurve. Mehr zu diesem Thema findet sich zum Beispiel in [19]. 3.5.3.4 Operationen auf räumlichen Daten In diesem Unterabschnitt werden kurz die von Spatial zur Verfügung gestellten Operatoren und Funktionen vorgestellt. Diese lassen sich grob unterteilen in geometrische Funktionen, räumliche Operatoren und Hilfsmethoden zur Indexerstellung. • Geometrische Funktionen des objektrelationalen Modells Die geometrischen Funktionen bilden den Kern der von Spatial für die Verwaltung geometrischer Daten zur Verfügung gestellten Methoden. Im Einzelnen sind dies: – SDO GEOM.SDO AREA(geometry, dim array): Berechnet die Fläche eines zweidimensionalen Polygons. Dabei bestimmt geometry das zu untersuchende Objekt vom Typ MDSYS.SDO GEOMETRY und dim array das zugehörige Array mit den Dimensionsinformationen. Dies wird üblicherweise aus der Tabelle SDO GEOM METADATA ausgelesen. – SDO GEOM.SDO LENGTH(geometry, dim array): Berechnet die Länge bzw. den Umfang einer Geometrie. Die Parameter entsprechen denen der Methode SDO GEOM.SDO AREA(). – SDO GEOM.RELATE(geometry1, dim array1, mask, geometry2, dim array2): Untersucht zwei Geometrien, um ihre räumliche Beziehung zueinander zu bestimmen. Die Parameter geometry1, geometry2, dim array1 und dim array2 geben die zu untersuchenden Geometrien und Dimensionsinformationen an. Mithilfe des Parameters mask können dieser Methode verschiedene Parameter übergeben werden, die angeben, welche Beziehung getestet werden soll. Die möglichen Parameter sind ANYINTERACT, CONTAINS, COVEREDBY, COVERS, DISJOINT, EQUAL, INSIDE, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT und TOUCH. Die genaue Bedeutung dieser Parameter kann der Dokumentation zu Spatial [23] entnommen werden. – SDO GEOM.SDO BUFFER(geometry, dim array, distance): Generiert ein Polygon mit dem in distance übergebenen Abstand um das Objekt geometry und liefert es als Rückgabewert. – SDO GEOM.SDO POLY DIFFERENCE(geometry1, dim array1, geometry2, dim array2): Berechnet die Differenz (A\B) zweier als geometry1 und geometry2 übergebener Polygone und liefert das Ergebnis dieser Differenzbildung zurück. 36 KAPITEL 3. DATENBANKSYSTEME – SDO GEOM.SDO POLY INTERSECTION(geometry1,dim array1, geometry2, dim array2): Berechnet den Durchschnitt zweier Polygone und gibt diesen zurück. – SDO GEOM.SDO POLY UNION(geometry1, dim array1, geometry2, dim array2): Berechnet die Vereinigung zweier Polygone und gibt diese zurück. – SDO GEOM.SDO POLY XOR(geometry1, dim array1, geometry2, dim array2): Berechnet die symmetrische Differenz zweier Polygone und gibt diese zurück. – SDO GEOM.VALIDATE GEOMETRY (geometry, dim array): Überprüft die Gültigkeit der in geometry übergebenen Geometrien durch Vergleich mit der Typdefinition. Rückgabewert ist entweder true, falls die Geometrie ihrer Definition entspricht, false, falls die Geometrie fehlerbehaftet ist, Spatial den Fehler aber nicht bestimmen kann oder eine Fehlernummer, falls Spatial den Fehlertyp erkennt. – SDO GEOM.VALIDATE LAYER(table name, column name, pkey column, result table name): Überprüft aller Geometrien einer in table name übergebenen Tabelle, die in column name eine Spalte vom Typ MDSYS.SDO GEOMETRY besitzt und schreibt das Ergebnis dieser Überprüfung in eine als result table name angegebene Tabelle. pkey column ist Primärschlüssel von table name und muss mit übergeben werden. – SDO GEOM.WITHIN DISTANCE(geometry1, dim array1, distance, geometry2, dim array2): Überprüft, ob zwei Geometrien innerhalb eines bestimmten Abstandes voneinander liegen und liefert im positiven Fall true zurück. Ist der Abstand der Geometrien größer als angegeben ist der Rückgabewert false. • Räumliche Operatoren Räumliche Operatoren unterscheiden sich von den räumlichen Funktionen und Methoden durch die Art ihrer Rückgabewerte. Sie liefern im Gegensatz zu den differenzierten Werte der Methoden lediglich true oder false zurück. Sie werden daher in den where-Klauseln eines select-Statements als Filter eingesetzt, um die Anzahl aufwendigeren und teuren Methodenaufrufe zu reduzieren. In Spatial existieren drei räumliche Operatoren: – SDO FILTER(geometry1, geometry2, params): Dieser Operator wird eingesetzt, um eine Kandidatenmenge an räumlichen Objekten für weitere Untersuchungen zu identifizieren. Basierend auf dem räumlichen Index überprüft dieser Operator, ob Objekte mit den gleichen, bei der Indexierung erzeugten Kacheln, interagieren. Ist dies der Fall, so wird true zurückgeliefert, andernfalls false. Dieser Operator ist lediglich als Primärfilter 3.5. ORACLE 8I 37 einsetzbar. – SDO RELATE(geometry1, geometry2, params): Mit diesem Operator wird getestet, ob die in geometry1 und geometry2 übergebenen Objekte in einer bestimmten räumlichen Beziehung zueinander stehen. Die zu untersuchende Beziehung wird in params angegeben. Beziehungen, die überprüft werden können entsprechen denen der Methode SDO GEOM.SDO RELATE(). Dieser Operator liefert true zurück, falls die angegebene Beziehung zwischen den Objekten besteht, andernfalls false. Er ist sowohl Primär-, als auch Sekundärfilter, bestimmt also im Gegensatz zu SDO FILTER() kein approximiertes, sondern das exakte Ergebnis. – SDO WITHIN DISTANCE(T.column, aGeom, params): Dieser Operator überprüft, ob der Abstand zweier Objekte kleiner als ein vorgegebener Wert ist. T.column ist dabei ein räumliches Attribut einer Tabelle, also vom Typ MDSYS.SDO GEOMETRY. Auf dieser Spalte muss ein räumlicher Index angelegt sein. In aGeom wird eine beliebige Geometrie übergeben, die aus einer Tabelle gelesen oder temporär erzeugt werden kann (zum Beispiel Anfragefenster). Ist der Abstand kleiner als der vorgegebene Wert, so ist der Rückgabewert true, andernfalls false. • Indexerstellung im objektrelationalen Modell Für die Indexerstellung und Indexverwaltung bietet Spatial die üblichen SQLKommandos an. Der Typ eines räumlichen Index ist MDSYS.SPATIAL INDEX. Das Anlegen eines räumlichen Index wird durch die folgende Anweisung realisiert: CREATE INDEX indexname ON Tabellenname(Spaltenname) INDEXTYPE IS MDSYS.SPATIAL_INDEX [PARAMETER]; Die zu übergebenden Parameter bestimmen die Größe der bei der Indexierung erzeugten Kacheln und die Art der Indexierung. Entscheidend hierfür sind die Werte der Parameter SDO LEVEL für die Anzahl der Teilungen beim fixed indexing und SDO NUMTILES für die Anzahl der Kacheln pro Geometrie bei der hybriden Indexierung. Die möglichen Kombinationen dieser beider Parameter sind in Abbildung 3.12 angegeben. SDO LEVEL nicht angegeben >= 1 >= 1 nicht angegeben SDO NUMTILES nicht angegeben nicht angegeben >= 1 >= 1 Art der Indexierung Fehler fixed indexing hybrid indexing nicht unterstützt Abbildung 3.12: Wertekombinationen von SDO LEVEL und SDO NUMTILES Gelöscht wird ein räumlicher Index, wie andere Indexe auch, durch das Kommando drop index [force]. 38 KAPITEL 3. DATENBANKSYSTEME Für die Bestimmung der Werte von SDO LEVEL bzw. SDO NUMTILES bietet Spatial einige Hilfsmethoden an, die in der Online-Dokumentation genauer beschrieben sind. Es soll lediglich eine Methode Erwähnung finden, da sie direkt für die Indexerstellung verwendet kann: SDO TUNE.ESTIMATE TILING LEVEL(table name, column name, maxtiles, type of estimate): Diese Methode schätzt einen Wert für SDO LEVEL, der bei der Erstellung eines räumlichen Index auf der Spalte column name der Tabelle table name benutzt werden kann. Der Parameter maxtiles gibt die maximale Anzahl an Kacheln an, die bei der Indexerzeugung gebildet werden dürfen, type of estimate bestimmt ein der Schätzung zugrunde liegendes Modell. Der durch diese Methode ermittelte Wert ist allerdings nur ein Schätzwert und sollte in der Praxis als Ausgangspunkt dienen, um einen endgültigen Wert für SDO LEVEL zu bestimmen. Der optimale Wert kann (leicht) von diesem Wert abweichen. In der verwendeten Version von Oracle8i liefert diese Methode allerdings nur null zurück. Kapitel 4 Datenbankentwurf In diesem Kapitel werden die einzelnen Phasen des Entwurfs einer Datenbank für bodenkundliche Daten erläutert. Es ist unterteilt in mehrere Abschnitte, die jeweils die einzelnen Phasen behandeln. Zunächst werden in der Anforderungsanalyse die Menge der zu verwaltenden Datenbestände und Methoden bestimmt. Der zweite Teil befasst sich mit den externen Schemata, die sich aus der Anforderungsanalyse ergeben und im dritten Abschnitt zu einem konzeptionellen Schema integriert werden. Es schließt sich ein Abschnitt über das logische Modell an. Hierin wird das konzeptionelle Schema in das Relationenmodell überführt, wobei auch objektrelationale Aspekte berücksichtigt werden, die von Oracle8i bereitgestellt werden. Der letzte Abschnitt befasst sich mit dem physischen Entwurf der Datenbank. In ihm werden Veränderungen der Implementierung gegenüber dem Relationenmodell sowie der Einsatz von Indexen erläutert. 4.1 Anforderungsanalyse Die im Folgenden durchgeführte Anforderungsanalyse basiert auf drei verschiedenen Informationsquellen: 1. Informationsgespräche mit Geografen der Universität Hannover (R. Duttmann, M. Neteler) 2. Literatur: insbesondere der Habilitationsschrift von R. Duttmann [7], in der partikuläre Stoffverlagerungen in Landschaften untersucht werden, der Dokumentation zur Methodenbank des Niedersächsischen Bodeninformationssystems (NIBIS) [17] und der Bodenkundlichen Kartieranleitung der Ad-hoc-Arbeitsgruppe Boden [1]. 3. existierende Dateiformate und Datensätze: Vom Geographischen Institut der Universität Hannover, Abt. Physische Geographie und Landschaftsökologie wurden Daten zur Verfügung gestellt, die im Gebiet Groß-Ilde aufgenommen wurden. Diese Daten umfassen bodenkundliche Messungen, Angaben über die Nutzung 39 40 KAPITEL 4. DATENBANKENTWURF des Bodens, Klimainformationen und Informationen über das Relief des Untersuchungsgebietes (digitales Geländemodell). Die meisten dieser Daten liegen im ASCII-Format vor, es gab aber auch Datensätze (Klima) im Excel-Format. Die Daten wurden mithilfe verschiedener Konverter und Oracle-Tools (insbesondere SQL-Loader-Utility für Polygone) in eine Oracle-Datenbank geladen. Grundlage für die Analyse von Transportprozessen im Boden ist die Aufnahme von Daten im betrachteten Beobachtungsgebiet. Die aufgenommenen Daten sind in thematisch zusammengehörige Einheiten, sogenannte Informationsebenen, untergliedert. Im vorliegenden Fall sind Eingangsdaten für vier Informationsebenen vorhanden, die im folgenden Text erläutert werden: • Boden/Bodenwasser • Vegetation/Nutzung • Klima • Relief Die Messung von Daten der ersten drei Informationsebenen erfolgt an verschiedenen Standorten des Beobachtungsgebietes. Bei der Aufnahme von Messdaten werden einem Standort seine x- und y-Koordinaten, in der Geografie als Rechts- und Hochwert bezeichnet, im Gauß-Krüger-System zugeordnet. Das Gauß-Krüger-System wird in der Geografie benutzt, um Verzerrungen bei der Projektion der kugelförmigen (3-dimensionalen) Erdoberfläche auf eine (2-dimensionale) Karte möglichst zu minimieren. Das von Gauß entwickelte Verfahren ist eine konforme Abbildung mit einem längentreuen Hauptmeridian. Eine genaue Beschreibung des Verfahrens findet sich zum Beispiel in Bill [4] (S.202 ff.). Messstandorte sind prinzipiell beliebig im Beobachtungsgebiet verteilt und variieren üblicherweise für die unterschiedlichen Informationsebenen hinsichtlich ihrer Rechtsund Hochwerte. Da es nicht möglich ist, an allen Punkten des Untersuchungsgebietes Messungen vorzunehmen, wird durch Fachpersonal anhand vorliegender Geländeeigenschaften (beispielsweise Abwassergraben, Straßen, Hügel) zu jedem Standort eine Fläche bestimmt, für die näherungsweise dieselben Werte wie am Messstandort bezüglich der aufgenommenen Daten angenommen werden. Das heißt, Standorten sind Flächen mit ähnlichen Ausstattungsmerkmalen zugeordnet. Diese Flächen werden als quasihomogen bezeichent. Die am Messstandort aufgenommenen Daten gelten als repräsentativ für die ausgezeichnete Fläche. Die den einzelnen Standorten zugeordneten Flächen überdecken das gesamte Beobachtungsgebiet für jede Informationsebene und sind innerhalb einer Informationsebene paarweise disjunkt. Sie bilden folglich eine Partition des Gebietes. Im Gegensatz zu diesen diskreten Standorten zugeordneten Werten liegen die Daten der Informationsebene Relief in einem Rasterformat vor. Das Beobachtungsgebiet ist für diese Daten in gleichgroße Rasterzellen aufgeteilt, denen jeweils Werte zugewiesen sind. 4.1. ANFORDERUNGSANALYSE 4.1.1 41 Informationsebene Boden Der Boden ist allgemein aus mehreren Bodenhorizonten1 zusammengesetzt (siehe Abbildung 4.1). Zur Beschreibung des Bodens an einem Messstandort werden daher Gültigkeitsbereich allgemeine Bodendaten Otief Horizont A Utief Otief Horizont B Utief Otief Horizont C Utief Abbildung 4.1: Schichtaufbau des Bodens sowohl Informationen über den Boden, als auch über die einzelnen Bodenhorizonte benötigt. Diese Informationen werden durch einen senkrechten Anstich des Bodens bis in ca. zwei Meter Tiefe erhalten. Das so aufgenommene Bodenprofil enthält Informationen über die einzelnen Bodenhorizonte, die Horizontabfolge und allgemeine nicht horizontbezogene Eigenschaften des Bodens. Die Daten eines Bodenprofils können folglich in allgemeine Bodendaten und horizontbezogene Bodendaten unterteilt werden. Die allgemeine Bodendaten gelten uneingeschränkt für den Standort, an dem sie aufgenommen wurden, die horizontbezogenen Daten nur innerhalb eines bestimmten Horizonts. Obwohl allgemeine und horizontbezogene Bodendaten korrelieren, ist es nicht möglich, die horizontbezogenen Bodendaten eindeutig aus den allgemeinen Bodendaten abzuleiten. Allerdings können Angaben über die Horizonte gemacht werden. Beispielsweise ist durch Kenntnis des Bodentyps (ein allgemeines Bodenattribut) die Horizontabfolge festgelegt, da ein Bodentyp dadurch charakterisiert ist. Genauere Angaben über die Attribute der einzelnen Horizonte oder ihre genaue Lage im Boden sind aber nicht möglich. Es können lediglich grobe Angaben über die Horizontabfolge und ihre ungefähre Lage gemacht werden. Allgemeine Bodendaten wiederum können teilweise aus den horizontbezogenen Bodendaten abgeleitet werden. Theoretisch wäre es sogar möglich, alle allgemeinen Bodendaten aus der Kenntnis der Horizonte zu bestimmen, da der Boden aus den Horizonten zusammengesetzt ist. In der Praxis werden allerdings einige der allgemeinen Bodeneigen1 In der Terminologie des Niedersächsischen Landesamtes für Bodenkunde werden Horizonte als Schichten bezeichnet. Im folgenden Text sind diese beiden Begriffe daher als gleichwertig anzusehen. 42 KAPITEL 4. DATENBANKENTWURF schaften bereits vor Ort, also bei der Aufnahme des Bodenprofils, durch Fachpersonal bestimmt und nicht mehr durch die Eigenschaften der Horizonte verifiziert. Bei Messungen an verschiedenen Standorten können Bodenprofile aufgenommen werden, die nur geringe, für den jeweils betrachteten Problembereich nicht relevante, Unterschiede aufweisen. Diesen quasi gleichen Standorten werden dieselben Bodenprofile zugeordnet. Auf horizontbezogene Bodendaten werden Methoden angewendet, die die horizontbezogenen Bodendaten miteinander in Beziehung setzen und aus den aufgenommenen und ermittelten Primärinformationen implizit darin enthaltene Sekundärinformationen ableiten. Hierzu zählt beispielsweise die Ableitung der Lagerungsdichte aus der Rohdichte und dem Tongehalt. Für allgemeine Bodendaten existieren bisher keine solche Methoden. Das Bodenprofil wiederum besitzt Attribute, die aus den allgemeinen und horizontbezogenen Bodendaten, aus denen das Bodenprofil zusammensetzt ist, mithilfe verschiedener Methoden abgeleitet werden. Diese Methoden benötigen als Eingangsdaten sowohl die allgemeinen und die horizontbezogenen Bodendaten, als auch Informationen über die Lage der Horizonte im Boden. Für die Informationsebene Boden wurden als Eingangsdaten im Untersuchungsgebiet Groß-Ilde aufgenommene Daten zur Verfügung gestellt. Diese Daten sind im Einzelnen: • allgemeine Bodendaten • horizontbezogene Bodendaten • Informationen über die Lage der Messstandorte in Gauß-Krüger-Koordinaten • den Messstandorten zugeordnete quasihomogene Flächen in Form von Polygonen, die den Rand dieser Flächen beschreiben 4.1.2 Informationsebene Nutzung (Vegetation) Der Boden des betrachteten Gebietes wird auf vielfältige Weise genutzt. Informationen über die Nutzung sind in dieser Informationsebene abgelegt. Ebenso wie bei den Bodendaten wird auch hier repräsentativ ein Standort ausgewählt, diesem Standort Informationen über die Nutzung angeheftet und eine Fläche zugeordnet, deren Nutzung der des Standortes entspricht. Für die Informationsebene Nutzung existieren bisher keine Methoden, die Attribute dieser Informationsebene zueinander in Beziehung setzen. An Eingangsdaten wurden zur Verfügung gestellt: • Nutzungsdaten der Jahre 1994, 1995 und 1996 • Informationen über die Lage der Messstandorte im Gauß-Krüger-System 4.1. ANFORDERUNGSANALYSE 43 • den Messstandorten zugeordnete quasi-homogene Flächen in Form von Polygonen, die den Rand dieser Flächen beschreiben 4.1.3 Informationsebene Klima Klimadaten werden kontinuierlich an Klimastationen aufgenommen. Aufgrund der geringen räumlichen Ausdehnung des Untersuchungsgebietes wird das Klima im vorliegenden Fall als homogen angesehen. Es liegen also nur Daten für einen Messstandort vor. Prinzipiell sind aber für Klimamessungen Standorte mit zugeordneten Flächen vorzusehen. Innerhalb der Informationsebene Klima sind Methoden vorzusehen, die den Sättigungsdampfdruck (EWT14), den aktuellen Dampfdruck (et14) und die potenzielle Verdunstung nach Haude (ETPhaude) aus den gemessenen Daten ableiten. Zusätzlich werden aggregierte Klimawerte benötigt, genauer der Jahresniederschlag, der Niederschlag der Hauptvegetationsperiode (01.April bis 30.September) und der Niederschlag des Winterhalbjahres (01.Oktober bis 31.März des folgenden Jahres). Für diese Aggregationen ist eine Funktion vorzusehen. Zur Verfügung gestellte Eingangsdaten der Informationsebene Klima sind: • täglich gemessene Klimawerte der Jahre 1995 und 1996 (Temperatur, relative Feuchte und Niederschlag) 4.1.4 Informationsebene Relief Das Relief beschreibt das Höhenprofil des untersuchten Gebietes. Diese Daten liegen als Rasterdatei vor, das bedeutet, dass in dem Untersuchungsgebiet an verschiedenen, äquidistant verteilten Messpunkten, Werte aufgenommen wurden. Neben den Höhenangaben an Rasterzellen liegen in den zur Verfügung gestellten Eingangsdaten zusätzlich Werte für die Hangneigung und die Hangexposition vor, die aber bereits aus den Höhenangaben abgeleitet sind. Die Hangneigung gibt die Neigung des Normalenvektors der Ebene an, ist also ein Maß für die Steigung der Fläche. Die Hangexposition bestimmt die Ausrichtung der Projektion des Normalenvektors auf die Ebene von Ost aus gesehen, also die Ausrichtung der Fläche. Die einer Rasterzelle zugeordneten Daten sind als Eingangsdaten für einen Punkt angegeben. Sie gelten für eine von diesem Punkt in Richtung Nord-West ausgerichtete Fläche. In Abbildung 4.2 sind zum Beispiel die Werte der gekennzeichneten Fläche durch den Rasterpunkt (3,2) gegeben. Die Größe dieser zugeordneten Fläche ist abhängig von der Auflösung des Rasters (im vorliegenden Fall 25m × 25m). Da die für das Relief relevanten, abgeleiteten Daten bereits vorhanden sind, sind keine weiteren Methoden implementiert. 44 KAPITEL 4. DATENBANKENTWURF 4 3 2 1 1 2 3 4 Abbildung 4.2: Rasterzellen Eingangsdaten der Informationsebene Relief sind: • Höhe (Rastergröße 25m × 25m) • Hangneigung (Rastergröße 25m × 25m) • Hangexposition (Rastergröße 25m × 25m) 4.1.5 Methoden und Operationen Für die Analyse von Transportprozessen im Boden ist es notwendig, die Eingangsdaten miteinander zu verknüpfen. Die Verknüpfungen erfolgen sowohl innerhalb einzelner Klassen und Informationsebenen als auch zwischen mehreren Informationsebenen. Bei Verknüpfungen innerhalb einer Klasse bzw. einer Informationsebene sind lediglich die an einem Standort gemessenen und zu der jeweiligen Informationsebene gehörigen Messdaten zueinander in Beziehung zu setzen. Die Geometrie ist für diese Verknüpfungen irrelevant, da nur Sachdaten eines Objektes betrachtet werden. Im Gegensatz hierzu stehen die Verknüpfungen von Eingangsdaten mehrerer Informationsebenen. Diese erfordern eine Betrachtung der Geometrien, da die einem Standort in einer Informationsebene zugeordnete Fläche im allgemeinen nicht einer homogenen Fläche einer anderen Informationsebene entspricht. Es müssen folglich Schnittmengen von Flächen berechnet werden, in denen die Attribute beider Geometrien konstant sind. Beispielhaft wird in dieser Arbeit die Methode zur Ableitung der Sickerwasserrate implementiert. Die für diese Ableitung notwendigen Schritte sollen an dieser Stelle nur kurz skizziert werden. Eine ausführliche Diskussion der Methode findet in Kapitel 6 statt. Die Methode zur Ableitung der Sickerwasserrate benötigt als Eingangsdaten aufgenommene Werte der Informationsebenen Boden, Nutzung, Klima und Relief. Sie ist schematisch in Abbildung 4.3 dargestellt. Im ersten Schritt werden innerhalb der einzelnen Informationsebenen Werte abgeleitet, die allein aus den Eingangsdaten der jeweiligen Informationsebene, unter Verwendung statischer Hilfstabellen, bestimmt werden können. Im vorliegenden Fall sind dies Werte innerhalb der Informationsebenen Boden und Klima. Anschließend werden die geometrischen Informationen der Informationsebenen Boden und Nutzung verschnitten, um im 4.1. ANFORDERUNGSANALYSE 45 dritten Schritt Werte abzuleiten, die Informationen dieser beiden Informationsebenen als Eingangsdaten benötigen. Für die Verschneidung der Informationsebenen sind zwei Vorgehensweisen denkbar. 1. Verschneidung der geometrischen Informationen im Vektorformat und Zuweisung von Attributen an die neu berechneten Flächen 2. Umwandlung der geometrischen Daten im Vektorformat ins Rasterformat und Zuweisung der Attribute an die einzelnen Rasterpunkte 1.Schritt Ableitung von Werten innerhalb der Informationsebenen 2.Schritt 3.Schritt Verschneidung der Informationsebenen Boden und Nutzung Ableitung von Werten mit Eingangsdaten der Informationsebenen Boden und Nutzung 4.Schritt Verschneidung aller Informationsebenen 5.Schritt Ableitung der Sickerwasserrate Informationsebene Boden Informationsebene BodenNutzung Informationsebene ( Verschnitt der Informationsebenen Boden und Nutzung ) Nutzung Informationsebene Klima Verschnitt aller vorhandenen Informationsebenen Informationsebene Relief Abbildung 4.3: Schematische Darstellung der Methode zur Ableitung der Sickerwasserrate Nachdem die Informationsebenen verschnitten und die entsprechenden Werte abgeleitet sind, wird der Verschnitt der Informationsebenen Boden und Nutzung mit den Informationsebenen Klima und Relief verschnitten, da die weiteren abzuleitenden Werte (im vorliegenden Fall lediglich die Sickerwasserrate) Informationen aller vorhandenen Informationsebenen benötigen. Die räumlichen Informationen der Informationsebene Relief liegen im Rasterformat vor, daher findet hier eine Verschneidung von Vektor- und Rasterdaten statt, deren Ergebnis das Rasterformat hat. Es ist auch möglich zunächst alle im Vektorformat vorliegenden Geometrieinformationen ins Rasterformat zu konvertieren, anschließend sämtliche Verschnitte im Rasterformat durchzuführen und dann die Berechnungen für die einzelnen Rasterpunkte vorzunehmen. Im Rahmen dieser Arbeit werden beide Vorgehensweisen in Kapitel 6 näher betrachtet. 46 KAPITEL 4. DATENBANKENTWURF Im fünften und letzten Schritt schließlich wird die Sickerwasserrate für die einzelnen Rasterpunkte berechnet. 4.2 Externe Datenbankschemata (UML) Im Folgenden werden die externen Schemata (Sichten der einzelnen Informationsebenen) der zu entwerfenden Datenbank vorgestellt und erläutert. Grundlage der externen Schemata ist die Anforderungsanalyse. 4.2.1 Externes Schema der Informationsebene Boden Das externe Schema der Informationsebene Boden (Abbildung 4.4) ist aus fünf Klassen zusammengesetzt. Die Attribute der Klasse BodenStandort bestimmen die Lage des Messstandortes in Gauß-Krüger-Koordinaten (Rechts- und Hochwert), sowie die diesem Messstandort zugeordnete quasi-homogene Fläche (Geometrie). An jedem Messstandort wird genau ein Bodenprofil aufgenommen. Es können aber dieselben Bodenprofile an verschiedenen Standorten existieren. Daher liegt zwischen den Klassen BodenProfil und BodenStandort eine 1 : n-Beziehung (funktionale Beziehung) vor. Eine Instanz der Klasse BodenProfil ist definiert durch eine Instanz der Klasse Boden und eine oder mehrere Instanzen der Klasse BodenHorizont. Die der Klasse BodenProfil zugeordneten Attribute werden alle aus Objekten dieser beiden Klassen mithilfe der angegebenen Methoden abgeleitet. Verschiedene Bodenprofile können die gleichen allgemeinen Bodendaten besitzen, also auf dieselbe Instanz der Klasse Boden verweisen. Dann unterscheiden sich allerdings entweder die dem Bodenprofil zugeordneten Horizonte oder die Lage der Horizonte im Boden. Die Information über die Lage der Horizonte ist der Beziehung zwischen den Klassen BodenProfil und BodenHorizont als Assoziationsklasse Lage angeheftet. Diese Klasse besitzt die beiden Attribute Otief und Utief, die die obere und untere Tiefe des Horizonts im Boden angeben. Zu einem Bodenprofil gehören (ein oder) mehrere Horizonte, andererseits kann der gleiche Horizont auch in verschiedenen Bodenprofilen vorkommen. Daher ist die Beziehung zwischen den Klassen BodenProfil und BodenHorizont eine n : m-Beziehung. Weiterhin ist jedem Bodenprofil eine Instanz der Klasse Boden zugeordnet. Eine Instanz der Klasse Boden kann aber ebenfalls in verschiedenen Bodenprofilen auftreten. Die Beziehung zwischen den Klassen Boden und BodenProfil ist demnach funktional (1 : n-Beziehung). 4.2.2 Externes Schema der Informationsebene Nutzung Das externe Schema der Informationsebene Nutzung (Abbildung 4.5) ist aus zwei Klassen zusammengesetzt. Die Klasse NutzungStandort beschreibt, wie die Klasse BodenStandort 4.2. EXTERNE DATENBANKSCHEMATA (UML) Abbildung 4.4: Externes Schema der Informationsebene Boden Abbildung 4.5: Externes Schema der Informationsebene Nutzung 47 48 KAPITEL 4. DATENBANKENTWURF der Informationsebene Boden, die Lage des Messstandortes und die zugeordnete Fläche. Die Klasse Nutzung besitzt die zwei Attribute NutzNr und Jahr. Hier fließt also eine zeitliche Komponente ein. Eine Instanz der Klasse Nutzung beschreibt demnach die Nutzung in einem bestimmten Jahr. An verschiedenen Messstandorten kann dieselbe Nutzung vorliegen, andererseits werden bei Messungen in verschiedenen Jahren jedem Messstandort unterschiedliche Instanzen der Klasse Nutzung zugeordnet, da sich zumindest die Jahreszahl ändert. Zwischen den beiden Klassen besteht folglich eine n : m-Beziehung. 4.2.3 Externes Schema der Informationsebene Klima Das externe Schema der Informationsebene Klima (Abbildung 4.6) ist ebenfalls aus zwei Klassen zusammengesetzt. Die Klasse KlimaStandort enthält die Lage des Messstand- Abbildung 4.6: Externes Schema der Informationsebene Klima ortes und das Attribut Geometrie beschreibt die zugeordnete Fläche2 . Die Klimadaten selbst sind Attribute der Klasse KlimaWerte. Datum gibt den Tag der Messung an, Temperatur, Niederschlag und RFeuchte (relative Feuchte), die aufgenommen Werte. Da an einem Messstandort an mehreren Tagen verschiedene Werte aufgenommen werden und an unterschiedlichen Standorten (zumindest theoretisch) dieselben Messdaten ermittelt werden können, besteht zwischen den beiden Klassen KlimaStandort und KlimaWerte eine n : m-Beziehung. 4.2.4 Externes Schema der Informationsebene Relief Das externe Schema der Informationsebene Relief (Abbildung 4.7) besteht lediglich aus der Klasse ReliefPunkt. Die Klasse ReliefPunkt besitzt fünf Attribute. Die Attribute 2 Aufgrund der Größe des Untersuchungsgebietes sind keine klimatischen Unterscheidungen an verschiedenen Messpunkten (es gibt nur einen !) notwendig. Es wäre hier also auch möglich, nur die Klimadaten ohne geometrische Information zu speichern. Im Hinblick auf Erweiterbarkeit wird der geometrische Aspekt allerdings berücksichtigt. 4.3. KONZEPTIONELLES SCHEMA 49 Abbildung 4.7: Externes Schema der Informationsebene Relief Rechts- und Hochwert geben die Lage des Punktes in Gauß-Krüger-Koordinaten an, an dem die Werte der folgenden drei Attribute ermittelt wurden. Diese drei Attribute sind Hoehe, Hangneigung und Exposition. 4.3 Konzeptionelles Schema Durch Integration der externen Schemata ergibt sich das konzeptionelle Schema des Datenbankentwurfs (Abbildung 4.8). Das konzeptionelle Schema hat gegenüber den externen Schemata die zwei zusätzlichen abstrakten Klassen Punkt und Standort. Beide Klassen sind abstrakt definiert, da sie nicht implementiert werden. Sie dienen in diesem Modell lediglich als Oberklassen anderer Klassen. Die Klasse Punkt besitzt die Attribute Rechts- und Hochwert, die die Lage eines Punktes in Gauß-Krüger-Koordinaten angeben. Eine Unterklasse von Punkt ist Reliefpunkt. Diese Klasse enthält zusätzlich die an einem Punkt aufgenommen bzw. abgeleiteten Reliefwerte Hoehe, Hangneigung und Exposition. Die zweite Unterklasse von Punkt ist die Klasse Standort, die selbst wiederum als Oberklasse der drei Klassen NutzungStandort, BodenStandort und KlimaStandort eingeführt wurde. Obwohl diese drei Klassen dieselbe Attributmenge besitzen, werden sie im konzeptionellen Modell nicht zusammengefasst, da Messungen am selben Standort für mehrere Informationsebenen durchgeführt werden können, diesen Messungen aber wiederum unterschiedliche Standortobjekte zugewiesen werden. Der Grund für unterschiedliche Standortobjekte liegt darin, dass sich die Geometrien der bezüglich verschiedener Informationsebenen homogenen Flächen im Allgemeinen unterscheiden. Eine Instanz der Klasse Standort hat zusätzlich zu den von der Klasse Punkt ererbten Attributen Rechts- und Hochwert noch das Attribut Geometrie, dass die einem Standort zugeordnete Fläche beschreibt. 50 KAPITEL 4. DATENBANKENTWURF Abbildung 4.8: Konzeptionelles Schema 4.4. LOGISCHES MODELL (RELATIONENMODELL) 4.4 51 Logisches Modell (Relationenmodell) In diesem Abschnitt wird die Transformation des konzeptionellen Schemas in das Relationenmodell beschrieben. Aus Gründen der Übersichtlichkeit wird diese Transformation getrennt für die einzelnen Informationsebenen betrachtet. Im logischen Schema werden die Datentypen der Attribute festgelegt, die Attribute der abstrakten Oberklassen an die Unterklassen geheftet, gegebenenfalls künstliche Schlüssel eingeführt sowie Umbenennungen und Vereinfachungen vorgenommen. 4.4.1 Informationsebene Boden Aus dem konzeptionellen Schema ergeben sich für die Informationsebene Boden die in Abbildung 4.9 angegebenen Relationenschemata. Der Relation BodenStandort wurde ein BodenStandort BodenProfil BodenHorizont Horizont ProfilHorizont (SNr:INTEGER, Rechtswert:FLOAT, Hochwert:FLOAT, Geometrie:MDSYS.SDO GEOMETRY, BPNR→BodenProfil) (BPNr:INTEGER, BNr→Boden, We:FLOAT, nFKWe:FLOAT, KRmm:FLOAT, KRStufe:INTEGER, nFKWeStufe:INTEGER) (BNr:INTEGER, Bodentyp:VARCHAR2(10), Grundwasserstand: VARCHAR2(10),Grundwasserstufe:FLOAT, Staunaessestufe:INTEGER) (HNr:INTEGER, Horizontbezeichnung:VARCHAR2(10), Bodenart: VARCHAR2(5), Rohdichte:FLOAT, Grobboden:FLOAT, Humusgehalt: FLOAT, Carbonatgehalt:FLOAT, Tongehalt:FLOAT, pHWert:FLOAT, LD:FLOAT, LDStufe:INTEGER, nFK:FLOAT, We:FLOAT) (BPNr→BodenProfil, HNR→Horizont, Otief:FLOAT, Utief:FLOAT) Abbildung 4.9: Relationen der Informationsebene Boden künstliches Schlüsselattribut SNr zugeordnet, anhand dessen Standorte eindeutig identifiziert werden können. Weiterhin ist jeder Instanz der Klasse BodenStandort genau eine Instanz der Klasse BodenProfil zugeordnet. Diese funktionale Abhängigkeit ist durch die Fremdschlüsselbedingung BPNr→BodenProfil ausgedrückt. Hierbei ist BPNr ein ebenfalls künstlich eingeführtes Schlüsselattribut für die Klasse BodenProfil. Jeder Instanz der Klasse BodenProfil ist eine Instanz der Klasse Boden zugeordnet. Auch diese funktionale Abhängigkeit ist durch eine Fremdschlüsselbedingung im Modell angegeben und zwar in der Referenzierung der Relation Boden für das Attribut BNr. Das Schlüsselattribut der Relation BodenProfil, BPNr, wird in der Relation ProfilHorizont als Fremdschlüssel benötigt, um Instanzen der Klasse BodenHorizont einer Instanz der Klasse BodenProfil zuzuordnen. Diese Relation benötigt als weiteres Fremdschlüsselattribut den künstlich eingeführten Schlüssel BSNr der Relation BodenSchicht. 52 4.4.2 KAPITEL 4. DATENBANKENTWURF Informationsebene Nutzung Für die Informationsebene Nutzung ergeben sich die in Abbildung 4.10 angegebenen Relationenschemata. Der Relation NutzungStandort wurde das Schlüsselattribut SNr hinzuNutzungStandort Nutzung Anbau (SNr:INTEGER, Rechtswert:FLOAT, Hochwert:FLOAT, Geometrie:MDSYS.SDO GEOMETRY) (NNr:INTEGER, NutzNr:INTEGER, Jahr:DATE) (SNr→NutzungStandort,NNr→Nutzung) Abbildung 4.10: Relationen der Informationsebene Nutzung gefügt, durch das der Standort eindeutig identifiziert werden kann. Die Relation Nutzung enthält Informationen über die Nutzungsart, gebunden an eine zeitliche Komponente. Diese wird in dem Attribut Jahr abgespeichert. Künstliches Schlüsselattribut dieser Relation ist NNr. Anbau schließlich realisiert die Beziehung zwischen NutzungStandort und Nutzung. Der Schlüssel dieser Relation setzt sich aus den beiden Fremdschlüsseln SNr der Relation NutzungStandort und NNr der Relation Nutzung zusammen. 4.4.3 Informationsebene Klima Das konzeptionelle Schema der Informationsebene Klima zeigt zwei Klassen, KlimaStandort und KlimaWerte. Diese stehen in einer n : m-Beziehung zueinander, wobei jedem KlimaStandort-Objekt mehrere Instanzen der Klasse KlimaWerte zugeordnet sind. Da aber Klimadaten an stationären Messstationen periodisch aufgenommen werden, erscheint es an dieser Stelle sinnvoll, alle aufgenommenen Klimawerte bezüglich einer Messstation in einer eigenen Relation abzulegen und eventuell dadurch entstehende Redundanzen zu tolerieren. Andernfalls wäre aufgrund der Objektidentität eines gemessenen Datensatzes der Aufwand für das Einfügen von Klimawerten in die Datenbank unverhältnismässig hoch, da für jeden Datensatz überprüft werden müßte, ob bereits ein solches Tupel in der Datenbank existiert. Durch das Anlegen einer eigenen Relation für die Messwerte werden einem Klimastandort nicht mehr n gemessene Datensätze zugeordnet, sondern lediglich eine Tabelle, in der die Klimadaten für diesen Standort abgelegt sind. Um die Klimadaten zu speichern bietet Oracle8i das in Abschnitt 3.5.2 beschriebene Konzept der nested tables an, sodass ein neuer Objekttyp Typ KlimaDatenTabelle eingeführt wird, in dem die entsprechenden Tupel abgelegt werden. Die Implementierung dieses Objekttyps wird in Abschnitt 4.5.1 erläutert. Schließlich sollten Klimadaten nicht an einen Standort gebunden sein, damit mit denselben Klimadaten auch an anderen Standorten Werte abgeleitet werden können, falls für diesen anderen Standort keine, nur wenige oder für einen anderen Zeitraum gemessene Klimadaten vorliegen, der neue Standort aber zumindest ähnliche das Klima beeinflussende Faktoren aufweist. Dies könnte im Prinzip auch durch eine Vergrößerung der einem 4.5. PHYSISCHER ENTWURF 53 Klimastandort zugeordneten quasihomogenen Fläche erreicht werden, an dem die Daten aufgenommen wurden. Da die Veränderung von Flächen aber aufwendiger ist und eventuell noch Klimadaten für den neuen Standort aufgenommen werden, wird zusätzlich eine Klasse Klima im Relationenmodell eingeführt, die Klimastandorte und Messdaten miteinander verbindet. Aus diesen Üuberlegung ergeben sich für die Informationsebene Klima die in Abbildung 4.11 angegebenen Relationenschemata. KlimaStandort Klima (SNr:INTEGER, KNr→Klima, Rechtswert:FLOAT, Hochwert:FLOAT, Geometrie:MDSYS.SDO GEOMETRY) (KNr:INTEGER, Klimadaten:Typ KlimaDatenTabelle) Abbildung 4.11: Relationen der Informationsebene Klima Die Interpretation dieser Relationen ist, dass einer Instanz der Klasse Klimastandort eine Instanz der Klasse Klima zugeordnet ist, deren Werte in einem objektwertigen Attribut vom Objekttyp Typ KlimaDatenTabelle abgelegt sind. 4.4.4 Informationsebene Relief Für die Informationsebene Relief ergibt sich aus dem konzeptionellen Modell die in Abbildung 4.12 angegebene Klasse. Die Name der Relation ist in Relief25 geändert, da es Relief25 (RPNr:INTEGER,Ort:MDSYS.SDO GEOMETRY, Hoehe:FLOAT,Hangneigung:FLOAT,Exposition:FLOAT) Abbildung 4.12: Relation der Informationsebene Relief sich bei den Eingangsdaten um eine Relief mit einem Rasterpunktabstand von 25 Metern handelt. Später wird noch ein anderes Relief mit einem Rasterpunktabstand von 10 Metern (Relief10) erzeugt. RPNr ist ein künstlich eingeführtes Schlüsselattribut, über das einzelne Rasterpunkte und an diesen Punkten aufgenommene Werte abgefragt werden können. Ort fasst die beiden Attribute Rechts- und Hochwert in dem von Spatial bereitgestellten Objekttyp MDSYS.SDO GEOMETRY zusammen. Die anderen drei Attribute entsprechen den aufgenommen Messwerten bzw. aus den aufgenommenen Messwerten abgeleiteten Werten. 4.5 Physischer Entwurf Auf der Basis des logischen Modells wird der physische Entwurf der Datenbank realisiert. Beim physischen Entwurf werden neue Objekttypen definiert, Relationen unter Beachtung von Integritätsbedingungen angelegt sowie Indexstrukturen erzeugt. 54 4.5.1 KAPITEL 4. DATENBANKENTWURF Typdefinitionen Im logischen Modell der zu entwickelnden Datenbank werden zwei Objekttypen verwendet, MDSYS.SDO GEOMETRY und Typ KlimaDatenTabelle. Dies beiden Objekttypen unterscheiden sich strukturell derart, dass MDSYS.SDO GEOMETRY ein objektwertiges Attribut, das in Abschnitt 3.5.3 erläutert wird, ist und Typ KlimaDatenTabelle eine geschachtelte Tabelle, deren Definition nun folgt. Bei Klimamessungen werden vier Werte bestimmt. Dies sind das Datum, die Temperatur, die relative Feuchte RFeuchte, sowie der Niederschlag. Ableitungen innerhalb der Informationsebene Klima bestimmen aus diesen Messwerten für jeden Messtag den Sättigungsdampfdruck (EWT14), den aktuellen Dampfdruck (ET14) und die potenzielle Verdunstung nach Haude (ETPhaude). Insgesamt ist ein Tupel für die Klimawerte eines Tages demnach aus sieben Attributen zusammengesetzt. Hierfür wird zunächst ein Objekttyp Typ KlimaDatum definiert: CREATE TYPE Typ_KlimaDatum AS OBJECT ( Datum DATE, Temperatur FLOAT, RFeuchte FLOAT, Niederschlag FLOAT, EWT14 FLOAT, ET14 FLOAT, ETPhaude FLOAT ); Die Definition des Typs Typ KlimaDatenTabelle erfolgt anschließend als Tabelle mit Zeilen vom Typ Typ KlimaDatum. CREATE TYPE Typ_KlimaDatenTabelle AS TABLE OF Typ_KlimaDatum; Dieser Typ ist tabellenwertig und kann als Attribut einer anderen Tabelle benutzt werden. Eine solche Konstruktion wird zur Erzeugung der Tabelle Klima verwendet, die ein Attribut Typ KlimaDaten besitzt, das tabellenwertig ist und als geschachtelte Tabelle abgespeichert wird. Die Definition der Tabelle Klima lautet: CREATE TABLE Klima ( KNr INTEGER, KlimaDaten Typ_KlimaDatenTabelle CONSTRAINT PK_Klima PRIMARY KEY (KNr)) NESTED TABLE Klimadaten STORE AS KlimadatenMenge; KNr ist dabei der Schlüssel der Relation und in Klimadaten werden die Messwerte abgelegt. Wie bereits in 3.5.3 beschrieben, werden sämtliche Tupel aller Tabellen vom Typ Typ KlimaDatenTabelle, die in dieser Relation angegeben sind intern in einer einzigen Tabelle KlimadatenMenge abgelegt, deren Name nach store as angegeben ist. 4.5. PHYSISCHER ENTWURF 4.5.2 55 Relationen Die implementierten Relationen entsprechen mit einer Ausnahme denen des logischen Modells. Ihre SQL-Definitionen finden sich in Anhang A.1. Die Ausnahme besteht in der Speicherung des Attributes Geometrie in den Relationen BodenStandort, NutzungStandort und KlimaStandort. Dieses Attribut wurde aus der Relation entfernt und separat in einer jeweils eigenen Relation (BodenFlaeche, NutzungFlaeche und KlimaFlaeche) abgespeichert. Diese Relation besitzt außer der Geometrie als zweites Attribut die Nummer des Standortes, zu dem die Geometrie gehört. Diese Nummer ist Fremdschlüssel der Relation. Der Grund für die Trennung von Sachdaten und Geometriedaten liegt darin, dass die Menge der geometrischen Informationen um ein Vielfaches höher ist als die Menge an Sachdaten. Dies kann bei Anfragen, die sich ausschließlich auf Sachdaten beziehen, zu einer längeren Anfragebearbeitungszeit führen, da nicht direkt auf benötigte Daten zugegriffen werden kann, weil diese nicht im Cache oder Hauptspeicher, sondern auf der Festplatte vorhanden sind und der Zugriff darauf mehr Zeit in Anspruch nimmt. Dieses Phänomen wird in der Datenbanktheorie auch als Seitenfehler bezeichnet. Das folgende Beispiel soll dieses Problem noch einmal verdeutlichen: Angenommen in einen schnellen Speicher können 1000 Zahlen aufgenommen werden und ein Tupel besteht durchschnittlich aus einer Zahl für das Schlüsselattribut und 600 Zahlen für die Koordinaten. Um nun auf drei Schlüsselattribute zuzugreifen, muss durchschnittlich einmal der Inhalt des Speichers neu geladen (und der alte Inhalt wieder auf Festplatte geschrieben) werden, da die nicht benötigten Koordinaten wertvollen Speicherplatz belegen. Sind nur die Schlüsselwerte im Speicher, wäre ein Austausch des Speicherinhalts erst nach 1000 Zugriffen notwendig. Daher wird die Trennung der Geometriedaten für Polygone von den Sachdaten wie im nachfolgenden Beispiel durchgeführt. Beispiel: Die Relation BodenStandort(SNr:integer, Rechtswert:float, Hochwert:float, Geometrie:MDSYS.SDO GEOMETRY,BPNR→BodenProfil) wird aufgespalten in die zwei Relationen BodenStandort(SNr:integer, Rechtswert:float, Hochwert:float, BPNR→BodenProfil) und BodenFlaeche(SNr→BodenStandort,Geometrie:MDSYS.SDO GEOMETRY) Die Änderung der Relationen NutzungStandort bzw. KlimaStandort erfolgt analog. 4.5.3 Indexe Neben den vom Oracle-Datenbanksystem automatisch auf Primärschlüsseln von Tabellen angelegten Indexen wurden Indexe auf den (räumlichen) Geometriedaten erzeugt. 56 KAPITEL 4. DATENBANKENTWURF Das Anlegen eines räumlichen Index erfordert zunächst die Eintragung der Dimensionsinformationen der zu indexierenden Attribute in die Relation SDO GEOM METADATA. Hierzu müssen allerdings die maximalen Abmessungen der geometrischen Attribute (der Gesamtheit einer Relation) bekannt sein. Daher kann dieser Eintrag erst erfolgen, wenn diese Daten ermittelt sind. Werden Daten automatisiert in die Datenbank eingefügt, so schließt sich die Indexerzeugung daher an den Datenimport der Geometriedaten an. In der vorliegenden Arbeit wird in Abschnitt 5.3 auf das Anlegen eines räumlichen Index eingegangen und in Kapitel 6 werden verschiedene Parameterwerte für SDO LEVEL bzw. SDO PARAMETER und ihre Auswirkungen auf geometrische Operationen untersucht. Kapitel 5 Datenimport In diesem Kapitel wird erläutert, wie die vom Geographischen Institut der Universität Hannover, Abteilung Physische Geographie und Landschaftsökologie, zur Verfügung gestellten Daten in die im vorigen Kapitel entworfene Datenbank importiert und bereinigt werden. Voraussetzung für den beschriebenen Datenimport ist, dass die Daten im ASCII-Format vorliegen, was für die Realdaten auch bis auf die Klimadaten zutrifft. Die Klimadaten liegen als Excel-Datei vor, können aber leicht ins ASCII-Format konvertiert werden. Die folgenden Abschnitte befassen sich mit den Vorbereitungen zum Datenimport, dem Import der Sachdaten, dem Import der Geometriedaten unter besonderer Betrachtung des von Oracle bereitgestellten SQL-Loader-Utility und der anschließenden Erzeugung von Indexstrukturen auf den Daten. Schließlich wird die Datenbereinigung auf den geometrischen Daten erläutert. 5.1 Vorbereitungen zum Datenimport In diesem ersten Schritt werden zunächst die benötigten Relationen in der Datenbank angelegt. Dies erfolgt durch die zwei SQL-Skripte: ./Programme/Schema/create_tables.sql ./Programme/Schema/create_tables_orig.sql Durch das Skript create tables.sql werden die in Kapitel 4 entworfenen Relationen angelegt. Das Skript create tables orig.sql erzeugt Relationen, deren Struktur der Struktur der Dateien der Originaldaten entspricht. Dadurch können die Originaldaten direkt mittels verschiedener SQL-Kommandos in die Datenbank importiert und anschließend durch SQL-Prozeduren oder Kommandos in die neuen Relationen eingefügt werden. Das Erzeugen der alten Schemata ist notwendig, da das neue Schema vom alten abweicht und so für den Import der Daten in das neue Schema teilweise aufwendige Verknüpfungen der Daten durchgeführt werden müssen. 57 58 KAPITEL 5. DATENIMPORT Für die Originaldateien mit Sachdaten werden durch Hilfsprogramme (convert.java bzw. konvertiere Klima9596.java für die Klimadaten, die in einer geschachtelten Tabelle gespeichert werden) SQL-Kommandos erzeugt, die, als Skript ausgeführt, die Daten in die Datenbank importieren. Diese Hilfsprogramme und eine Benutzungsanleitung sind in Anhang D.1 genauer beschrieben. Die Originaldaten enthalten sehr vereinzelt fehlerhafte Daten, beispielsweise Steuerzeichen o.ä., die aufgrund der geringen Anzahl manuell korrigiert wurden. Schließlich gab es Dateien mit Kopfzeilen, die Attributnamen angaben. Diese Kopfzeilen wurden ebenfalls manuell modifiziert bzw. entfernt.. Die geometrischen Daten müssen, um sie mit dem SQL-Loader-Utility zu laden, in ein neues Format konvertiert werden. Diese Konvertierung wird in D.2 beschrieben. Nachdem alle benötigten Relationen und die für den Import der Originaldaten zu erzeugenden SQL-Skripte und Dateien angelegt sind, können die Daten in die Datenbank eingelesen werden. 5.2 Import der Sachdaten Der Import der Sachdaten wird in mehreren Schritten durchgeführt. Zunächst werden die Werte in die Originalrelationen geladen und dann mittels verschiedener SQL-Skripte und Prozeduren in die neuen Relationen eingefügt. Für diesen Teil existiert das SQLSkript: ./Programme/Datenimport/init.sql Dieses Skript ruft andere Skripte auf, die zunächst die Originalsachdaten mittels vorher erzeugter insert into ... values ...-Kommandos in die Originalrelationen laden. Anschließend werden diese Daten in die neuen Relationen übertragen. Da das neue Schema die Daten anders als das alte Schema strukturiert, ist diese Übertragung nicht trivial, sondern erfordert zumindest für die Bodendaten eine aufwendige Verknüpfung der Originalrelationen. Im ursprünglichen Schema sind beispielsweise die Messstandorte der Informationsebene Boden Attribute der Bodendaten, sodass bei gleichen Bodendaten mehrere Tupel erzeugt werden, die sich nur bezüglich des Standortes unterscheiden. Solche Redundanzen sollten möglichst vermieden werden und das entwickelte Datenmodell unterstützt diese Strategie, indem es eine Klasse Boden und eine Klasse BodenStandort besitzt, sodass die Bodenattribute nur einmal in der Datenbank abgelegt werden. Diese Initialisierung der Bodendaten wird mithilfe der Datei ./Programme/Datenimport/initBodenprofil.sql durchgeführt, die automatisch von init.sql aufgerufen wird. Die weiteren neuen Relationen haben lediglich andere Attributbezeichnungen oder werden, wie beispielsweise bei den Daten der Informationsebene Nutzung, in mehrere Relationen aufgespalten, um wie bei den Bodendaten Redundanzen zu vermeiden. 5.3. IMPORT DER GEOMETRISCHEN DATEN 59 Schließlich werden noch null-Werte, die in den Originaldaten beispielsweise als 999.99 o.ä. gespeichert sind, zu null korrigiert. 5.3 Import der geometrischen Daten Nachdem die Sachdaten in das neue Schema übertragen sind, werden die geometrischen Daten geladen. Dazu wird das SQL-Loader-Utility von Oracle8i benutzt. Dieses benötigt zum Datenimport eine Kontrolldatei, in der angegeben ist, wie die einzulesenden Daten zu speichern sind. An dieser Stelle sei darauf hingewiesen, dass alle Koordinatenwerte mit 100 multipliziert wurden, um Nachkommastellen zu vermeiden, da die Koordinatenwerte bei der Ausgabe aus der Oracle-Datenbank standardmäßig gerundet werden. Ein relativ einfaches Beispiel für die Anwendung des SQL-Loader ist das Einlesen der Höhendaten des Reliefs. Die Originaldatei hat folgende Struktur, wobei die Attributnamen nicht in der Datei mit aufgeführt sind: Rechtswert x1 x2 x3 Hochwert y1 y2 y3 Hoehe h1 h2 h3 Die Relation, die diese Werte aufnehmen soll heißt dgm25 (Digitales Geländemodell, Punktabstand 25m) und wurde angelegt durch: CREATE TABLE PNr Rechtswert Hochwert Hoehe CONSTRAINT dgm25 ( INTEGER, INTEGER, INTEGER, FLOAT, PK_dgm25 PRIMARY KEY (PNr)); Für das erste Attribut PNr, das Primärschlüssel ist, wird demnach ein Wert beim Einlesen benötigt, der in der Eingabe nicht vorhanden ist. Abhilfe schafft hier die Definition eines Zählers, der durch das SQL-Kommando create sequence ... erzeugt werden kann. Die restlichen Werte werden direkt aus der Eingabedatei übertragen. Der Aufbau der Kontrolldatei ist sich daher wie in Abbildung 5.1 angegeben. Zeile 1 definiert, dass Daten geladen werden sollen. Zeile 2 enthält den Dateinamen der Eingabedatei, in diesem Fall dgm25.dat. Die Endung .dat wird automatisch angefügt, falls keine Endung angegeben ist. In Zeile 3 steht der Name der Relation, in die die Werte geladen werden sollen, Zeile 4 gibt Trennzeichen der einzelnen Werte in der Eingabedatei an. In Zeile 5 wird die Spalte benannt, in die der nachfolgende Wert eingetragen werden soll. Dies ist der Primärschlüssel PNr, für den eine Sequenz von Zahlen erzeugt wird. Die Werte in Klammern geben den Startwert der Sequenz und einen Wert für die Inkrementierung (in dieser Reihenfolge) an. Die Zeilen 7,8 und 9 enthalten die Namen der Attribute der Relation, in die die Werte eingelesen werden, sowie den Datentyp 60 KAPITEL 5. DATENIMPORT Listing : 1 2 3 4 5 6 7 8 9 load dgm25.ctl LOAD DATA INFILE dgm25 INTO TABLE dgm25 FIELDS TERMINATED BY ’ ’ (PNr SEQUENCE (1,1), Rechtswert INTEGER EXTERNAL, Hochwert INTEGER EXTERNAL, Hoehe FLOAT EXTERNAL ) Abbildung 5.1: Kontrolldatei zum Laden des Höhenprofils dieser Werte. Das Schlüsselwort external weist den SQL-Loader an, die Werte aus der Eingabedatei zu lesen (im Unterschied zu PNr). Die Eingabedateien für die Hangneigung und die Exposition sind strukturell ebenso aufgebaut wie die Eingabedatei für das Höhenprofil. Daher sind diese Kontrolldateien für den Datenimport wie die Kontrolldatei in Abbildung 5.1 aufgebaut. Neben den Reliefdaten werden auch die Polygone der Standorten zugeordneten quasihomogenen Flächen mithilfe des SQL-Loader-Utility importiert. Zunächst müssen allerdings die Originaldateien wie in Anhang D.2 konvertiert werden. Die Eingabedatei für den SQL-Loader hat dann folgende Struktur, wobei zu berücksichtigen ist, dass in der Eingabedatei nur Polygone (keine Inselpolygone) abgelegt sind: 1,3,,,1,3,1;3.57002075E8,5.7665E8,3.57002175E8,5.766495E8,...: 2,3,,,1,3,1;3.57002075E8,5.7665E8,3.57037125E8,5.7665E8,...: 3,3,,,1,3,1;3.57037125E8,5.7665E8,3.57047325E8,5.7665E8,...: Die Struktur der Zeilen dieser Datei entspricht der Struktur von Objekten vom Typ MDSYS.SDO GEOMETRY. Die erste Zahl ist die Nummer des Polygons, die zweite Zahl, in diesem Fall immer eine 3 steht für den Typ des Objektes (SDO GTYPE), hier also Polygon. Es folgen zwei null-Werte für SDO SRID und SDO POINT. SDO SRID ist per Definition immer null, da es in dieser Version von Oracle noch nicht unterstützt wird, und SDO POINT ist auf null gesetzt, da keine Punktdaten geladen werden. Die nächsten drei Werte gehören zusammen und bilden ein Tripel für SDO ELEM INFO. (1, 3, 1) bedeutet in diesem Fall, dass das erste geometrische Objekt den Offset 1 vom Anfang des nachfolgenden SDO ORDINATES-Array hat und vom Typ einfaches Polygon mit durch gerade Linien verbundenen Punkten ist. Es folgen die Koordinaten der einzelnen Punkte. Der Aufruf des SQL-Loader zum Laden dieser Daten erfolgt anschließend mithilfe der in Abbildung 5.2 angegebenen Kontrolldatei (Beispiel für das Laden der Bodenpolygone). In dieser Datei entsprechen die ersten vier Zeilen denen der Kontrolldatei zum Laden des Höhenprofils, mit Ausnahme der Bezeichnungen und des Trennzeichens. Zeile 5 definiert SNr als externen Integer-Wert. Dies ist in der Eingabedatei die Nummer des jeweiligen Polygons. In der Zeile 6 ist angegeben, dass das Attribut Geometrie objektwertig ist. Die in Klammern eingeschlossen Attribute der Zeilen 7-13 bestimmen die Attribute dieses 5.3. IMPORT DER GEOMETRISCHEN DATEN Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 61 load boden polygone.ctl LOAD DATA INFILE ilde.pol.ora INTO TABLE BodenFlaeche FIELDS TERMINATED BY ’,’ ( SNr INTEGER EXTERNAL, Geometrie COLUMN OBJECT ( SDO_GTYPE INTEGER EXTERNAL, SDO_SRID INTEGER EXTERNAL, isnull FILLER CHAR, SDO_ELEM_INFO VARRAY terminated by ’;’ (SDO_ORDINATES char(38)), SDO_ORDINATES VARRAY terminated by ’:’ (SDO_ORDINATES char(38))) ) Abbildung 5.2: Kontrolldatei zum Laden der Bodenpolygone Objektes. Zeile 7 gibt an, dass SDO GTYPE ein externer Integer-Wert ist. Dies ist die 3 aus der Eingabedatei, also ist die Definition für ein Objekt vom Typ Polygon. SDO SRID ist immer null, wie in der Eingabedatei angegeben. In Zeile 9 wird einfach ein null-Wert eingefügt. Dies ist richtig, da keine Punkte geladen werden und an dieser Stelle im Objekttyp MDSYS.SDO GEOMETRY der Wert für SDO POINT angegeben wird, falls einer existiert. Zeile 10 besagt, dass nun so viele Werte aus der Eingabedatei gelesen werden, bis ein Semikolon erreicht wird. Dies sind die Werte für SDO ELEM INFO, das ein Array von n mal drei Werten ist. In Zeile 12 wird ebenso für die Koordinaten verfahren, mit dem Unterschied, dass hier bis zu einem Doppelpunkt gelesen wird. Um alle Geometriedaten zu laden werden die fünf folgenden Kontrolldateien und entsprechenden Eingabedateien benötigt, die sich im Verzeichnis ./Programme/Datenimport finden: • Höhenprofil: load dgm25.ctl dgm25.dat • Hangneigung: load slope25.ctl slope25.dat • Exposition: load aspect25.ctl aspect25.dat • Bodenpolygone: load boden polygone ilde.pol.ora • Nutzungspolygone: load nutzung polygone il nutz.pol.ora Nachdem die Geometriedaten geladen sind werden für jede Relation mit räumlichen Informationen Einträge in die Relation SDO GEOM METADATA vorgenommen und räumliche Indexe angelegt. Dies kann erst nach dem Laden der Daten durchgeführt werden, da nur anhand der Daten die Dimensionswerte ermittelt werden können, die in die Relation SDO GEOM METADATA eingetragen werden. Die Methode zur Erzeugung eines räumlichen Index greift auf diese Tabelle zurück. Ein räumlicher Index kann also auch erst jetzt erzeugt werden. Für das Einfügen der Information in die Relation SDO GEOM METADATA und das Anlegen der Indexe existiert ebenfalls ein Skript: 62 KAPITEL 5. DATENIMPORT ./Programme/Datenimport/init2.sql In Abbildung 5.3 ist in den ersten drei Zeilen angegeben, wie die Informationen für die Bodendaten in diese Relation eingetragen werden und anschließend, in den Zeilen fünf und sechs, ein räumlicher Index auf den Daten erzeugt wird. Listing : init2.sql (Ausschnitt) 1 INSERT INTO SDO_GEOM_METADATA VALUES (’BodenFlaeche’,’Geometrie’, 2 MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT(’X’,357000000,357300000,1), 3 MDSYS.SDO_DIM_ELEMENT(’Y’,576350000,576650000,1))); 4 5 CREATE INDEX IBodenFlaeche ON BodenFlaeche(Geometrie) INDEXTYPE IS 6 MDSYS.SPATIAL_INDEX PARAMETERS(’SDO_LEVEL=6, SDO_NUMTILES=12’); Abbildung 5.3: Einfügen geometrischer Informationen in SDO GEOM METADATA und Anlegen eines räumlichen Index Die in Zeile 1 übergebenen Parameter definieren den Tabellennamen und den Namen der Spalte, die ein räumliches Attribut ist. In der Zeile zwei wird ein Objekt vom Typ MDSYS.SDO DIM ARRAY erzeugt, dass selbst zwei weitere objektwertige Attribute besitzt, die jeweils die minimalen und maximalen Werte der Koordinaten einer Dimension angeben. Die vier Parameter bei der Erzeugung der Objekte vom Typ MDSYS.SDO DIM ELEMENT() sind der Name der Dimension, der minimale und der maximale Wert der Dimension und ein Toleranzwert. In der Definition des Index wird durch INDEXTYPE IS MDSYS.SPATIAL INDEX angegeben, dass ein räumlicher Index angelegt werden soll. Die beiden Parameter bestimmen die Anzahl der Teilungen für das fixe (SDO LEVEL=6) und das hybride Indexieren (SDO NUMTILES=12). Indexe und die Auswirkungen verschiedener Werte für die bei der Indexierung anzugebenden Werte werden noch genauer in Kapitel 6 untersucht. Nachdem die Metadaten der Tabellen mit geometrischen Informationen in die Relation SDO GEOM METADATA eingetragen und die Indexe erzeugt sind, wird die Geometrie der Daten auf ihre Gültigkeit überprüft, d.h. es wird überprüft, ob die Definition des Geometrietyps mit den Realdaten übereinstimmt. Für die Boden- und die Nutzungspolygone kann dieser Test mithilfe der Datei ./Programme/Datenbereinigung/ueberpruefe_Layer.sql durchgeführt werden. Für die Bodendaten erfolgt die Überprüfung der Geometrien wie in Abbildung 5.4 dargestellt. Die Methode gibt die Nummern der Polygone aus, die die in ihrer Definition definierten Eigenschaften nicht erfüllen. Der Fehler der Geometrie kann auch mit ausgegeben werden, indem MDSYS.SDO GEOM.VALIDATE GEOMETRY(...) zusätzlich mit in den select-Teil geschrieben wird. Mithilfe dieser Methode wurde festgestellt, dass bei den gegebenen Polygonen Fehler auftreten. Die von Oracle ausgegebene Fehlermeldung ist, dass sich Polygone selbst schneiden, wodurch die Begriffe Inneres und Äusseres nicht mehr eindeutig zu definieren sind. Dies ist bei den Realdaten allerdings nicht der Fall. 5.4. DATENBEREINIGUNG DER GEOMETRIEDATEN Listing : 63 ueberpruefe Layer.sql (Ausschnitt) 1 SELECT a.SNr AS BodenFlaeche 2 FROM BodenFlaeche a, 3 SDO_GEOM_METADATA b 4 WHERE b.table_name=’BodenFlaeche’ and 5 b.column_name=’Geometrie’ and 6 MDSYS.SDO_GEOM.VALIDATE_GEOMETRY( 7 a.Geometrie,b.diminfo)!=’TRUE’; Abbildung 5.4: Überprüfung der Geometrien der Bodenpolygone Der Grund für die Fehlermeldung von Oracle sind numerische Ungenauigkeiten, die durch eine Reduzierung des Toleranzwertes in der Relation SDO GEOM METADATA weitgehend beseitigt werden können. Allerdings ist diese Fehlermeldung für ein Polygon der Informationsebene Boden dadurch nicht zu beheben. Es wird weiterhin vom Oracle-Datenbanksystem als fehlerbehaftet angesehen. 5.4 Datenbereinigung der Geometriedaten Die Topologie der Polygone der Informationsebenen Boden und Nutzung ist bisher in der Datenbank nur implizit vorhanden. Die Polygone wurden sämtlich als einfache Polygone importiert, ihre Lage zueinander nicht berücksichtigt. Da aber neben einfachen Polygonen auch Polygone mit Loch (Inselpolygone) vorhanden sind, die von Spatial unterstützt werden, müssen diese nun aus den vorhandenen Daten neu bestimmt werden. Ein Inselpolygon ist in den Daten durch zwei einfache Polygone dargestellt, das äußere und das innere Polygon. Solche Paare, in denen ein Polygon inklusive seinem Rand, topologisch im Innern eines anderen Polygons liegt, werden anschließend weiter bearbeitet, indem das innere Polygon aus dem äußeren Polygon ausgeschnitten wird. Spatial bietet für diese Differenzbildung von Polygonen die in Abschnitt 3.5.3.4 vorgestellte Methode MDSYS.SDO GEOM.SDO POLY INTERSECTION() an. Die Bestimmung von Polygonpaaren, bei denen eines im topolgischen Innern eines anderen enthalten ist, wird mithilfe des Operators SDO RELATE() unter Verwendung des Parameters contains realisiert. Abbildung 5.5 zeigt die gesamte Methode zur Berechnung der Inselpolygone am Beispiel der Bodenpolygone. Für die Polygone der Informationsebene Nutzung. existiert eine entsprechende Prozedur. Da nun alle Daten in der Datenbank gespeichert sind, können Anfragen an die Datenbank gestellt werden, die geometrische und Sachinformationen miteinander verknüpfen. Einige Beispielanfragen sind in Anhang E angegeben. Teilweise benötigen sie allerdings auch weitere Relationen, die erst später angelegt werden. Zum Abschluß dieses Kapitels sind in den Abbildungen 5.6 bis 5.8 die Informationsebenen Boden, Nutzung und Relief veranschaulicht. 64 KAPITEL 5. DATENIMPORT Die Abbildungen 5.6 und 5.7 stellen die bereinigten Daten der Informationsebenen Boden bzw. Nutzung im Vektorformat dar. Abbildung 5.6 zeigt die quasihomogenen Flächen der verschiedenen vorkommenden Bodenprofile im Untersuchungsgebiet, wobei gleiche Farben für das gleiche Profil stehen. Im linken unteren Bereich sind in dieser Abbildung mehrere Inseln auszumachen. Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 erzeuge Inselpolygone Boden.sql CREATE OR REPLACE PROCEDURE set_InselnBoden IS -- In cur werden alle Paare (aSNr,bSNr) geladen fuer die gilt: -- Flaeche(b) ist vollstaendig enthalten in Flaeche(a) CURSOR cur IS SELECT a.SNr AS aSNr, b.SNr as bSNr FROM BodenFlaeche a, BodenFlaeche b WHERE a.SNr!=b.SNr AND -- Vergleich der Standortnummern MDSYS.SDO_RELATE(a.Geometrie,b.Geometrie, ’mask=CONTAINS querytype=JOIN’)=’TRUE’; runner cur%ROWTYPE; BEGIN OPEN CUR; LOOP FETCH cur INTO runner; EXIT WHEN cur%NOTFOUND; -- Innerhalb der UPDATE-Anweisung werden die neuen Polygone berechnet, -- d.h. Inseln werden aus aeusseren Polygonen geschnitten UPDATE BodenFlaeche BF SET BF.Geometrie = ( SELECT MDSYS.SDO_GEOM.SDO_POLY_DIFFERENCE(a.Geometrie,b.diminfo, c.Geometrie,b.diminfo) FROM BodenFlaeche a, BodenFlaeche c, SDO_GEOM_METADATA b WHERE b.table_name=’BodenFlaeche’ AND a.SNr=runner.aSNr and c.SNr=runner.bSNr ) WHERE BF.SNr=runner.aSNr; END LOOP; CLOSE cur; END; Abbildung 5.5: Berechnung von Inselpolygonen In Abbildung 5.7 sind ebenfalls gleiche Farben gleichbedeutend mit gleicher Nutzung. Die Nutzungsdaten beziehen sich dabei auf das Jahr 1996. 5.4. DATENBEREINIGUNG DER GEOMETRIEDATEN Abbildung 5.6: Bodenklassen im Untersuchungsgebiet Abbildung 5.7: Nutzung des Jahres 1996 im Untersuchungsgebiet 65 66 KAPITEL 5. DATENIMPORT Abbildung 5.8: Höhenprofil Abbildung 5.8 schließlich zeigt das Höhenprofil eines Gebietes, das als Rasterdatei mit einem Rasterpunktabstand von 25 Metern aufgenommen wurde. Die Grenzen entsprechen allerdings nicht den Grenzen des Untersuchungsgebietes, das in etwa das zweite und dritte Viertel in beiden Richtungen ausmacht. Hellere Farben entsprechen hierbei größeren Höhenwerten. Die Informationsebene Klima ist nicht dargestellt, da die Klimadaten für das gesamte Untersuchungsgebiet als homogen angesehen werden. Die zur Darstellung dieser Bilder verwendeten Programme sind in Anhang C beschrieben. Sie werden auch für die weiteren in dieser Arbeit berechneten Bilder benutzt. Kapitel 6 Methoden In diesem Kapitel wird erläutert, wie Methoden der vom Niedersächsischen Landesamt für Bodenforschung herausgegebenen Auswertungsmethoden im Bodenschutz [17] mit der entwickelten Datenbank implementiert werden, um aus aufgenommenen Messwerten (Primärinformationen) mehrerer Informationsebenen neue Daten (Sekundärinformationen) zu ermitteln und diese in Kartenform darzustellen. Der prinzipielle Aufbau der Methoden zur Ableitung neuer Daten entspricht folgender Struktur: 1. Ableitung neuer Daten innerhalb der Klassen 2. Ableitung neuer Daten innerhalb der Informationsebenen 3. Verschneidung von Informationsebenen 4. Ableitung neuer Daten für verschnittene Geometrien Abhängig von der Anzahl der Informationsebenen, die als Eingangsdaten benötigt werden und der Verschneidungsreihenfolge, können dabei der dritte oder der dritte und vierte Schritt gemeinsam mehrmals nacheinander ausgeführt werden. Die Schritte 1,2 und 4 verknüpfen ausschließlich Sachdaten miteinander, in Schritt 3 werden Berechnungen auf geometrischen Daten ausgeführt. Es ist nicht zwingend erforderlich die Reihenfolge der Schritte einzuhalten, die Berechnung der Verschneidungen kann auch vor den Ableitungen der Sachdaten erfolgen. Dabei ist lediglich zu beachten, dass an die neuen Geometrien Informationen zum Zugriff auf die Sachdaten geheftet werden. Die Ableitung der Sachdaten und die Verschneidung der geometrischen Daten kann also getrennt voneinander betrachtet werden. Der Aufbau dieses Kapitels lehnt sich an die vier oben genannten Schritte an. Zunächst werden Ableitungen innerhalb von Klassen bzw. Informationsebenen betrachtet. Es folgen Untersuchungen über Verschneidungoperationen, wobei insbesondere auf räumliche Indexe eingegangen wird. Schließlich werden die Methoden zur Ableitung von Daten 67 68 KAPITEL 6. METHODEN vorgestellt, die Eingangsdaten mehrerer Informationsebenen benötigen. Diese entsprechen aber grundsätzlich den Methoden zur Ableitung innerhalb einer Informationsebene (Schritt 2), da durch die Verschneidungen praktisch neue, mehrere Informationsebenen zusammenfassende, Informationsebenen entstehen. Als Beispiel wird in diesem Kapitel die Methode zur Ableitung der Sickerwasserrate implementiert, die bereits in Abschnitt 4.1.5 kurz skizziert wurde. 6.1 Ableitungen innerhalb einer Klasse Bei Ableitungen innerhalb einer Klasse werden aus vorhandenen Klassenattributen abgeleitete Werte berechnet, die ebenfalls ein Attribut der entsprechenden Klasse sind. Es handelt sich bei den nun vorgestellten Methoden folglich um obkjektbezogene Ableitungen von Werten. Diese Ableitungen benötigen als weitere Eingangsdaten statische Hilfstabellen, die aus dem NIBIS-Handbuch [17] bzw. der Bodenamtlichen Kartieranleitung [1] entnommen sind. Bei widersprüchlichen Aussagen dieser beiden Quellen wurde nach der Bodenkundlichen Kartieranleitung verfahren. Auf die benötigten Hilfstabellen wird jeweils in den Beschreibungen der Methoden eingegangen, die diese benötigen. Bei der Methode zur Ableitung der Sickerwasserrate werden innerhalb der Klassen BodenHorizont und KlimaDatum abgeleitete Werte bestimmt. Die folgenden Unterabschnitte erläutern die Implementierungen der einzelnen Methoden, zunächst für die Klasse BodenHorizont, anschließend für die der Klasse KlimaDatum. 6.1.1 Methoden der Klasse BodenHorizont Innerhalb der Klasse BodenHorizont werden die drei Werte Lagerungsdichte (Ld), effektive Durchwurzelungstiefe (We) und nutzbare Feldkapazität (nFK) aus den aufgenommenen Daten bestimmt. Der Datenfluss innerhalb dieser Klasse ist in Abbildung 6.1 dargestellt. Hierbei ist zu berücksichtigen, dass im Untersuchungsgebiet nur Mineralböden vorliegen. Daher beschränken sich die Ableitungen auf diese Bodentypen. Für andere Bodentypen sind weitere statische Hilfstabellen in die Datenbank zu importieren und eventuell geringe Änderungen an den Methoden vorzunehmen (Ergänzungen von Prozeduren, Umbenennungen von Tabellennamen o.ä.). 6.1.1.1 Lagerungsdichte Zur Berechnung der Lagerungsdichte eines Bodenhorizonts werden als Eingangsdaten die Rohdichte und der Tongehalt des jeweiligen Horizonts benötigt. Sind diese bekannt, so kann die Lagerungsdichte LD nach folgender Formel berechnet werden. LD = Rohdichte + 0.009 ∗ T ongehalt 6.1. ABLEITUNGEN INNERHALB EINER KLASSE 69 Klasse Bodenhorizont Eingangsdaten abgeleitete Werte * Bodenart nutzbare Feldkapazität Rohdichte * Lagerungsdichte * Tongehalt effektive Durchwurzelungstiefe des Horizonts Horizontbezeichnung : geht ein in die Berechnung von * : unter Verwendung statischer Hilfsrelationen Abbildung 6.1: Schematische Darstellung des Datenflusses innerhalb der Klasse BodenHorizont Die Maßeinheit für die Lagerungsdichte ist Gramm pro Kubikzentimeter. Die Zuweisung des Wertes für die Lagerungsdichtestufe LDStufe erfolgt mithilfe der (statischen) Hilfstabelle aus Abbildung 6.2. Diese ist aus dem Methodenhandbuch [17] bzw. der Bodenkundlichen Kartieranleitung [1], auf der das Methodenhandbuch basiert, übernommen und wie in Abbildung 6.3 implementiert worden. Statische Hilfstabellen werden in mehreren [g/cm3 ] < 1.4 1.4− < 1.6 1.6 − 1.8 > 1.8 − 2.0 > 2.0 Bezeichnung sehr gering gering mittel hoch sehr hoch Kurzzeichen Ld1 Ld2 Ld3 Ld4 Ld5 Abbildung 6.2: Einstufung der effektiven Lagerungsdichten (Ld) (entnommen aus [1]) Prozeduren für die Einteilung von ermittelten Werten in Stufen oder die Ermittlung neuer Werte anhand verschiedener Eingangsdaten benötigt. Hilfstabellen zur Einteilung von LdStufe 1 2 3 4 5 LdMin 0 1.4 1.6 1.8 2 LdMax 1.4 1.6 1.8 2.0 100 Abbildung 6.3: Einstufung der effektiven Lagerungsdichten (Ld) Werten in Stufen haben prinzipiell immer den in Abbildung 6.3 angegebenen Aufbau. Sie werden daher im weiteren Text nur noch erwähnt, aber nicht mehr genau beschrieben. Die Definition dieser Tabellen kann dem elektronischen Anhang entnommen werden. 70 KAPITEL 6. METHODEN Ist ein für die Berechnung der Lagerungsdichte notwendiges Eingangsdatum nicht bekannt, so kann für bestimmte Horizonte anhand des Attributs Horizontbezeichnung unter Verwendung der Hilfsrelation HT LdStufe der Wert für die Lagerungsdichtestufe LDStufe abgeschätzt werden. Bei den vorhandenen Daten sind allerdings nicht allen Horizonten Werte für LDStufe zuzuordnen, von insgesamt 82 in der Relation BodenHorizont vorhandenen Horizonten erhalten 78 einen Wert für LDStufe zugewiesen. Die Prozedur zur Ableitung der Lagerungsdichte bzw. Lagerungsdichtestufe ist in Abbildung 6.4 dargestellt. Im ersten Teil wird die Lagerungsdichte für Horizonte berechnet, Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 -- Prozedur zur Berechnung der Lagerungsdichte -- und zur Speicherung der Lagerungsdichtestufe calculate ld.sql CREATE OR REPLACE PROCEDURE calculate_ld IS BEGIN -- Rohdichte und Tongehalt bekannt UPDATE BodenHorizont SET Ld = Rohdichte + 0.009*Tongehalt WHERE Rohdichte IS NOT NULL AND Tongehalt IS NOT NULL; -- Rohdichte oder Tongehalt nicht bekannt UPDATE BodenHorizont H SET H.LDStufe = ( SELECT HT.LDStufe FROM HT_LDStufe HT WHERE INSTR(H.Horizontbezeichnung,HT.Horizont)>0 AND NOT EXISTS ( SELECT HT2.LDStufe FROM HT_LDStufe HT2 WHERE INSTR(H.Horizontbezeichnung,HT2.Horizont)> INSTR(H.Horizontbezeichnung,HT.Horizont))) WHERE H.Rohdichte IS NULL OR H.Tongehalt IS NULL; -- Lagerungsdichtestufen fuer die Horizonte abspeichern -- fuer die eine Lagerungsdichte berechnet werden konnte UPDATE BodenHorizont H SET H.LdStufe = ( SELECT T.LDStufe FROM T_LDStufe T WHERE H.Ld>=T.ldmin AND H.Ld<T.ldmax AND H.Ld is not null) WHERE H.LD IS NOT NULL; END; Abbildung 6.4: Prozedur zur Ableitung der Lagerungsdichte(stufe) deren Rohdichte und Tongehalt bekannt sind und mittels einer update-Anweisung den Horizonten zugeordnet. Für Horizonte, bei denen mindestens eines dieser beiden Eingangsdaten nicht bekannt ist, wird anhand der Horizontbezeichnung aus der Hilfstabelle HT LdStufe ein geschätzter Wert ermittelt. Allerdings existieren Horizonte, deren Bezeichnung aus Namen mehrerer Horizonte kombiniert ist. Dies ist der Fall, wenn Horizonte ineinander geschoben sind. Während sich die Bezeichnungen einfacher Horizonte aus einem Hauptsymbol und einem Zusatzsymbol (z.B. Ah, wobei A das Hauptsymbol für einen A-Horizont ist und h das Zusatzsymbol für eine genauere Beschreibung 6.1. ABLEITUNGEN INNERHALB EINER KLASSE 71 des Horizonts) zusammensetzen, lauten Horizontbezeichnungen für ineinander geschobene Horizonte beispielsweise IIBv-T+cCv. Für solche Horizontbezeichnungen ist für die Schätzung der Lagerungsdichtestufe die am weitesten rechts stehende Symbolkombination (der Leithorizont), im Beispiel Cv, entscheidend, die durch den Aufruf von instr() und not exists erhalten wird. Der dritte Teil schließlich weist den Horizonten, für die eine Lagerungsdichtestufe berechnet werden konnte, mithilfe der Hilfstabelle T LdStufe, die zugehörige Lagerungsdichtestufe zu. 6.1.1.2 Effektive Durchwurzelungstiefe eines Horizonts Als nächstes wird die Methode zur Berechnung der effektiven Durchwurzelungstiefe eines Bodenhorizontes genauer betrachtet. Die effektive Durchwurzelungstiefe ist ein Maß dafür, wie tief Wurzeln in den Boden eindringen können, um Wasser und Nährstoffe aufzunehmen. Sie wird in Dezimetern angegeben. An dieser Stelle wird die effektive Durchwurzelungstiefe eines einzelnen Horizontes berechnet. Dies ist die Grundlage für die Methode zur Berechnung der effektiven Durchwurzelungstiefe eines Bodenprofils, die in Abschnitt 6.2.1 erläutert wird. Als Eingangsdaten für diese Methode werden die Bodenart und die Lagerungsdichtestufe LDStufe des Horizonts, sowie eine statische Hilfstabelle HT We benötigt, aus der die effektive Durchwurzelungstiefe We bei Kenntnis von Bodenart und effektiver Lagerungsdichtestufe LDStufe ermittelt werden kann. Die in Abbildung 6.5 angegebene Prozedur zeigt die Implementierung dieser Methode. Listing : 1 2 3 4 5 6 7 8 9 10 11 calculate WeSchicht.sql CREATE OR REPLACE PROCEDURE calculate_WeSchicht IS BEGIN UPDATE BodenHorizont H SET H.We = ( SELECT T.We FROM HT_We T WHERE T.Untergruppe=H.Bodenart AND T.Ld=H.LdStufe ); END; Abbildung 6.5: Prozedur zur Ableitung der effektiven Durchwurzelungstiefe Die Methode ermittelt zu den Tupeln der Relation BodenHorizont die entsprechenden effektiven Durchwurzelungstiefen aus einer Hilfstabelle. Die äußere update-Anweisung weist diesen Wert den Tupeln der Relation BodenHorizont zu. 72 KAPITEL 6. METHODEN 6.1.1.3 Nutzbare Feldkapazität eines Horizonts Als Feldkapazität wird die Wassermenge bezeichnet, die ein Boden gegen die Schwerkraft zurückhalten kann. Da in dem Wasser Stoffe gelöst sein können, ist sie ebenfalls ein Maß für das Vermögen des Bodens die Verlagerung derartiger Stoffe in den Untergrund zu verhindern (insbesondere auch Schadstoffe). Die nutzbare Feldkapazität nFK gibt an, welcher Teil der Feldkapazität für die Vegetation nutzbar ist. Die Angabe erfolgt in Millimeter pro Dezimeter bzw. Volumenprozent. Ebenso wie die Methode zur Ableitung der effektiven Durchwurzelungstiefe eines Horizonts benötigt diese Methode als Eingangsdaten die Bodenart und die Lagerungsdichtestufe, soweit nur mineralische Böden betrachtet werden. Andere Böden benötigen weitere Hilfstabellen. Anhand dieser Werte wird die nutzbare Feldkapazität aus der Hilfsrelation Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 calculate nFK.sql -- Diese Prozedur bezieht sich bisher nur auf Tabelle 1, -- also auf Feinboeden mit Humusgehalten <15% -- andere existieren im Untersuchungsgebiet nicht CREATE OR REPLACE PROCEDURE calculate_nFK IS BEGIN UPDATE BodenHorizont H SET H.nFK = ( SELECT T.nFK FROM HT_nFK T WHERE H.Bodenart=T.Untergruppe AND H.LdStufe=T.Ld); END; Abbildung 6.6: Prozedur zur Ableitung der nutzbaren Feldkapazität HT nFK ermittelt und in einer update-Anweisung den entsprechenden Tupeln zugeordnet. Die Methode ist in Abbildung 6.6 angegeben. 6.1.2 Methoden der Klasse KlimaDatum Innerhalb der Klasse KlimaDatum, die zur Definition der geschachtelten Tabelle innerhalb der Informationsebene Klima zur Aufnahme der Messdaten erzeugt wurde, werden drei Werte abgeleitet: der Sättigungsdampfdruck (EW T14 ), der aktuelle Dampfdruck (ET14 ) und die potenzielle Verdunstung nach Haude (ET Phaude ). Das in Abbildung 6.7 dargestellte Datenflussdiagramm zeigt, dass der Sättigungsdampfdruck (EWT14) aus der Temperatur und der aktuelle Dampdruck (ET14) aus dem Sättigungsdamfdruck und der relativen Feuchte abgeleitet wird. In die Berechnung der potenziellen Verdunstung nach dem Verfahren von Haude gehen diese beiden Werte, die daher zunächst abzuleiten sind, sowie der Monat ein. 6.1. ABLEITUNGEN INNERHALB EINER KLASSE 73 Klasse KlimaDatum Eingangsdaten abgeleitete Werte Temperatur EWT14 relative Feuchte ET14 Monat ETPhaude : geht ein in die Berechnung von Abbildung 6.7: Schematische Darstellung des Datenflusses innerhalb der Klasse KlimaDatum 6.1.2.1 Sättigungsdampfdruck Der Sättigungsampfdruck is abhängig von der Temperatur. Nach DIN 19685 (1996) berechnet er sich nach folgenden Formeln, wobei der Parameter t die Temperatur angibt: 17.84362∗t −5o C bis 0o C EW T14 = 6.1078 ∗ 2.71828 245.425+t 17.08085∗t 0o C bis 50o C EW T14 = 6.1078 ∗ 2.71828 234.175+t Der Wert für den Sättigungsdampfdruck ist im mbar angegeben. Die entsprechenden Berechnungen werden durch die Prozedur aus Abbildung 6.8 durchgeführt. Diese ProListing : 1 2 3 4 5 6 7 8 9 10 11 calculate ewt14.sql CREATE OR REPLACE PROCEDURE calculate_ewt14 IS BEGIN UPDATE TABLE (SELECT klimadaten FROM Klima K) SET ewt14 = 6.1078*power(2.71828,(17.84362*Temperatur)/(245.425+Temperatur)) WHERE Temperatur>=-5 AND Temperatur<=0; UPDATE TABLE (SELECT klimadaten FROM Klima K) SET ewt14 = 6.1078*power(2.71828,(17.08085*Temperatur)/(234.175+Temperatur)) WHERE Temperatur>0 AND Temperatur<=50; END; Abbildung 6.8: Prozedur zur Ableitung des Sättigungsdampfdrucks zedur (ebenso die beiden folgenden) setzt Werte in einer Relation (KlimaDaten), die in einer anderen (Klima) geschachtelt ist. 6.1.2.2 Aktueller Dampfdruck Der aktuelle Dampfdruck wird ebenfalls mithilfe einer einfachen Formel nach der oben angegebenen DIN-Norm berechnet: ET14 = EW T14 ∗ RF euchte 100 74 KAPITEL 6. METHODEN Die dafür verwendete Prozedur zeigt Abbildung 6.9. Listing : 1 2 3 4 5 6 CREATE OR REPLACE PROCEDURE calculate_et14 IS BEGIN UPDATE TABLE (SELECT klimadaten FROM Klima K) SET et14 = ewt14*RFeuchte/100; END; calculate et14.sql Abbildung 6.9: Prozedur zur Ableitung des aktuellen Dampfdrucks 6.1.2.3 Potenzielle Verdunstung nach Haude Die Berechnungsvorschrift für die potenzielle Verdunstung nach Haude ist ebenfalls durch die DIN-Norm 19685 festgelegt: ET PHaude = f (m) ∗ (EW T14 − ET14 ) Dabei ist f(m) ein vom Monat, in dem der Tag liegt, für den die potenzielle Verdunstung berechnet werden soll, abhängiger Faktor (siehe Tabelle 6.10). EW T14 bzw. ET14 sind die vorher berechneten Werte für den Sättigungsdampfdruck bzw. den aktuellen Dampfdruck. April-Mai 0.29 Juni 0.28 Juli 0.26 August 0.25 September 0.23 Oktober-März 0.22 Abbildung 6.10: Monatsvariabler Faktor zur Berechnung von ET PHaude Das Ergebnis der Anwendung der Prozedur aus Abb. 6.11 liegt in mm pro Tag vor. Die Methode verändert in der Tabelle Klima jeweils die Tupel eines oder mehrerer Monate nach der angegebenen Formel mit dem entsprechenden Monatsfaktor. Die Monatsangabe der einzelnen Tupel der geschachtelten Tabelle KlimaDaten wird in der where-Klausel zunächst aus der Datumsangabe isoliert. Diese Monatsangabe wird anschließend in eine Zahl umgewandelt und zur Selektion der Tupel einzelner Monate benutzt, die in der jeweiligen update-Anweisung modifiziert werden. Der nächste Abschnitt beschäftigt sich mit der Ableitung von Werten innerhalb der einzelnen Informationsebenen. Die dort vorgestellten Methoden setzen voraus, dass die Werte innerhalb einzelner Klassen bereits abgeleitet sind. 6.2 Ableitungen innerhalb einer Informationsebene Methoden zur Ableitung von Werten innerhalb einer Informationsebene existieren bisher ausschließlich für die Informationsebene Boden, da nur hier Instanzen mehrerer Klassen 6.2. ABLEITUNGEN INNERHALB EINER INFORMATIONSEBENE Listing : 75 calculate etphaude.sql (Ausschnitt) 1 CREATE OR REPLACE PROCEDURE calculate_etphaude 2 IS 3 BEGIN 4 -- April und Mai 5 UPDATE table (SELECT klimadaten from Klima K) 6 SET etphaude = 0.29*(ewt14-et14) 7 WHERE TO_NUMBER(TO_CHAR(datum,’MM’)) BETWEEN 4 AND 5; 8 -- Juni 9 UPDATE table (SELECT klimadaten from Klima K) 10 SET etphaude = 0.28*(ewt14-et14) 11 WHERE TO_NUMBER(TO_CHAR(datum,’MM’))=6; -- Juli bis September einzeln wie Juni 24 -- Oktober bis Maerz 25 UPDATE table (SELECT klimadaten from Klima K) 26 SET etphaude = 0.22*(ewt14-et14) 27 WHERE TO_NUMBER(TO_CHAR(datum,’MM’)) BETWEEN 10 AND 12 OR 28 TO_NUMBER(TO_CHAR(datum,’MM’)) BETWEEN 1 AND 3; 29 END; Abbildung 6.11: Prozedur zur Ableitung der potenziellen Verdunstung nach Haude (Ausschnitt) an einen Standort gebunden sind. Diese Art von Methoden sind standortbezogen, das heißt sie berechnen Werte für einen Standort. Dass diese Werte anschließend für die gesamte dem Standort zugeordnete Fläche gelten ist dabei irrelevant, da die dem Standort zugeordneten Daten für diese Fläche repräsentativ sind. Aus dem Modell der Informationsebene Boden ist ersichtlich, dass einer Instanz der Klasse BodenProfil eine Instanz der Klasse Boden und eine oder mehrere Instanzen der Klasse BodenSchicht zugeordnet sind. Die Attribute der Klasse BodenProfil werden aus Attributen dieser beiden Klassen abgeleitet. Es werden also mehrere Klassen einer Informationsebene miteinander verknüpft. Im Einzelnen sind in der Informationsebene Boden für ein Bodenprofil die effektive Durchwurzelungstiefe We (im Gegensatz zur Methode für einen Bodenhorizont werden hier alle Horizonte des Bodenprofils betrachtet), die nutzbare Feldkapazität des effektiven Wurzelraumes nFKWe und die mittlere kapillare Aufstiegsrate KRmm zu bestimmen. Hinzu kommen noch Einteilungen der Ergebniswerte in Stufen. Abbildung 6.12 zeigt den Datenfluss für diese Methoden. Die nachfolgenden Abschnitte erläutern die innerhalb der Informationsebene Boden implementierten und durchzuführenden Methoden. 6.2.1 Effektive Durchwurzelungstiefe eines Bodenprofils Die effektive Durchwurzelungstiefe eines Bodenprofils gibt an, wie tief Wurzeln theoretisch in den Boden wachsen können (siehe Abbildung 6.13). Die tatsächliche Tiefe der Durchwurzelung eines Bodens ist noch von anderen Faktoren abhängig, beispielsweise 76 KAPITEL 6. METHODEN Informationsebene Boden abgeleitete Werte Eingangsdaten BodenHorizont BodenProfil * ProfilHorizonte effektive Durchwurzelungstiefe des Bodenprofils Boden * * mittlere kapillare Aufstiegsrate in mm KRmm nutzbare Feldkapazität desn effektiven Wurzelraumes des Bodenprofils nFKWe : geht ein in die Berechnung von * : unter Verwendung statischer Hilfsrelationen Abbildung 6.12: Schematische Darstellung des Datenflusses innerhalb der Informationsebene Boden von der Nutzungsart des Bodens, da verschiedene Pflanzen ihre Wurzeln unterschiedlich tief im Boden verankern. Horizont A effektive Durchwurzelungstiefe des Bodenprofils Horizont B1 Horizont B2 effektive Durchwurzelungstiefe des Horizontes B2 Horizont C Abbildung 6.13: effektive Durchwurzelungstiefe Um die effektive Durchwurzelungstiefe eines Bodenprofils zu bestimmen, werden die effektiven Durchwurzelungstiefen der einzelnen Bodenhorizonte von oben nach unten betrachtet. Ist die effektive Durchwurzelungstiefe eines Bodenhorizontes größer oder gleich seiner Mächtigkeit, so wird die Horizontmächtigkeit zur effektiven Durchwurzelungstiefe des Bodenprofils addiert. In Abbildung 6.13 gilt dies für die Horizonte A und B1. Ist die effektive Durchwurzelungstiefe eines Horizonts kleiner als die Horizontmächtigkeit, so wird die effektive Durchwurzelungstiefe des Horizontes zur effektiven Durchwurzelungstiefe des Bodenprofils addiert (Horizont B2) und die darunter liegenden Horizonte werden nicht mehr betrachtet (Horizont C). Anschaulich ist dies beispielsweise der Fall, wenn im Boden ein Horizont aus Steinen auftritt, durch den die Wurzeln nicht wachsen können. Die in Abbildung 6.14 angegebene Prozedur berechnet die effektive Durchwurzelungstiefe eines Bodenprofils. 6.2. ABLEITUNGEN INNERHALB EINER INFORMATIONSEBENE 77 Zunächst wird ein Cursor definiert. Die Attribute sind die Nummer des Bodenprofils, die Nummern der zugehörigen Instanzen der Klasse BodenHorizont, die effektiven Durchwurzelungstiefen der Horizonte, sowie die obere und untere Tiefe der Horizonte im Boden. Diese Attribute werden durch einen Verbund über drei Tabellen und anschließende Projektion ermittelt. Das Ergebnis der Anfrage wird nach Profilnummer und oberer Horizonttiefe geordnet. Bei der Auswertung des Anfrageergebnisses werden in einer Schleife die einzelnen Tupel betrachtet und die in der Beschreibung der Methode angegebenen Überprüfungen bezüglich Horizontmächtigkeit und effektiver Durchwurzelungstiefe des jeweiligen Horizontes durchgeführt. Die in dieser Prozedur verwendeten Variablen sind APNr für die Nummer des letzten betrachteten Profils und edt zur Zwischenspeicherung der effektiven Durchwurzelungstiefe, damit nur ein schreibender Zugriff pro Bodenprofil auf die Datenbank notwendig ist. In Zeile 27 wird überprüft, ob ein neues Profil betrachtet wird. Ist dies der Fall, so wird der aktuelle Wert von edt dem letzten Bodenprofil (Nummer in APNr) zugewiesen. stop wird auf 0 gesetzt. Diese Variable wird verwendet, um gegebenenfalls Horizonte nicht zu beachten. Ist stop gleich 0, so wird in Zeile 35 die Schichtmächtigkeit des aktuellen Cursortupels mit seiner effektiven Durchwurzelungstiefe verglichen. Ist sie größer, so wird edt der Wert der effektiven Durchwurzelungstiefe des Horizonts zuzüglich der oberen Horizonttiefe zugeordnet. stop wird auf 1 gesetzt und dadurch die nächsten Tupel des Cursors nicht mehr untersucht. Beim nächsten Profilwechsel wir der Wert von edt dem richtigen Profil zugewiesen (Nummer in APNr). Ist in Zeile 35 die Schichtmächtigkeit kleiner als die effektive Durchwurzelungstiefe, so wird edt auf die untere Schichttiefe gesetzt und in Zeile 23 das nächste Tupel geholt. Die Speicherung in edt ist notwendig, da das Schreiben des Wertes in der Datenbank erst beim nächsten Horizontwechsel erfolgt. Nachdem die loop-Schleife beendet ist, ist in edt noch die effektive Durchwurzelungstiefe des letzten betrachteten Bodenprofils vorhanden, die noch nicht geschrieben wurde. APNr enthält die Nummer des letzten Bodenprofils. Die Zeilen 45 bis 47 weisen dem entsprechenden Datensatz diesen Wert zu. In den Zeilen 53 bis 61 werden die Werte der effektiven Durchwurzelungstiefe gegebenenfalls korrigiert, da die effektive Durchwurzelungstiefe einen Wert haben muss, der mindestens 10cm oberhalb des Grundwasserstandes liegt. Hierfür wird ein Verbund der Relationen BodenProfil, Boden und T Grundwasserstufen (Hilfsrelation) gebildet und anschließend die entsprechenden Tupel korrigiert. 78 KAPITEL 6. METHODEN Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 calculate We.sql CREATE OR REPLACE PROCEDURE calculate_We IS -- Anfrage ergibt Bodenprofilnummern, Horizontnummern des -- Bodenprofils mit oberer und unterer Horizonttiefe sowie -- die effektive Durchwurzelungstiefe der Horizonte -- sortiert nach Bodenprofilnummer und oberer Tiefe dr Horizonte CURSOR cur IS SELECT a.BPNr,b.Otief,b.utief,c.HNr,c.We FROM BodenProfil a, ProfilHorizont b, BodenHorizont c WHERE a.BPNr=b.BPNr AND b.HNr=c.HNr ORDER BY a.BPNr,Otief; runner cur%ROWTYPE; APNr INTEGER; stop INTEGER; edt FLOAT; BEGIN APNr:=0; -- Alte Profilnummer STOP:=0; -- =0:weiter summieren, =1:tiefere Horizonte nicht beachten OPEN cur; LOOP FETCH cur INTO runner; EXIT WHEN cur%NOTFOUND; -- Werte fuer We werden gespeichert, wenn ein Profilwechsel -- stattfindet. Wert fuer letztes Profil nach der LOOP-Schleife. IF(APNr!=runner.BPNr) THEN -- Profilnummer geaendert ? UPDATE BodenProfil -- ja -> Wert fuer edt SET We=edt -- letztem Profil zuweisen WHERE BPNr=APNr; STOP:=0; APNr:=runner.BPNr; -- APNr auf aktuelles Profil setzen END IF; IF(STOP=0) THEN -- *0.1 wegen Angaben in cm bzw. dm IF((runner.Utief-runner.Otief)*0.1>=runner.We) THEN edt:=runner.Otief+runner.We*10; STOP:=1; ELSE edt:=runner.Utief; END IF; END IF; END LOOP; -- Letzten Wert schreiben UPDATE BodenProfil SET We=edt WHERE BPNr=APNr; CLOSE cur; COMMIT; -- Korrektur: We min 10 cm ueber Grundwasser UPDATE BodenProfil BP SET BP.We = ( SELECT (TG.min-1)*10 FROM T_Grundwasserstufen TG, Boden B WHERE B.Grundwasserstufe = TG.gws AND B.BNr = BP.BNr) WHERE BP.We > ( SELECT (TG.min-1)*10 FROM T_Grundwasserstufen TG, Boden B WHERE B.Grundwasserstufe = TG.gws AND B.BNr = BP.BNr); END; Abbildung 6.14: Prozedur zur Ableitung der effektiven Durchwurzelungstiefe eines Bodenprofils 6.2. ABLEITUNGEN INNERHALB EINER INFORMATIONSEBENE 79 Abbildung 6.15 zeigt qualitativ die effektive Durchwurzelungstiefe des Untersuchungsgebietes. Hellere Farben entsprechen höherer effektiver Durchwurzelungstiefe, schwarzen Flächen ist der Zahlenwert 0 zugeordnet. Abbildung 6.15: effektive Durchwurzelungstiefe des Untersuchungsgebietes 6.2.2 Nutzbare Feldkapazität des effektiven Wurzelraumes In Abschnitt 6.1.1.3 wurde bereits erläutert, dass die nutzbare Feldkapazität ein Maß für das Vermögen des Bodens ist, Wasser gegen die Schwerkraft und, damit verbunden, im Wasser gelöste (Schad)Stoffe, zurückzuhalten und dieses für die Vegetation zu nutzen. In 6.1.1.3 wurde die nutzbare Feldkapazität aber lediglich für Bodenhorizonte angegeben. Zur Berechnung der nutzbaren Feldkapazität des effektiven Wurzelraums eines Bodenprofils werden die nutzbaren Feldkapazitäten der einzelnen Bodenhorizonte von der Oberfläche bis zum Horizont, in dem die effektive Durchwurzelungstiefe endet, aufaddiert. Die Prozedur hierzu ist in Abbildung 6.16 dargestellt. Innerhalb einer äußeren updateAnweisung werden die nutzbaren Feldkapazitäten aufsummiert und anschließend dem entsprechenden Tupel der Relation Bodenprofil zugeordnet. 80 KAPITEL 6. METHODEN Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 calculate nFKWe.sql CREATE OR REPLACE PROCEDURE calculate_nFKWe IS BEGIN UPDATE BodenProfil BP SET nFKWe = ( -- nutzbare Feldkapazitaeten B.nFK der einzelnen -- BodenHorizonte B werden bis zur effektiven -- Durchwurzelungstiefe We des Bodenprofils BP -- aufsummiert. Faktor 0.1 wg. unterschiedlicher -- Einheiten (cm bzw. dm) SELECT SUM(B.nfk*(PH.Utief-PH.otief)*0.1) FROM BodenHorizont B, ProfilHorizont PH WHERE BP.bpnr=PH.bpnr AND B.hnr=PH.hnr AND PH.otief*0.1<BP.We GROUP BY BP.bpnr); END; Abbildung 6.16: Prozedur zur Ableitung der nutzbaren Feldkapazität des effektiven Wurzelraums Abbildung 6.19 zeigt qualitativ die nutzbare Feldkapazität des effektiven Wurzelraumes des Untersuchungsgebietes. Dabei entsprechen hellere Farben höheren nutzbaren Feldkapazitäten des effektiven Wurzelraums. 6.2.3 Ableitung der mittleren kapillaren Aufstiegsrate Der kapillare Aufstieg ist ein Maß für die Versorgung der Vegetation mit Grundwasser während Trockenzeiten. Sie wird in Millimeter pro Tag angegeben. In die Ableitung der Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 -- Berechnet die Grenzflurabstand. -- Grenzflurabstand = Abstand zwischen Untergrenze -- der effektiven Ducrhwurzelungstiefe und dem -- Grundwasser. Falls Grenzflurabstand < 2 wird er -- fuer weitere Berechnungen auf 2 gesetzt CREATE OR REPLACE PROCEDURE calculate_za IS BEGIN UPDATE BodenProfil BP SET BP.za = ( SELECT ROUND(HT.min-BP.We*0.1) FROM Boden B, T_Grundwasserstufen HT WHERE BP.BNr=B.BNr AND B.Grundwasserstufe = HT.gws; calculate za.sql UPDATE BodenProfil BP SET BP.za = 2 WHERE BP.za < 2; END; Abbildung 6.17: Prozedur zur Ableitung des Grenzflurabstands kapillaren Aufstiegsrate gehen die Bodenart des Bodens, die Lagerungsdichte des Bo- 6.2. ABLEITUNGEN INNERHALB EINER INFORMATIONSEBENE 81 denhorizonts in dem die effektive Durchwurzelungstiefe endet, sowie der Abstand zwischen dem Grundwasser und der effektiven Durchwurzelungstiefe ein. Dieser Abstand, Grenzflurabstand genannt, wird zunächst mit der Prozedur aus Abbildung 6.17 berechnet. Hierzu wird aus der Relation Boden, die zu dem betrachteten Bodenprofil gehört die Grundwasserstufe ermittelt und anschließend aus einer Hilfstabelle die obere Grenze dieser Grundwasserstufe ausgelesen (Zeilen 19 und 11). Hiervon wird die effektive Durchwurzelungstiefe des Bodenprofils subtrahiert und das Ergebnis in za gespeichert. Ist der ermittelte Grenzflurabstand kleiner als zwei (Dezimeter), so wird er per Definition auf zwei gesetzt. Dies ist für die Ableitung der mittleren kapillaren Aufstiegsrate notwendig. Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 calculate KR.sql CREATE OR REPLACE PROCEDURE calculate_KR IS BEGIN UPDATE BodenProfil BP SET BP.KRmm = ( SELECT HT.KRmm FROM BodenHorizont H,ProfilHorizont PH, HT_KRmm HT WHERE PH.BPNr = BP.BPNr AND -- und Bodenschichten bestimmen PH.HNr = H.HNr AND -- Horizont an unterer Grenze der PH.Otief < BP.We AND -- effektiven Durchwurzelungstiefe PH.Utief >= BP.We AND -- bestimmen H.LDStufe = HT.LDStufe AND -- LDStufe, Bodenart des HoriH.Bodenart = HT.Bodenart AND -- zonts fuer Hilfstabelle HT.za = BP.za); -- abstand gws,we UPDATE BodenProfil BP SET BP.KRStufe = ( SELECT TKR.KRStufe FROM T_KRStufe TKR WHERE BP.KRmm > TKR.min AND BP.KRmm <= TKR.max); END; Abbildung 6.18: Prozedur zur Ableitung der mittleren kapillaren Aufstiegsrate Abbildung 6.18 zeigt ihre Ableitung. Es werden mithilfe der Relationen BodenProfil und ProfilHorizont der Horizont, in dem die effektive Durchwurzelungstiefe endet sowie seine Lagerungsdichte bestimmt. Unter weiterer Verwendung des Grenzflurabstands und der Bodenart des Profils wird aus einer Hilfsrelation (HT KRmm) die kapillare Aufstiegsrate in Millimetern pro Tag ausgelesen. Die äußere update-Anweisung ordnet die Werte den jeweiligen Tupeln zu. Abbildung 6.20 zeigt qualitativ die mittlere kapillare Aufstiegsrate des Untersuchungsgebietes. Auch hier entsprechen hellere Farben einem höheren Wert. Weißen Flächen konnte allerdings kein Wert zugewiesen werden, da Eingangsdaten nicht vorhanden waren. 82 KAPITEL 6. METHODEN Abbildung 6.19: Nutzbare Feldkapazität des Untersuchungsgebietes Abbildung 6.20: KRmm des Untersuchungsgebietes 6.3. VERSCHNEIDUNG VON INFORMATIONSEBENEN 6.3 83 Verschneidung von Informationsebenen Neben den bisher vorgestellten Methoden, die Daten innerhalb einer Informationsebene bzw. einer Klasse miteinander verknüpfen und an ein Objekt oder einen Standort mit zugeordneter quasi-homogener Fläche gebunden sind, existieren weitere Methoden, die Daten mehrerer Informationsebenen zueinander in Beziehung setzen. Für diese Methoden müssen die geometrischen Informationen beachtet und neue Geometrien berechnet werden. Diese Berechnung neuer Geometrien wird als Verschneidung bezeichnet und bildet den Gegenstand der folgenden Unterabschnitte. 6.3.1 Vorbereitungen zur Kartenerzeugung In der Geografie werden Informationen über Eigenschaften eines Untersuchungsgebietes häufig in Form von Karten repräsentiert. Die Kartenerstellung fällt in den Bereich der Kartographie. Diese ermöglicht Aussagen über alle Objekte, die einen räumlichen ” Bezug aufweisen und sich durch mindestens ein weiteres Merkmal (Attribut) unterscheiden lassen“ 1 . Unter Objekten werden hierbei im weitesten Sinne konkrete Gegenstände (Gebäude, Flüsse, Flächen) verstanden, denen (abstrakte) Sachverhalte als Eigenschaften zugeordnet sind. Weiterhin benötigen Objekte einen räumlichen Bezug, um ihre Eigenschaften in Karten darzustellen. Der räumliche Bezug ist gewöhnlich entweder durch Vektoren gegeben, die die Lage eines Objektes beschreiben, oder durch Rasterpunkte, denen ein Objekt (oder ein Merkmal eines Objektes) zugeordnet ist (Vgl. Kapitel 2). Die Methode zur Ableitung der Sickerwasserrate verknüpft Informationen vier gegebener Informationsebenen. Die räumliche Lage der Objekte ist für die Informationsebenen Boden, Nutzung und Klima durch Polygone (Vektordaten), für die Informationsebene Relief durch Rasterdaten gegeben. Es gibt demnach drei mögliche Kombinationen von Verschneidungen: • Verschneidung von Vektordaten mit Vektordaten (Ergebnis im Vektorformat) • Verschneidung von Rasterdaten mit Vektordaten (Ergebnis im Rasterformat) • Verschneidung von Rasterdaten mit Rasterdaten (Ergebnis im Rasterformat) Diese verschiedenen Arten von Verschneidungen werden in den folgenden Unterabschnitten erläutert. Zunächst müssen jedoch Relationen für die Aufnahme der Verschneidungsergebnisse angelegt werden. Bei der Verschneidung zweier Informationsebenen werden Tripel von Informationen erhalten, die das Ergebnis der Verschneidung repräsentieren. Ein Tripel besteht aus einem geometrischen Objekt und zwei Sachinformationen. Die Sachinformationen verknüpfen das neue geometrische Objekt mit den Sachdaten der verschnitten 1 G.Hake, D.Grünreich, Kartographie [12] S.7 84 KAPITEL 6. METHODEN Informationsebenen und sind gewöhnlich Verweise auf Schlüsselattribute von Objekten. Eine Relation, die das Ergebnis einer Verschneidung zweier Informationsebenen aufnimmt, hat daher die in Abbildung 6.21 angegebene Struktur. Geometrie 1 2 3 4 5 6 7 8 Sachdatum Informationsebene 1 Sachdatum Informationsebene 2 Objekt 1 Objekt4 Objekt 1 Objekt7 Objekt 2 Objekt5 Objekt 3 Objekt4 Objekt 4 Objekt2 Objekt 4 Objekt3 Objekt 5 Objekt1 Objekt 5 Objekt6 Abbildung 6.21: Ergebnistabelle für Verschneidungen Die erste Zeile der Tabelle besagt, dass die neu berechnete Geometrie 1 die Eigenschaften von Objekt 1 der einen und die Eigenschaften von Objekt 2 der anderen verschnittenen Informationsebene besitzt. Um nun weitere Sachdaten auf den neu erzeugten Geometrien zu berechnen, deren Ableitungsprozedur Eingangsdaten der beiden verschnittenen Informationsebenen benötigt, werden einfach über die Schlüsselattribute die entsprechenden Sachinformationen der Objekte referenziert und die neuen Werte daraus abgeleitet. Dies eignet sich allerdings nur für Einmalberechnungen, deren Ergebnisse anschließend wieder verworfen werden. Um die Ergebnisse von Berechnungen auf Daten verschnittener Informationsebenen dauerhaft in der Datenbank zu speichern, bedarf es weiterer Attribute in der Tabelle, die das Ergebnis der Verschneidung repräsentiert. Diese hinzuzufügenden Attribute nehmen anschließend die Werte abgeleiteter Informationen auf. In der vorliegenden Arbeit werden mehrere Relationen für die Aufnahme von Ergebnissen von Verschneidungsoperationen angelegt. Zusätzlich zu einem geometrischen Attribut besitzen sie weitere Attribute, um auf den verschnittenen Geometrien neue Sachdaten abzuleiten. Beispielhaft wird eine Relation angelegt, die das Ergebnis der Verschneidung der Informationsebenen Boden und Nutzung im Vektorformat aufnimmt und innerhalb dieser neu erzeugten verschnittenen Informationsebene abzuleitende Werte speichert. Die Definition dieser Relation ist in Abbildung 6.22 dargestellt. FNr ist das Schlüsselattribut der Relation, Geometrie dient der Speicherung der neuen Geometrien, die durch den Verschneidungsprozess berechnet werden. SNrBoden und SNrNutzung sind Fremdschlüsselattribute, die Objekte der Relationen BodenStandort und NutzungStandort referenzieren, die für die in Geometrie abgelegte Geometrie gültig sind. Mithilfe der durch diese Fremdschlüssel referenzierten Objekte werden die Werte der weiteren Attribute Dauer des kapillaren Aufstiegs (TA), mittlere kapillare Aufstiegsrate (KA) und pfanzenverfügbares Bodenwasser (WPFL) abgeleitet. Die Prozeduren zur Berechnung dieser drei Attribute benötigen als Eingangsdaten Informationen der Informationsebene Nutzung und der Informationsebene Boden. Die Ableitungsprozeduren für 6.3. VERSCHNEIDUNG VON INFORMATIONSEBENEN 85 CREATE TABLE FNr Geometrie SNrBoden SNrNutzung TA KA WPFL CONSTRAINT CONSTRAINT VBN ( -- Verschnitt Boden Nutzung INTEGER, MDSYS.SDO_GEOMETRY, INTEGER, INTEGER, FLOAT, FLOAT, FLOAT, PK_VBN PRIMARY KEY (FNr), FK_VBN_SNrBoden FOREIGN KEY (SNrBoden) REFERENCES BodenStandort(SNr), CONSTRAINT FK_VBN_SNrNutzung FOREIGN KEY (SNrNutzung) REFERENCES NutzungStandort(SNr) ); Abbildung 6.22: Definition einer Relation zur Aufnahme des Verschneidungsergebnisses der Informationsebenen Boden und Nutzung diese Sachattribute werden in Abschnitt 6.5 vorgestellt. Für Verschnitte mit weiteren Informationsebenen müssen Relationen für alle beteiligten Informationsebenen Fremdschlüsselattribute für die Sachdaten für die an der Verschneidung beteiligten Geometrien besitzen, sowie Attribute für abzuleitende Daten. Strukturell entsprechen sie aber der angegebenen Relation. Alternativ können auch die Fremdschlüsselattribute entfernt und durch die Attribute des durch den Fremdschlüssel referenzierten Objektes ersetzt werden. Dies führt aber zu einer redundanten Datenspeicherung, insbesondere für Relationen, die die Ergebnisse von Verschneidungen im Rasterformat aufnehmen und die Attribute für jeden Rasterpunkt abspeichern müssen. Die redundante Speicherung kann allerdings trotzdem angebracht sein, beispielsweise wenn dadurch bei Anfragen die Verbundbildung mehrerer sehr umfangreicher Relationen vermieden werden kann. Die für Verschneidungen im Rasterformat anzulegenden Ergebnisrelationen haben prinzipiell dieselbe Struktur wie die Ergebnisrelationen im Vektorformat, da sie ebenfalls ein geometrisches Objekt, in diesem Fall einen Punkt, und Sachdaten speichern. Beipielhaft ist in Abbildung 6.23 die Definition der Ergebnisrelation für die Verschneidung der vier an der Ableitung der Methode zur Berechnung der Sickerwasserrate beteiligten Informationsebenen für das Rasterformat dargestellt. Der Name RasterAll10 deutet an, dass dieses Raster für einen Rasterpunktabstand von 10 Metern verwendet wird. Die Relation RasterAll10 besitzt als Schlüsselattribut PNr. Dieses Attribut dient auch der Referenzierung der Koordinaten des Punktes in der Relation Raster10 (siehe Abschnitt 6.3.3) und ist daher ebenfalls als Fremdschlüssel definiert. Die Attribute SNrBoden, SNrNutzung, SNrKlima und PNrRelief werden eingesetzt, um auf Objekte der Relationen BodenStandort, NutzungStandort, KlimaStandort und Relief10 zu verweisen. Relief10 ist eine Relation, die das Relief für einen Rasterpunktabstand von 10 Metern enthält. Sie wird in Abschnitt 6.3.4 näher betrachtet. Die weiteren Attribute sind die in dieser neuen Informationsebene abzuleitenden Werte. Zusätzlich zur vorigen Tabellendefinition ist 86 KAPITEL 6. METHODEN CREATE TABLE RasterAll10 ( PNr INTEGER, SNrBoden INTEGER, SNrNutzung INTEGER, SNrKlima INTEGER, PNrRelief INTEGER, TA FLOAT, -- Dauer des kapillaren Aufstiegs KA FLOAT, -- mittlere kapillare Aufstiegsdauer WPFL FLOAT, -- pflanzenverfuegbares Bodenwasser GWN FLOAT, -- Sickerwasserrate CONSTRAINT PK_RasterAll10 PRIMARY KEY (PNr), CONSTRAINT FK_RA10_Raster FOREIGN KEY (PNr) REFERENCES Raster10(PNr), CONSTRAINT FK_RA10_Boden FOREIGN KEY (SNrBoden) REFERENCES BodenStandort(SNr), CONSTRAINT FK_RA10_Nutzung FOREIGN KEY (SNrNutzung) REFERENCES NutzungStandort(SNr), CONSTRAINT FK_RA10_Klima FOREIGN KEY (SNrKlima) REFERENCES KlimaStandort(SNr), CONSTRAINT FK_RA10_Relief FOREIGN KEY (PNrRelief) REFERENCES Relief10(PNr) ); Abbildung 6.23: Definition einer Relation zur Aufnahme von Verschneidungsergebnissen mehrerer Informationsebenen im Rasterformat hier lediglich das Attribut GWN hinzugefügt, das die Sickerwasserrate aufnimmt. Die nun folgenden Abschnitte untersuchen die Verschneidungen verschiedener Datenformate unter Einsatz des Spatial Cartridge von Oracle8i. 6.3.2 Verschneidung von Vektordaten mit Vektordaten Die geometrischen Informationen der Informationsebenen Boden und Nutzung liegen als Polygone vor. Für die Verschneidung der Polygone bietet das Spatial Cartridge von Oracle8i die Methode MDSYS.SDO GEOM.SDO POLY INTERSECTION an. Angewendet auf zwei Polygone berechnet diese Methode ein Polygon, das den Rand des Durchschnitts der von den ursprünglichen Polygonen umschlossenen Flächen beschreibt. Diese Methode kann aber ebenso zwei Mengen von Polygonen miteinander verschneiden. Die Verschneidungsberechnung erfolgt dann mithilfe einer geschachtelten Schleife. Abbildung 6.24 zeigt die Methode zur Verschneidung der Informationsebenen Boden und Nutzung. Die Zeilen 1 bis 5 der Methode definieren eine Sequenz, deren Werte als Primärschlüssel der verschnittenen Geometrien eingesetzt werden. In Zeile 9 wird ein Cursor definiert, der zur Abarbeitung des Ergebnisses der Anfrage der Zeilen 10 bis 17 benutzt wird. Die Anfrage selbst ist aus zwei geometrischen Operationen zusammengesetzt. In Zeile 12 werden mittels der Methode MDSYS.SDO GEOM.SDO POLY INTERSECTION() die Durchschnitte von Polygonpaaren berechnet, die durch den Operator MDSYS.SDO FILTER() 6.3. VERSCHNEIDUNG VON INFORMATIONSEBENEN 87 aus der Gesamtmenge der Polygonpaare vorselektiert werden. Der Operator SDO FILTER() realisiert einen Primärfilter auf den Polygonen. Er wird eingesetzt, da jedes Polygon der Informationsebene Boden mit den meisten Polygonen der Informationsebene Nutzung einen leeren Durchschnitt hat und umgekehrt. Um die Anzahl der relativ teuren Verschneidungsberechnungen, die durch die Methode MDSYS.SDO GEOM.SDO POLY INTERSECTION() realisiert sind, zu reduzieren wird daher dieser Primärfilter eingesetzt, der aus der Gesamtmenge der Polygonpaare eine Kandidatenmenge von Polygonpaaren liefert, die sich eventuell schneiden und die Polygone, die sich definitiv nicht schneiden, aussortiert. Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 DROP SEQUENCE VBNnummer; calc VBN.sql CREATE SEQUENCE VBNnummer START WITH 1 INCREMENT BY 1; CREATE OR REPLACE PROCEDURE calc_VBN IS CURSOR cur IS SELECT B.SNr AS SNrBoden, N.SNr AS SNrNutzung, MDSYS.SDO_GEOM.SDO_POLY_INTERSECTION(B.Geometrie,D.diminfo, N.Geometrie,D.diminfo) AS Geometrie FROM BodenFlaeche B, NutzungFlaeche N, SDO_GEOM_METADATA D WHERE D.table_name=’BodenFlaeche’ and -- beide dieselben Dimensionen MDSYS.SDO_FILTER(B.Geometrie,N.Geometrie, ’querytype=join’)=’TRUE’; 18 19 runner cur%ROWTYPE; 20 21 BEGIN 22 OPEN cur; 23 LOOP 24 FETCH cur INTO runner; 25 EXIT WHEN cur%NOTFOUND; 26 27 IF(runner.Geometrie IS NOT NULL) THEN 28 INSERT INTO VBN(FNr,SNrBoden,SNrNutzung,Geometrie) 29 VALUES (VBNnummer.NEXTVAL,runner.SNrBoden, runner.SNrNutzung,runner.Geometrie); 30 END IF; 31 END LOOP; 32 CLOSE cur; 33 END; 34 / Abbildung 6.24: Verschneidung von Polygonen Die Funktionsweise des Primärfilters ist dabei wie folgt: Bei der Indexierung werden Werte für die Parameter SDO LEVEL und SDO NUMTILES angegeben. Diese bestimmen die Anzahl der Teilungen für das fixe und das hybride Indexieren. Zu jeder Kachel werden die Geometrien abgespeichert, die mit der Kachel interagieren. Haben zwei Polygone keine gemeinsame Kachel, so schneiden sie sich nicht und können aussortiert werden. 88 KAPITEL 6. METHODEN Statt des Primärfilters MDSYS.SDO FILTER() könnte auch ein weiterer Operator, MDSYS.SDO RELATE(), verwendet werden. Dieser implementiert sowohl einen Primär-, als auch einen Sekundärfilter, d.h. durch den Einsatz von SDO RELATE() könnten genau die Polygonpaare ausgewählt werden, die sich tatsächlich schneiden. Diese Methode führt aber bereits Berechnungen auf den Objekten aus, die anschließend von der Methode MDSYS.SDO GEOM.SDO POLY INTERSECTION() noch einmal durchgeführt werden. Die Verschneidung würde daher wesentlich mehr Zeit benötigen. Das Ergebnis dieser Verschneidungsmethode für die Informationsebenen Boden und Nutzung zeigt Abbildung 6.25. Hierbei wurden 78 Bodenpolygone mit 413 Nutzungspolygonen verschnitten. Insgesamt wurden dabei 1035 neue Polygone erzeugt. Abbildung 6.25: Verschnitt von Boden und Nutzung im Vektorformat Zur besseren Anschauung sind in den Abbildungen 6.26. 6.27 und 6.28 nur die Polygone der Informationsebenen Boden und Nutzung, sowie die berechneten Polygone des Verschnitts dargestellt. Abbildung flächen 6.26: Boden- Abbildung 6.27: Nutzungs- Abbildung 6.28: Verschneiflächen dungsresultat 6.3. VERSCHNEIDUNG VON INFORMATIONSEBENEN 89 Den einzelnen Flächen der verschnittenen Geometrie werden die Standortschlüssel der ursprünglichen Informationsebenen angeheftet, um anschließend die für Berechnungen notwendigen Werte zu referenzieren. Das Schema zur Berechnung der Attributwerte dieser verschnittenen Geometrie entspricht prinzipiell dem der Methoden zur Ableitung neuer Attributwerte innerhalb einer Informationsebene. Dies ist auch daraus ersichtlich, dass durch die Verschneidung eine neue, zwei Informationsebenen zusammenfassende, Informationsebene erzeugt wurde. 6.3.3 Verschneidung von Raster- und Vektordaten Die Verschneidung von Raster- und Vektordaten entspricht einem Punkt-in-PolygonTest für jeden einzelnen Rasterpunkt. Hierbei wird den Rasterpunkten zusätzlich zu den bereits vorhandenen Attributen eine Referenz auf das Objekt zugeordnet, das durch das Polygon, in dem der Rasterpunkt liegt, bestimmt ist. Alternativ kann jedem Rasterpunkt auch die Menge der Attribute des bestimmten Objektes hinzugefügt werden. Das Ergebnis dieser Verschneidung liegt demnach im Rasterformat vor. Theoretisch ist es auch denkbar, die Rasterdaten ins Vektorformat zu transformieren und die Verschneidung im Vektorformat durchzuführen. Dies führt aber in den meisten Fällen zu einer Vielzahl kleinster Flächen, da das Rasterdatenformat üblicherweise bei der Erfassung kontinuierlicher Phänomene verwendet wird. Außerdem müssten zu dieser Transformation quasihomogene Flächen bezüglich der Attributwerte von Rasterpunkten bestimmt werden, was auf die Problematik der Nachbarschaftsbeziehungen führt (siehe Kapitel 3). In den folgenden Unterabschnitten wird erläutert, wie Vektordaten ins Rasterformat konvertiert werden. Dies entspricht der Verschneidung einer Rasterkarte ohne weitere Attribute mit einer Vektorkarte. Da einer Rasterkarte aber beliebig weitere Attribute hinzugefügt werden können, wird dadurch auch der allgemeine Fall der Verschneidung einer Informationsebene, deren Werte im Rasterformat aufgenommen sind, mit einer Informationsebene, deren Werte im Vektorformat vorliegen, behandelt. Der einzige Unterschied ist, dass zusätzlich zunächst eine Raster erzeugt werden muss, dessen Rasterpunkten anschließend Werte der Vektorkarte zugewiesen werden. Die Konvertierung von im Vektorformat vorliegenden Daten ins Rasterformat erfolgt in zwei Schritten. Zunächst muss ein Raster erzeugt werden und anschließend wird eine Verschneidung der Punktgeometrien des Rasters mit den Polygonen der Vektorkarte durchgeführt. 6.3.3.1 Rastergenerierung In diesem Abschnitt wird beispielhaft die Konvertierung der Polygone der Informationsebene Boden in ein Raster durchgeführt. Innerhalb der Informationsebene Boden existieren bei den vorhandenen Daten 78 Polygone. Das zu erzeugende Raster soll eine 90 KAPITEL 6. METHODEN Auflösung von 300×300 Punkten, also 90000 Punkte, besitzen. Dies entspricht einem realen Rasterpunktabstand von 10 Metern. Ein Raster besteht aus einer Menge an Punkten. Die Punkte können in Spatial als Objekte vom Typ MDSYS.SDO GEOMETRY abgespeichert werden. Im Rahmen dieser Arbeit wurden mehrere Relationen für Rasterdaten mit einer Auflösung von 300×300 Punkten angelegt. Um nicht für jede Relation die Punktkoordinaten abzuspeichern, wurde eine Relation Raster10 erzeugt, die die Koordinaten der Rasterpunkte und zum Zugriff auf einzelne Punkte ein Primärschlüsselattribut PNr besitzt. Diese Tabelle wird wie folgt angelegt: CREATE TABLE Raster10 ( PNr INTEGER, Rasterpunkt MDSYS.SDO_GEOMETRY, CONSTRAINT PK_Raster10 PRIMARY KEY (PNr) ); Nachdem eine Relation für ein Raster angelegt ist, werden in diese Relation die Rasterpunkte eingetragen. Abbildung 6.29 zeigt, wie dieses Einfügen implementiert ist. Als Beispiel dient die Relation Raster10. Listing : create Rasterpunkte.sql 1 DECLARE 2 x FLOAT; y FLOAT; 3 xmin FLOAT; ymin FLOAT; 4 xmax FLOAT; ymax FLOAT; 5 dx FLOAT; dy FLOAT; 6 7 BEGIN 8 xmin:=357000000; xmax:=357300000; -- minimale und maximale Koordinaten 9 ymin:=576350000; ymax:=576650000; -- des Untersuchungsgebietes 10 dx:=1000; dy:=1000; -- Rasterpunktabstand = 10m 11 x:=xmin+dx/2; y:=ymin+dy/2; -- Rasterpunkte nicht an Rand 12 13 WHILE (x<xmax AND y<ymax) 14 LOOP 15 INSERT INTO Raster10 VALUES 16 ( Pnumber.NEXTVAL, MDSYS.SDO_GEOMETRY(1,NULL, 17 MDSYS.SDO_POINT_TYPE(x,y,NULL), 18 NULL,NULL) ); 19 x:=x+dx; 20 IF(x>=xmax AND y<ymax) THEN 21 x:=xmin+dx/2; y:=y+dy; 22 END IF; 23 END LOOP; 24 END; Abbildung 6.29: Einfügen von Rasterpunkten in die Relation Raster10 In den Zeilen 1 bis 5 werden Variablen deklariert, deren Initialisierung in den Zeilen 8 bis 11 folgt. Sie geben die Ausdehnungen sowie den Punktabstand des Rasters an. In der Schleife der Zeilen 13 bis 23 werden anschließend die Koordinaten der einzelnen Rasterpunkte und der Wert ihres Primärschlüsselattributs PNr in die Relation Raster10 eingefügt. Pnumber ist als sequence definiert, so dass die Werte von PNr eindeutig sind. Innerhalb der insert into-Anweisung wird für jeden Rasterpunkt ein Objekt vom Typ MDSYS.SDO GEOMETRY erzeugt. Bei der Zuweisung von Werten an dieses Objekt 6.3. VERSCHNEIDUNG VON INFORMATIONSEBENEN 91 wird in Zeile 16 durch die 1 der Typ des Objektes (POINT) festgelegt. Der nachfolgende null-Wert wird SDO SRID (von Spatial bisher noch nicht unterstützt) zugewiesen. Es folgt die Erzeugung eines Objektes vom Typ MDSYS.SDO POINT mit seinen durch x und y gegebenen Koordinatenwerten. Der dritte Wert null ist für eine mögliche z-Komponente reserviert. Die beiden letzten Attribute innerhalb der Typdefinition (MDSYS.SDO ELEM INFO bzw. MDSYS.SDO ORDINATES) sind auf null gesetzt, da die Geometrie lediglich aus einem Punkt besteht. Es sei hier noch einmal darauf hingewiesen, dass durch die Zuweisung eines Wertes ungleich null an eines der beiden letzten Attribute der Wert für MDSYS.SDO POINT von Spatial ignoriert würde. Nach der Erzeugung einer Relation für das Raster und dem Einfügen der Rasterpunkte in diese Relation werden Informationen über die Ausdehnungen des Rasters in die Relation SDO GEOM METADATA eingetragen. Dies ist notwendig, damit von Spatial Indexe auf den räumlichen Daten und Berechnungen auf diesen Attributen durchgeführt werden können. Sind die minimalen und maximalen Ausdehnungen wie im vorliegenden Fall bekannt, so kann dies durch ein einfaches SQL-Kommando ausgeführt werden. INSERT INTO SDO_GEOM_METADATA VALUES (’Raster10’,’Rasterpunkt’, MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT(’X’,357000000,357300000,0), MDSYS.SDO_DIM_ELEMENT(’Y’,576350000,576650000,0))); Die übergebenen Parameter Raster10 bzw. Rasterpunkt bezeichnen die Relation mit einem räumlichen Attribut und das räumliche Attribut der Relation selbst. Der dritte Parameter ist ein Objekt vom Typ MDSYS.SDO DIM ARRAY, das aus zwei weiteren Objekten vom Typ MDSYS.SDO DIM ELEMENT zusammengesetzt ist. Diese Elemente enthalten die Bezeichnungen für die Dimensionen (X-Dimension bzw. Y-Dimension), den minimalen und maximalen Wert der Geometrien bezüglich dieser Dimension und einen Wert für die Toleranz. Für jede vorhandene Dimension ist hier ein Element vom Typ MDSYS.SDO DIM ELEMENT einzufügen. Für Punktdaten können die Ausdehnungen leicht aus den Geometriedaten selbst bestimmt werden, sodass das Einfügen in die Relation SDO GEOM METADATA auch automatisiert erfolgen könnte. Um beispielsweise den maximalen x-Wert aller in Raster10 enthaltenen Punkte zu bestimmen, genügt die folgende Anfrage: SELECT MAX(R10.Rasterpunkt.SDO_POINT.x) FROM Raster10 R10; Die Benutzung eines Aliasnamens für die Relation Raster10 ist wie bei allen Anfragen an komplexe Objekttypen notwendig. Für geometrische Objekte deren Koordinaten in SDO ORDINATES abgespeichert sind, ist die Bestimmung der Ausdehnungen allerdings nicht so einfach, da SDO ORDINATES vom Typ VARRAY ist. Obwohl dieser Typ ein Array variabler Länge repräsentiert, wird der Zugriff auf einzelne Arrayelemente mittels SQL nicht unterstützt. Die Werte einzelner Arrayelemente können lediglich mithilfe prozeduraler Erweiterungen der Sprache SQL bestimmt werden. Der letzte Schritt bei der Rastergenerierung ist das Anlegen eines räumlichen Index auf der Spalte vom Typ MDSYS.SDO GEOMETRY: 92 KAPITEL 6. METHODEN CREATE INDEX IRASTER ON Raster10(Rasterpunkt) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS(’SDO_LEVEL=6, LAYER_GTYPE=POINT’); Hierbei wird für SDO LEVEL der Wert 6 übergeben, dies entspricht 26 ∗ 26 = 4096 Kacheln. Jeder Kachel sind demnach 90000/4096, also durchschnittlich etwa 22 Rasterpunkte zugeordnet. Bei der Wahl der Indexparameter für einen Index vom Typ MDSYS.SPATIAL INDEX ist darauf zu achten, dass diese für Geometrien, auf denen Berechnungen (beispielsweise Verschneidungen) durchgeführt werden sollen, dieselben Werte haben, um eine optimale Performance zu gewährleisten. Unterscheiden sich die Werte, so wird während der Ausführung von Berechnungen auf diesen Daten intern eine neue Indexierung für die zweite in der Parameterliste der einzelnen Methoden angegebene Geometrie durchgeführt, was die Bearbeitungszeit für die entsprechende Anfrage verlängert. Dies ist zumindest in der Dokumentation von Oracle angegeben. Es wurde allerdings festgestellt, dass bei räumlichen Anfragen auf geometrische Daten, die mit einem unterschiedlichen Wert für SDO LEVEL indexiert sind, die Anfragebearbeitung mit der Fehlermeldung ORA-13227: SDO LEVEL values for the two index tables do not match abbricht. Ist nur auf einer der Relationen ein räumlicher Index definiert, so tritt die Fehlermeldung nicht auf. 6.3.3.2 Wertzuweisung an Rasterpunkte Die Relation Raster10 besitzt die zwei Attribute PNr und Rasterpunkt. Um einzelnen Rasterpunkten Werte zuzuweisen wird nun eine neue Relation RasterBoden10, wie in Abbildung 6.30 angegeben, definiert. Die Tupel dieser Relation ordnen Rasterpunkten Standortnummern (SNrBoden) der Relation BodenStandort zu. Die in SNrBoden zu speichernde Nummer ist die Standortnummer des Messstandortes, der repräsentativ für die quasi-homogene Fläche ist, in der der Rasterpunkt liegt. CREATE TABLE RasterBoden10 ( PNr INTEGER, SNrBoden INTEGER, CONSTRAINT PK_RasterBoden10 PRIMARY KEY (PNr), CONSTRAINT FK_RasterBoden10_PNr FOREIGN KEY (PNr) REFERENCES Raster10(PNr), CONSTRAINT FK_RasterBoden10_SNr FOREIGN KEY (SNrBoden) REFERENCES BodenStandort(SNr) ); Abbildung 6.30: Definition der Relation RasterBoden10 In der Relation RasterBoden10 ist PNr Fremdschlüssel auf die vorher erzeugte Relation Raster10, die die Lageinformationen der einzelnen Rasterpunkte bereithält. Die räumlichen Informationen der Relation RasterBoden10, sind also nur indirekt über die Relation Raster10 zu erhalten. 6.3. VERSCHNEIDUNG VON INFORMATIONSEBENEN 93 Nachdem diese Relation angelegt ist, wird sie initialisiert, indem durch INSERT INTO RasterBoden10 ( SELECT PNr,null FROM Raster10); einfach die Nummern der in Raster10 vorhandenen Punkte übernommen werden. Dies ist notwendig, um in der folgenden Zuweisung von Standortnummern der Informationsebene Boden an die einzelnen Tupel der Relation RasterBoden10 ausschließlich update- und keine insert-Kommandos zu verwenden. Würde in der in Abbildung 6.31 angegebenen Prozedur insert verwendet, so wäre eine Verletzung der Primärschlüsselbedingung die Folge, da aufgrund von Berechnungsungenauigkeiten einzelnen Rasterpunkten mehrere Standorte zugewiesen werden. Die Zuweisung der Standortnummern der Informationsebene Boden an die einzelnen Rasterpunkte erfolgt dann wie in der in Abbildung 6.31 angegebenen Prozedur. Listing : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 CREATE OR IS CURSOR IS SELECT FROM WHERE calc RasterBoden10.sql (Ausschnitt) REPLACE PROCEDURE calc_RasterBoden10 cur a.PNr AS PNr, b.SNr AS SNr Raster10 a , BodenFlaeche b MDSYS.SDO_RELATE(a.Rasterpunkt,b.Geometrie, ’mask=ANYINTERACT querytype=JOIN’)=’TRUE’; runner cur%ROWTYPE; BEGIN OPEN cur; LOOP FETCH cur INTO runner; EXIT WHEN cur%NOTFOUND; UPDATE RasterBoden10 SET SNrBoden = runner.SNr WHERE PNr = runner.PNr; -- update von RasterBoden10 -- unter Verwendung -- der PNr aus Raster10 END LOOP; CLOSE cur; END; Abbildung 6.31: Zuordnung von Standortnummern der Bodenstandorte an Rasterpunkte In dieser Prozedur wird in Zeile 3 ein Cursor für die Abarbeitung der Anfrage der Zeilen 5 bis 8 angelegt, die den wesentlichen Teil dieser Prozedur ausmacht. Die select-Anweisung bildet einen Verbund der Relationen Raster10 und BodenFlaeche. Dieser Verbund wird über alle Tupel der beiden Relationen gebildet. Dies ist durch den Parameter join, der dem Operator MDSYS.SDO RELATE() übergeben wurde, bestimmt. Dieser Operator liefert true zurück, falls zwei Elemente, hier also ein Rasterpunkt und eine Fläche irgendwie (anyinteract) miteinander interagieren. Alternativen sind hier contains bzw. inside als Parameterwerte. Dann würde true zurückgeliefert werden, falls der Rasterpunkt innerhalb einer durch ein bestimmtes Polygon beschriebenen Geometrie (und nicht auf dem Rand) 94 KAPITEL 6. METHODEN liegt. Punkte auf der Grenzlinie zweier Polygone werden zwei Werte zugewiesen. Daher wird auch eine update-Anweisung in Zeile 18 verwendet und kein insert. Der letzte einem Punkt zugewiesene Wert für SNrBoden wird also dauerhaft gespeichert. Aufgrund von Ungenauigkeiten in der Berechnung kann der Effekt, dass einzelnen Rasterpunkten mehrere Standortnummern zugeordnet werden, auch nicht durch das Setzen des Toleranzwertes für beide Geometrien in der Relation SDO GEOM METADATA auf 0 sowie eine Änderung des Parameters anyinteract in inside, beseitigt werden. Es werden immer noch einzelnen Punkten mehrere Standortwerte zugeordnet. Abbildung 6.32: Informationsebene Boden Abbildung 6.33: Informationsebene Boden im Rasterformat im Vektorformat Am Ende dieser Prozedur sollten den Rasterpunkten Bodenstandorte zugeordnet sein, über die die Attribute des Bodens ermittelt werden können. Dies ist allerdings nicht für alle Rasterpunkte der Fall. Abhängig von der Wahl der Indexparameter und dem Toleranzwert werden für die Informationsebene Boden zwischen 65000 und 85000 Rasterpunkten (von 90000) Standorte zugeordnet. Eine Diskussion dieses Fehlers und über mögliche Fehlerursachen findet in Kapitel 6.4 statt. Vorerst werden die erzeugten Relationen mittels verschiedener Maßnahmen (siehe Anhang B) soweit möglich vervollständigt und korrigiert. Das Ergebnis dieses Prozesses ist für die Informationsebene Boden in Abbildung 6.32 zu sehen. Daneben zum Vergleich in Abbildung 6.33 die Bodenklassen im Vektorformat. Die Abbildungen 6.34 und 6.35 zeigen die Nutzung des Jahres 1996, ebenfalls einmal im Raster- und einmal im Vektorformat. 6.3.4 Verschneidung von Rasterdaten mit Rasterdaten Verschneidungen im Rasterformat sind grundsätzlich von Datenbanksystemen sehr viel effizienter durchzuführen als Verschneidungen im Vektorformat. Die einzige Bedingung 6.3. VERSCHNEIDUNG VON INFORMATIONSEBENEN 95 Abbildung 6.34: Nutzung 1996 im Raster- Abbildung 6.35: Nutzung 1996 im Vektorformat format an die Rasterdaten ist, dass sie die gleiche Auflösung, denselben Ursprung und dieselbe Orientierung besitzen. Die Verschneidung entspricht dann einer Vereinigung der Attributlisten der beiden zu verschneidenden Geometrien bzw. Objekte an den einzelnen Rasterpunkten. Beispiel: Ist einem Rasterpunkt in einer Informationsebene die Attributliste A1 und in einer anderen Informationsebene die Attributliste A2 zugeordnet, so besitzt er nach der Verschneidung die Attributliste A1 ∪ A2 . Für die Verschneidung der Informationsebenen Boden und Nutzung sind diese Voraussetzungen nach der Umwandlung der Geometriedaten vom Vektorformat ins Rasterformat bei einer Auflösung von 300×300 Punkten gegeben. Die Relationen, die die Informationen für die Informationsebene Boden im Rasterformat bereithält, ist in Abschnitt 6.3.3.2 definiert. Für die Informationsebene Nutzung existiert eine entsprechende Relation RasterNutzung10. Die Ergebnisrelation für die Aufnahme des Verschneidungsergebnisses hat dann den folgenden Aufbau: PNr 1 2 3 SNrBoden 24 17 42 SNrNutzung 7 14 9 Hierbei ist PNr die Nummer des Rasterpunktes und SNrBoden bzw. SNrNutzung die Nummer des zugehörigen Messstandortes der Informationsebene Boden bzw. Nutzung. Jedem Rasterpunkt sind also ein Bodenstandort und ein Nutzungsstandort zugeordnet. In der vorliegenden Arbeit wurde diese Verschneidung gleich für alle vorhandenen Infor- 96 KAPITEL 6. METHODEN mationsebenen (nachdem die Vektordaten der Informationsebenen Boden, Nutzung und Klima ins Rasterformat umgewandelt worden sind) durchgeführt. Die Ergebnisrelation ist dann wie folgt aufgebaut (vgl. auch Abb. 6.23): PNr 1 2 3 SNrBoden 24 17 42 SNrNutzung 7 14 9 SNrKlima 1 1 1 PNrRelief 1 2 3 TA KA WPFL GWN Jedem Punkt der Relation, dessen Koordinaten über die Punktnummer aus der Relation Raster10 bestimmt werden können, ist ein Bodenstandort, ein Nutzungsstandort, ein Klimastandort (Wert konstant 1, da nur ein Klimastandort vorliegt), sowie ein Reliefpunkt zugeordnet. Über diese Zuordnungen werden später bei den Methoden, die Werte mehrerer Informationsebenen als Eingangsdaten benötigen, die entsprechenden Werte referenziert. Die Attribute TA, KA, WPFL und GWN sind für die Aufnahme der abzuleitenden Werte vorgesehen. Hierbei ist zu bemerken, dass die Werte für die Dauer des kapillaren Aufstiegs TA, für den mittleren kapillaren Aufstieg KA und für das pflanzenverfügbare Bodenwasser GWN aus den Daten der Informationsebene Boden und der Informationsebene Nutzung abgeleitet werden können. Die anderen Informationsebenen fließen in die Ableitung dieser Werte nicht mit ein. Es wäre an dieser Stelle daher auch möglich, die Informationsebenen Boden und Nutzung zu verschneiden, wie dies beispielsweise für das Vektorformat in Abschnitt 6.3.2 gezeigt wurde, um in dieser Relation zusammenfassend nur noch ein Attribut zur Referenzierung dieser beiden Informationsebenen zu benötigen. Ebenfalls könnten dann die Attribute der drei aus diesen beiden Informationsebenen abgeleiteten Werte aus dieser Relation entfernt werden, da sie bereits in einer anderen Relation gespeichert werden, die von dieser Relation aus referenziert werden kann. Dies würde bei Anfragen allerdings Referenzierungen von Werten aus mehreren Tabellen benötigen, was die Performance negativ beeinflusst. Aus diesem Grund und um Anfragen an das Datenbanksystem übersichtlicher zu gestalten, wird daher darauf verzichtet. Die vier im Rasterformat vorhandenen Informationsebenen und die Relation RasterAll10 referenzieren alle die Relation Raster10, um die Koordinaten ihrer Rasterpunkte zu bestimmen. Dies wurde so implementiert, damit die nun folgende Verschneidung möglichst effizient durchgeführt werden kann. Die Verschneidungoperation betrachtet nur noch die Punktnummern, da gleiche Punktnummern in allen Informationsebenen den gleichen Koordinaten zugeordnet sind. Das Einfügen der Werte für die einzelnen Informationsebenen in die Relation RasterAll10 ist demnach durch einfache update-Anweisungen zu vollziehen (Abbildung 6.36). Die Werte für die anderen Informationsebenen werden entsprechend zugewiesen. Sehr viel aufwendiger als die Verschneidung von Daten im Rasterformat ist die Transformation bzw. Skalierung einer Rasterkarte in eine andere. In Rahmen dieser Arbeit bestand das Problem das Relief, das als Rasterkarte mit einem Rasterpunktabstand von 25 Metern (Relief25) gegeben war in eine Rasterkarte mit Abstand 10 Meter (Relief10) 6.4. PROBLEME BEI DER VERSCHNEIDUNG Listing : 1 UPDATE RasterAll10 RA 2 SET RA.SNrBoden = ( SELECT RB.SNrBoden 3 FROM RasterBoden10 RB 4 WHERE RB.PNr=RA.PNr); 97 update RasterAll10.sql Abbildung 6.36: Einfügen von Rasterdaten der Informationsebene Boden zu verfeinern, da dadurch die oben beschriebene Verschneidung einfach zu realisieren ist. Die Rasterpunkte des Reliefs bestimmen den Wert für eine Fläche, die nach Nordosten ausgerichtet ist. Innerhalb dieser dem Relief25 zugeordneten Fläche liegen mehrere Rasterpunkte von Relief10. Die Methode, die den Reliefpunkten von Relief10 die Werte des zugeordneten Punktes aus Relief25 anheftet, arbeitet nach folgendem Prinzip: Zunächst wird ein geometrisches Objekt (ein Rechteck) erzeugt, dass die Fläche beschreibt, für die der gerade betrachtete Punkt aus Relief25 Referenzpunkt ist. Anschließend wird mittels eines Punkt-in-Polygon-Tests für die Punkte aus Relief10 der Referenzpunkt aus Relief25 bestimmt und die diesem Punkt angehefteten Werte dem Punkt aus Relief10 zugeordnet. 6.4 Probleme bei der Verschneidung Im vorigen Abschnitt wurde die prinzipielle Vorgehensweise bei der Verschneidung geometrischer Daten erläutert und kurz darauf hingewiesen, dass es bei der Verschneidung von Raster- und Vektordaten Probleme gibt. Diese sollen nun näher erläutert werden. Bei der Verschneidung von Raster- und Vektordaten wird nicht zu jedem Rasterpunkt eine Fläche gefunden, in der er liegt. Abhängig von den Parameterwerten SDO LEVEL und SDO NUMTILES, die bei der Indexerzeugung angegeben werden und dem Wert für TOLERANCE, festgelegt beim Einfügen der Dimensionsinformationen in die Relation SDO GEOM METADATA, schwankt die Anzahl der Rasterpunkte, denen eine Fläche und damit ein Referenzstandort zugeordnet werden kann, beträchtlich. Es wurde festgestellt, dass der Toleranzwert dabei den geringsten Einfluss ausübt. Um dieses Phänomen genauer zu untersuchen wurden einige Verschneidungen zwischen den Bodenpolygonen und einem Raster mit einer Auflösung von 300×300 Punkten, also 90000 Punkte insgesamt, durchgeführt. Zur Verschneidung wurde der Operator MDSYS.SDO RELATE() wie in Abschnitt 6.3.3 angegeben verwendet. Die Tabelle in Abbildung 6.37 gibt eine Übersicht über die Anzahl der Rasterpunkte, denen in Abhängigkeit von der Wahl der Parameterwerte SDO LEVEL und SDO NUMTILES, ein Wert für eine Bodenfläche und damit für einen Bodenstandort zugewiesen werden konnte. Ist für SDO NUMTILES kein Wert angegebenen (-), so ist der Index fixed und nicht hybrid. Das Raster ist dabei jeweils mit dem Parameter SDO LEVEL entsprechend dem SDO LEVEL des Index auf der Relation BodenFlaeche indexiert. Zusätzlich wurde als Parameter LAYER GTYPE=POINT angegeben, da es sich bei dem Raster ausschließlich 98 KAPITEL 6. METHODEN um Punktgeometrien handelt. Die Werte für Zeit geben die Dauer der Verschneidungsberechnungen an. Dies sind aber nicht die reinen CPU-Zeiten für die Berechnungen, sondern die Realzeiten, die insgesamt für die Berechnungen benötigt wurden. Sie ist jeweils angegeben, um die Bearbeitungszeit für verschiedenen Indexierungen grob vergleichen zu können. SDO LEVEL 4 4 4 4 6 6 6 6 8 8 8 8 SDO NUMTILES 6 9 12 6 9 12 6 9 12 Punkte 82057 78016 72296 67355 73345 75222 75145 74734 67075 70107 70107 69736 61 51 43 40 32 32 33 32 26 26 27 28 Zeit Minuten Minuten Minuten Minuten Minuten Minuten Minuten Minuten Minuten Minuten Minuten Minuten Abbildung 6.37: Initialisierte Rasterpunkte in Abhängigkeit von SDO LEVEL und SDO NUMTILES (TOLERANCE=1) In der Tabelle fällt auf, dass das beste Ergebnis für den fixen Index bei einem Wert für SDO LEVEL von 4 erreicht wird. Bei fixer Indexierung nimmt die Anzahl der zuzuordnenden Punkte mit steigendem Wert für SDO LEVEL ab. Ebenso verhält es sich, wenn SDO LEVEL konstant auf 4 bleibt und der Wert für SDO NUMTILES erhöht wird. Die Beobachtung führt zu der Vermutung, dass bei einer gegebenen Anzahl von Kacheln eine Erhöhung der Kachelungszahl zu einer Verminderung an zuzuordnenden Punkten führt. Die Abbildungen 6.38 bis 6.46, in denen die Ergebnisse der Verschneidung dargestellt sind, liefern die Begründung für diese Vermutung. Sie lautet, dass in großen Kacheln viele Punkte sind und das Ausscheiden einiger Punkte bei der Indexierung die Kachel nicht ausselektiert, da immer noch Punkte vorhanden sind und diese Kachel daher genau untersucht wird, während in kleinen Kacheln weniger Punkte vorhanden sind und die Kachel dadurch eher ausselektiert wird, falls Punkte falsch zugeordnet werden. Dies würde auch bedeuten, dass die genaue Berechnung innerhalb der Kacheln korrekt arbeitet. Abbildung 6.38 bestätigt dies, da hier trotz großer Kacheln die Ränder der Geometrien recht genau approximiert sind. Die Vermutung wird allerdings widerlegt durch die Betrachtung der Werte für einen SDO LEVEL von 6 bzw 8. Hier werden trotz einer Verfeinerung der Kachelung zwischenzeitlich mehr Punkte gefunden. Die Bilder zeigen weiterhin, warum der Toleranzwert eine recht geringe Bedeutung für das vorhandene Problem hat. Der Toleranzwert führt prinzipiell nur zu einer internen Vergrößerung der Kacheln und da ganze Kacheln nicht gefunden werden, ist die Höhe des Toleranzwertes nur von Bedeutung, falls der Toleranzwert die Kacheln entscheidend vergrößert. 6.4. PROBLEME BEI DER VERSCHNEIDUNG 99 Abbildung SDO LEVEL=4 6.38: Abbildung SDO LEVEL=6 6.39: Abbildung SDO LEVEL=8 6.40: Abbildung SDO LEVEL=4, SDO NUMTILES=6 6.41: Abbildung SDO LEVEL=6, SDO NUMTILES=6 6.42: Abbildung SDO LEVEL=8, SDO NUMTILES=6 6.43: Abbildung 6.44: Abbildung 6.45: Abbildung 6.46: SDO LEVEL=4, SDO LEVEL=6, SDO LEVEL=8, SDO NUMTILES=12 SDO NUMTILES=12 SDO NUMTILES=12 100 KAPITEL 6. METHODEN Schließlich ist an den Bildern zu sehen, dass Kacheln vorrangig an den Grenzen zwischen Polygonen ausgeschnitten sind. Oracle selbst räumt Fehler bei der Implementierung der Methode SDO GEOM.RELATE() ein. Insbesondere treten angeblich Probleme bei Linien auf, die den gleichen Anfangs- und Endpunkt besitzen und fast parallel verlaufen. Dies ist an den Grenzflächen der Polygone natürlich der Fall. Neben der Problematik, dass ganzen Kacheln keine Werte zuzuordnen sind, sind in den Abbildungen noch zwei weitere Datenfehler auszumachen. Einerseits sind dünne horizontale Linien zu sehen, denen kein Wert zugewiesen ist und andererseits dünne horizontale Linien, die anscheinend aus Nachbarobjekten in andere Objekte hineinlaufen. Die Abbildungen 6.47 und 6.48 zeigen die Nutzungsdaten nach der Konvertierung vom Vektorformat ins Rasterformat, wobei nur fixed-indexing verwendet wurde. Obwohl die Nutzungsflächen relativ homogen im Untersuchungsgebiet vorhanden sind, nimmt die Zuordnung von Sachdaten an Rasterpunkte anscheinend stetig von unten nach oben ab. Abbildung 6.47: SDO LEVEL=4 Abbildung 6.48: SDO LEVEL=8 In Anhang B werden Möglichkeiten aufgezeigt die Datenfehler der Karten zu korrigieren. 6.5 Ableitungen für verschnittene Geometrien Werte, deren Ableitung die Eingangsdaten mehrerer Informationsebenen benötigt, sind innerhalb der Methode zur Ableitung der Sickerwasserrate, die Dauer des kapillaren Aufstiegs TA, der mittlere kapillare Aufstieg KA, das pflanzenverfügbare Bodenwasser WPFL und natürlich die Sickerwasserrate GWN selbst. Die ersten drei Werte sind aus den Daten der Informationsebenen Boden und Nutzung abzuleiten. Da die Verschneidung dieser beiden Informationsebenen sowohl im Vektorformat (Relation VBN), als auch im 6.5. ABLEITUNGEN FÜR VERSCHNITTENE GEOMETRIEN 101 Verschnitt der Informationsebenen Boden, Nutzung, Klima und Relief Eingangsdaten abgeleitete Werte Informationsebene Boden Informationsebene Nutzung * TA KA WPFL * Informationsebene Klima GWN Informationsebene Relief : geht ein in die Berechnung von * : unter Verwendung statischer Hilfsrelationen Abbildung 6.49: Schematische Darstellung des Datenflusses zur Ableitung der Sickerwasserrate Rasterformat (Relation RasterAll10) durchgeführt wurde, werden diese Werte für beide Datenformate berechnet. Für die Ableitung der Sickerwasserrate müssen zusätzlich die Klima- und Reliefinformationen vorhanden sein. Daher kann das Ergebnis der Berechnung dieses Wertes visuell nur im Rasterformat dargestellt werden. Die folgenden Unterabschnitte beschreiben die Implementierung der verschiedenen Methoden. Der Datenfluss zur Ableitung dieser Werte ist in Abbildung 6.49 dargestellt. 6.5.1 Dauer des kapillaren Aufstiegs Die Dauer des kapillaren Aufstiegs ist abhängig von der nutzbaren Feldkapazität des effektiven Wurzelraums nFKWe, der mittleren kapillaren Aufstiegsrate KRmm, sowie der Nutzung des Bodens NutzNr. Sie wird immer für ein bestimmtes Jahr berechnet (hier beispielhaft für das Jahr 1996) und in Tagen angegeben. NutzNr ist dabei eine Nummer, die nach einem von R. Duttmann eingeführten Schlüssel verschiedene Nutzungsarten Bereich für KRmm < 1, 5 1.5.. < 2.5 2.5.. < 3.5 3.5..4.5 ≥ 4.5 KRmm ≤ 1.0 2.0 3.0 4.0 ≥ 5.0 Formel 0.14 ∗ nF KW e + 14.3 0.13 ∗ nF KW e + 23.4 0.10 ∗ nF KW e + 35.0 0.07 ∗ nF KW e + 44.4 60 Abbildung 6.50: Mittlere Dauer des kapillaren Aufstiegs (ta) bei Getreide in Abhängigkeit von KRmm und nFKWe codiert. Die mittlere und rechte Spalte der Tabelle in Abbildung 6.50 zeigen, wie die Dauer des kapillaren Aufstiegs bei Anbau von Getreide berechnet wird. Die Tabellen für 102 KAPITEL 6. METHODEN Mais, Zucker und Intensivweide sind entsprechend aufgebaut. Nach weiteren Nutzungsarten wird nicht unterschieden. Die linke Spalte wurde nach Absprache mit M. Neteler eingeführt, damit das Problem, dass Werte für KRmm in dieser Tabelle nicht eindeutig Zeilen zuzuordnen sind (fünf Zeilen für sechs Bereiche !), behoben wird. Abbildung 6.51: Dauer des kapillaren Aufstiegs Die Methode zur Berechnung der Dauer des kapillaren Aufstiegs ist für die Relation RasterAll10 in Abbildung 6.52 dargestellt. In der select-Anweisung werden die Rasterpunktnummer PNr, die Nutzungsnummer NutzNr, die nutzbare Feldkapazität des effektiven Wurzelraums nFKWe, sowie die mittlere kapillare Aufstiegsrate in Millimetern KRmm aus der Datenbank gelesen. Mithilfe des Cursors werden anschließend innerhalb der Schleife für die Ergebnistupel der Anfrage die Werte für die Dauer des kapillaren Aufstiegs berechnet und durch die updateAnweisung den Rasterpunkten zugewiesen. Statt der if..then..else-Konstruktion könnte auch eine zusätzliche Hilfsrelation verwendet werden, die Nutzungsnummern mit Faktoren und Summanden für verschiedene Werte von KRmm und nFKWe verknüpft. Da 6.5. ABLEITUNGEN FÜR VERSCHNITTENE GEOMETRIEN 103 aber erstens die Bereichsangaben für KRmm nicht eindeutig sind zweitens der Nutzungsschlüssel keine allgemeine Norm ist, wurde bisher darauf verzichtet und die etwas umständliche Konstruktion beibehalten. Die Prozedur zur Berechnung der Dauer des kapillaren Aufstiegs für die Relation VBN hat denselben Aufbau wie die angegebene Prozedur. Sie unterscheidet sich lediglich dadurch, dass für RasterAll10 VBN und für die Punktnummer des Rasterpunktes die Nummer der betrachteten Fläche eingesetzt wird. Abbildung 6.51 zeigt qualitativ die Listing : calculate ta10.sql (Ausschnitt) 1 CREATE OR REPLACE PROCEDURE calculate_ta10 2 IS 3 CURSOR cur IS 4 SELECT ra10.pnr, BP.krmm AS krmm, BP.nfkwe AS nfkwe, 5 TA_NK.Bezeichnung as nart 6 FROM RasterAll10 ra10, BodenProfil BP, Nutzung N, 7 BodenStandort BS, NutzungStandort NS, 8 Anbau A, TA_NutzungKlassen TA_NK 9 WHERE ra10.SNrBoden=BS.SNr AND 10 ra10.SNrNutzung=NS.SNr AND 11 BP.BPNr=BS.BPNr AND 12 A.SNr=NS.SNr AND 13 N.NNr=A.NNr AND 14 N.Jahr=1996 AND 15 N.NutzNr>=TA_NK.min AND 16 N.NutzNr<=TA_NK.max; 17 18 runner cur%ROWTYPE; 19 dauer FLOAT; 20 21 BEGIN 22 OPEN cur; 23 LOOP 24 FETCH cur INTO runner; 25 EXIT WHEN cur%NOTFOUND; 26 27 IF(runner.nart=’AG’) THEN -- Getreide 28 IF (runner.krmm<1.5) THEN 29 dauer:=0.14*runner.nfkwe+14.3; 30 ELSIF (runner.krmm<2.5) THEN ... -- weitere Unterscheidungen fuer krmm 36 ELSE dauer:=60.0; 37 END IF; 38 ELSIF(runner.nart=’MA’ OR runner.nart=’ZS’) THEN -- Mais, 39 IF (runner.krmm<1.5) THEN -- Zueckerrueben ... -- andere Nutzungsarten 59 END IF; 60 END IF; 61 62 UPDATE RasterAll10 63 SET ta=dauer 64 WHERE pnr=runner.pnr; 65 66 END LOOP; 67 CLOSE cur; 68 END; Abbildung 6.52: Prozedur zur Ableitung der Dauer des kapillaren Aufstiegs (Ausschnitt) berechneten Werte für das Untersuchungsgebiet. Hellere Farben entsprechen einer länge- 104 KAPITEL 6. METHODEN ren kapillaren Aufstiegsdauer. Die Farbe Weiß bedeutet, das kein Wert berechnet werden kann, da benötigte Eingangsdaten nicht vorhanden sind. Zur besseren Orientierung sind die Polygonränder schwarz nachgezeichnet. 6.5.2 Mittlerer kapillarer Aufstieg Der mittlere kapillare Aufstieg KA ist definiert als das Produkt der kapillaren Aufstiegsrate KRmm und der Dauer des kapillaren Aufstiegs TA (KA = KRmm ∗ T A). Die Einheit ist Millimeter. Da die Implementierung dieser Methode sehr kurz ist, ist sie zum Vergleich sowohl für die Raster-, als auch für die Vektordaten in 6.53 bzw. 6.54 dargestellt. In der Prozedur Listing : 1 2 3 4 5 6 7 8 9 calculate KA10.sql CREATE OR REPLACE PROCEDURE calculate_ka10 IS BEGIN UPDATE RasterAll10 a SET a.KA = ( SELECT a.TA*b.KRmm FROM BodenProfil b, BodenStandort c WHERE a.SNrBoden=c.SNr AND b.BPNr = c.BPNr); END; Abbildung 6.53: Prozedur zur Ableitung des mittleren kapillaren Aufstiegs (Raster) Listing : 1 2 3 4 5 6 7 8 9 calculate ka.sql CREATE OR REPLACE PROCEDURE calculate_ka IS BEGIN UPDATE VBN a SET a.KA = ( SELECT a.TA*b.KRmm FROM BodenProfil b, BodenStandort c WHERE a.SNrBoden=c.SNr AND b.BPNr = c.BPNr); END; Abbildung 6.54: Prozedur zur Ableitung des mittleren kapillaren Aufstiegs (Vektor) wird über die Nummer des dem Rasterpunkt bzw. der Fläche zugeordneten Bodenstandorts das zugehörige Bodenprofil ermittelt. Der Wert für KRmm wird aus der Relation BodenProfil ausgelesen und mit dem Wert für die Dauer des kapillaren Aufstiegs eines bestimmten Jahres (hier 1996) multipliziert. Der berechnete Wert wird dem Punkt- bzw. dem Flächenobjekt zugewiesen. Die Abbildungen 6.55 und 6.56 zeigen die Werteverteilung des kapillaren Aufstiegs. Auch hier sind hellere Farben gleichbedeutend mit höheren Werten. Weißen Flächen konnte kein Wert zugewiesen werden. 6.5. ABLEITUNGEN FÜR VERSCHNITTENE GEOMETRIEN 105 Abbildung 6.55: Mittlerer kapillarer Auf- Abbildung 6.56: Mittlerer kapillarer Aufstieg im Rasterformat stieg im Vektorformat 6.5.3 Pflanzenverfügbares Bodenwasser Der Wert für das pflanzenverfügbare Bodenwasser ist ein Maß für die Wassermenge, die Pflanzen in Trockenjahren dem Boden entziehen können. In diesen Wert fließt die effektive Durchwurzelungstiefe durch nFKWe ein und auch die Art der Pflanzen, da verschiedene Pflanzen unterschiedlich tiefe Wurzeln haben und dies die Menge des Wassers, das sie erreichen können, beeinflusst. Das pflanzenverfügbare Bodenwasser WPFL berechnet sich einfach als Summe aus der nutzbaren Feldkapazität des effektiven Wurzelraums und dem mittleren kapillaren Aufstieg KA. Die Methode ist strukturell ebenso aufgebaut wie die Methode zur Ableitung des mittleren kapillaren Aufstiegs und in Abbildung 6.57 dargestellt. Listing : 1 2 3 4 5 6 7 8 9 10 11 calculate wpfl.sql CREATE OR REPLACE PROCEDURE calculate_wpfl IS BEGIN UPDATE VBN a SET a.WPFL = ( SELECT a.KA+b.nFKWe FROM BodenProfil b, BodenStandort c WHERE a.SNrBoden=c.SNr AND b.BPNr = c.BPNr ); END; / Abbildung 6.57: Prozedur zur Ableitung des pflanzenverfügbaren Bodenwassers) Ein qualitativer Überblick über das pflanzenverfügbare Bodenwasser im Untersuchungsgebiet (Jahr 1996) Groß-Ilde zeigt Abbildung 6.58. Die Polygone einzelner Flächenele- 106 KAPITEL 6. METHODEN mente sind wieder schwarz eingezeichnet, helle Farben stehen für hohe Werte und weißen Flächen konnte kein Wert zugeordnet werden. Abbildung 6.58: Menge des pflanzenverfügbaren Bodenwassers (1996) 6.5.4 Sickerwasserrate Als Sickerwasser wird das Wasser bezeichnet, dass sich unter Einwirkung der Schwerkraft abwärts bewegt. Die Ableitung der Sickerwasserrate benötigt Eingangsdaten der Informationsebenen Boden, Nutzung, Klima und Relief. Sie wird für ein bestimmtes Jahr berechnet. Um sie abzuleiten werden zunächst die vier Informationsebenen verschnitten, sodass in einer Relation Informationen über alle benötigten Eingangsdaten vorhanden sind. Die Relation, die alle diese Eingangsdaten bereithält, ist RasterAll10, die ausführlich in Abschnitt 6.3.1 diskutiert wurde. 6.5. ABLEITUNGEN FÜR VERSCHNITTENE GEOMETRIEN 107 Sind alle diese Werte vorhanden, so berechnet sich die Sickerwasserrate in mehreren Schritten. Zunächst wird unter Verwendung der Informationen über das pflanzenverfügbare Bodenwasser, die Niederschlagsmenge des Winterhalbjahres sowie der potenziellen Verdunstung ein Wert nach einer Formel berechnet, die abhängig von der Nutzung ist. Dieser Wert erhält anschließend Zu- oder Abschläge in Abhängigkeit von der Hangneigung und der Exposition. Für besondere Nutzungen sind wiederum verschiedene Zuund Abschläge auf den berechneten Wert erforderlich. Die Implementierung der Prozedur wird nun in mehreren Teilen vorgestellt. Zunächst wird eine Anfrage an die Datenbank gestellt, deren Ergebnis mithilfe eines Cursors abgearbeitet wird. Diese Anfrage ist in Abbildung 6.59 dargestellt. Vor der Implementierung der Methode wurde allerdings die Relation RasterAll10 um drei Attributwerte erweitert. Es wurde die Attributliste der Relation Relief10 zur Relation RasterAll10 hinzugefügt. Dies führt zwar, wie in Abschnitt 6.3.1 erläutert, zu redundanter Datenspeicherung, hilft aber, die Antwortzeiten zu verkürzen, da keine Verbundbildung zwischen den beiden umfangreichen Relationen Relief10 und RasterAll10 durchzuführen ist. Listing : Cursordefinition Sickerwasserrate 1 CURSOR cur IS 2 SELECT ra10.PNr, 3 NKGWN.Bezeichnung AS nart, 4 ra10.wpfl, 5 SK.KNr, 6 ra10.Exposition, 7 ra10.Hangneigung 8 FROM RasterAll10 ra10, 9 Anbau A, 10 Nutzung N, 11 T_NutzungKlassenGWN NKGWN, 12 StandortKlima SK 13 WHERE ra10.SnrNutzung = A.SNr AND 14 A.NNr = N.NNr AND 15 N.Jahr=1996 AND 16 N.NutzNr<=NKGWN.max AND 17 N.NutzNr>=NKGWN.min AND 18 SK.SNr=ra10.SNrKlima; Abbildung 6.59: Cursordefinition Sickerwasserrate Beim Durchlaufen der einzelnen Cursortupel werden nun zunächst aggregierte Klimawerte berechnet (Abb. 6.60). Im Einzelnen sind diese Werte der Jahresniederschlag N, der Niederschlag der Hauptvegetationsperiode Nv und der Niederschlag des Winterhalbjahres Nwi. Diese Werte werden für das Jahr 1996 bzw. für das Winterhalbjahr 1995/96 berechnet. Schließlich wird noch die summierte potenzielle Verdunstung nach Haude für die Hauptvegetationsperiode etphaude bestimmt. Diese Berechnungen werden allerdings nur ausgeführt, wenn sich der Klimastandort ändert. Zur Speicherung der Nummer des alten Klimastandorts wird die Variable AKNr verwendet. Um die Anzahl dieser aggregierenden Berechnungen zu minimieren wäre eine 108 KAPITEL 6. METHODEN Listing : 1 2 3 4 5 6 7 Aggregierung Klimawerte IF(AKNr!=runner.KNr) THEN SELECT calculate_Niederschlag(runner.KNr,to_date(’01-Jan-1996’), to_date(’31-DEC-1996’)) INTO N FROM DUAL; SELECT calculate_Niederschlag(runner.KNr,to_date(’01-OCT-1995’), to_date(’31-MAR-1996’)) INTO NWi FROM DUAL; SELECT calculate_Niederschlag(runner.KNr,to_date(’01-APR-1996’), to_date(’30-SEP-1996’)) INTO Nv FROM DUAL; SELECT get_sum_etphaude(runner.knr,to_date(’01-APR-1996’), to_date(’30-SEP-1996’)) INTO etphaude FROM DUAL; AKNr:=runner.KNr; END IF; Abbildung 6.60: Aggregierung Klimawerte) Gruppierung der Cursortupel nach Klimastandorten durchzuführen. Da bei den vorliegenden Daten allerdings nur ein Klimastandort existiert, ist dies hier nicht notwendig. Sind die aggregierten Klimawerte vorhanden, so können die Werte der Sickerwasserrate für die einzelnen Rasterpunkte bestimmt werden. Unter Verwendung der Hilfsrelation T NutzungKlassenGWN wurde in der für den Cursor verwendeten Anfrage einer der vier folgenden Nutzungsbereiche für einen Rasterpunkt bestimmt: Ackerland, Grünland, Nadelwald, Laubwald (oder null). Für diese vier Bereiche sind unterschiedliche Berechnungsvorschriften zur Ableitung der Sickerwasserrate angegeben. Die Implementierung dieser Berechnungsvorschriften ist in Abbildung 6.61 angegeben. Auch hier wäre es wie bei der Methode zur Ableitung der Dauer des kapillaren Aufstiegs in 6.5.1 möglich, durch definierte Nutzungsklasssen die in den einzelnen Formeln angegebenen Faktoren und Summanden in einer Hilfsrelation zu speichern und dadurch die if..then..else-Konstruktion zu vermeiden. Listing : 1 2 3 4 5 6 7 8 9 Berechnung der Sickerwasserrate IF(runner.nart=’A’) THEN -- Ackerland Sickerwasserrate:=0.92*Nwi+0.62*Nv-153*Log(10,runner.wpfl) -0.12*etphaude+109; ELSIF (runner.nart=’G’) THEN -- Gruenland Sickerwasserrate:=0.90*Nwi+0.52*Nv-286*Log(10,runner.wpfl) -0.1*etphaude+330; ELSIF (runner.nart=’FN’) THEN -- Nadelwald Sickerwasserrate:=0.71*Nwi+0.67*Nv-166*Log(10,runner.wpfl) -0.19*etphaude+127; ELSIF (runner.nart=’FL’) THEN -- Laubwald Sickerwasserrate:=0.953*N+0.02**etphaude-430.1; END IF; Abbildung 6.61: Berechnung Sickerwasserrate) Anschließend werden für diesen berechneten Wert in Abhängigkeit von der Hangneigung und der Exposition verschiedene Zu- und Abschläge vorgenommen. Aufgrund fehlender Informationen konnte dies hier nicht durchgeführt werden, sodass lediglich der Hauptwert der Sickerwasserrate berechnet wurde und in Abbildung 6.62 qualitativ dargestellt ist. Wie bei den anderen Bildern auch ist die Helligkeit das Maß für den berechneten Wert und für weiße Flächen konnten keine Werte berechnet werden. 6.5. ABLEITUNGEN FÜR VERSCHNITTENE GEOMETRIEN 109 Abbildung 6.62: Sickerwasserrate im Untersuchungsgebiet (ohne Zu- und Abschläge) Die prinzipielle Struktur der Methoden dieses Abschnitts soll hier noch einmal zusammengefasst werden. Zunächst sind die Geometrien der Informationsebenen zu verschneiden, die Eingangsdaten für eine Methode bereithalten. Den einzelnen neu berechneten geometrischen Objekten (Rasterpunkte oder durch Polygone beschriebene Flächen) werden bei dieser Verschneidung Referenzen auf die einzelnen Sachobjekte (bzw. die Attribute der Sachobjekte selbst) der eingehenden Informationsebenen zugewiesen. Dadurch entsteht eine neue Informationsebene, die die Informationen der beiden ursprünglichen Informationsebenen vereinigt und die, falls die geometrischen Informationen im Vektorformat abgespeichert sind, eine verfeinerte Geometrie besitzt. Die Ableitung der neuen Sachdaten, für die Attribute in der Relation vorzusehen sind, die die neue Informationsebene repräsentiert, entspricht dann der Ableitung von Daten innerhalb einer Informationsebene, mit dem Unterschied, dass die Sachdaten, falls sie nicht direkt in der neuen Informationsebene gespeichert sind, über Fremdschlüssel in den Relationen der eingehenden Informationsebenen referenziert werden. 110 KAPITEL 6. METHODEN Kapitel 7 Erfahrungen und Ausblick Dieses Kapitel gibt einen Überblick über die Erfahrungen, die im Rahmen dieser Arbeit mit geografischen Methoden und dem Spatial Cartridge von Oracle gemacht wurden, sowie Anregungen für zukünftige Arbeiten auf diesem Gebiet. In Bezug auf den geografischen Teil dieser Arbeit fällt auf, dass die als Grundlage verwendeten Quellen, die Bodenkundliche Kartieranleitung [1] sowie das Methodenhandbuch [17], nur begrenzt für die direkte Implementierung der Methoden verwendet werden können. An vielen Stellen sind EDV-gerechte Anpassungen durchzuführen. Hier sei nur an die Hilfsrelation zur Ableitung der Dauer des kapillaren Aufstiegs in Abschnitt 6.5.1 erinnert. Auch an anderen Stellen, die nicht alle ausfürlich beschrieben wurden, sind Modifikationen erforderlich gewesen. Ein Beispiel ist die Bestimmung der kapillaren Aufstiegsrate, für die bei bestimmten Kombinationen von Eingangswerten, als Ergebnis in Tabellen des Methodenhandbuchs der Wert > 5.0 oder auch < 0.1 angegeben ist. Für eine Implementierung der im Methodenhandbuch angegebenen Methoden wäre es daher wünschenswert, diese Art von Werten zu beseitigen und durch eindeutige Zahlenwerte zu ersetzen. Zusätzlich sollten zahlenwertige Kodierungsschlüssel für bestimmte geografische Daten entwickelt werden, mit denen beispielsweise Bezeichnungen von Bodenhorizonten (IIBv-T+cCvTu2) oder auch Nutzungsdaten besser verwaltet werden können. Der von R.Duttmann entwickelte Schlüssel für die Kodierung der Nutzung ist sicherlich ein richtiger Schritt hin zu einer effizienten computergestützten Verwaltung geografischer Daten. Ein weiterer anzumerkender Punkt ist, dass sich die Bodenkundliche Kartieranleitung und das Methodenhandbuch an einigen Stellen unterscheiden. Dies führte insofern zu Problemen, da ursprünglich die Methoden des Methodenhandbuchs implementiert werden sollten, für die Datenaufnahme aber die Bodenkundliche Kartieranleitung maßgeblich war und in dieser teilweise andere Einteilungen von Werten in Stufen angegeben oder Methoden nicht definiert waren. Positiv ist an dem Methodenhandbuch zu bemerken, dass durch den modularen Aufbau der Methoden die Reihenfolge der Implementierungen zur Ableitung einzelner Werte gut strukturiert und daher verständlich ist. 111 112 KAPITEL 7. ERFAHRUNGEN UND AUSBLICK Zum Spatial Cartridge von Oracle sind mehrere Bemerkungen zu machen. An erster Stelle steht hier natürlich die Problematik der räumlichen Indexe, die die Verschneidungsoperationen massiv beeinträchtigt haben. Weiterhin ist der Anfrageoptimierer von Oracle8i nicht auf räumliche Anfragen hin erweitert worden. Dies fiel bei der Betrachtung von Ausführungsplänen für räumliche Anfragen auf. Schließlich nimmt auch die Bearbeitung räumlicher Anfragen zu viel Zeit in Anspruch. Abgesehen davon arbeiten einige andere Methoden des Spatial Cartridge nicht wie in der Dokumentation angegeben oder haben andere Namen. Diese Probleme sind teilweise sicherlich darauf zurückzuführen, dass Oracle8i bzw. das Spatial Cartridge erst kurze Zeit verfügbar ist und werden mit nachfolgenden Versionen (hoffentlich) behoben sein, sodass die Bemerkungen aus Abschnitt 6.4 dann nicht mehr aktuell sind. Neben diesen datenbank-technischen Anmerkungen sind noch einige Stichworte zur Verwaltung der Daten selbst und weiteren mögliche Forschungsaufgaben zu geben. Eine denkbare Weiterentwicklung der vorliegenden Datenbank wären Methoden, die nach Verschneidungsprozessen Flächen mit gleichen Attributausprägungen zu einer neuen Geometrie zusammenfassen. Dies ist bisher nicht implementiert. Das Spatial Cartridge von Oracle bietet hierfür den Objekttyp MULTIPOLYGON an, der dieses leisten könnte. Ebenso wäre es denkbar Methoden zu entwickeln, die Daten im Rasterformat analysieren, um Objekte und ihre räumlichen Grenzen im Rasterformat zu identifizieren. Dadurch wäre es möglich die Zuordnung Sachdaten-Geometrie umzukehren und nicht mehr den Rasterpunkten die Sachdaten, sondern den Sachdaten eine Menge von Rasterpunkten zuzuordnen, ähnlich der Zuordnung von Polygonen an Standorte. Für eine Menge von Rasterpunkten bietet Spatial ebenfalls einen Objekttyp an und zwar MULTIPOINT. Eine andere Zielrichtung ist die Erweiterung der von Spatial angebotenen Methoden zur Unterstützung dreidimensionaler Berechnungen. Unabhängig davon wäre es für die zu implementierenden Methoden wünschenswert, Relationennamen übergeben zu können (Stichwort: dynamisches SQL), da sich die Methoden zur Ableitung von Werten für die unterschiedlichen Formate strukturell nicht unterscheiden. Schließlich sollte auch die Berücksichtigung temporaler Komponenten (viele Werte werden für eine bestimmtes Jahr betrachtet) im Hinblick auf dynamische Simulationen untersucht werden. Zum Abschluss dieses kurzen Ausblicks sei noch darauf hingewiesen, dass es natürlich auch ein Ziel zukünftiger Arbeiten sein sollte, die Menge der in der Datenbank implementierten Methoden zu vervollständigen und Simulationsmodelle an sie zu koppeln. Anhang A Definition der Relationen A.1 Neues Schema -- ***************************** -- ** Informationsebene Boden ** -- ***************************** CREATE TABLE Boden ( BNr INTEGER, Bodentyp VARCHAR2(10) DEFAULT Grundwasserstand VARCHAR2(10) DEFAULT Grundwasserstufe FLOAT DEFAULT Staunaessestufe INTEGER DEFAULT CONSTRAINT PK_Boden PRIMARY KEY(BNr) ); NULL, NULL, NULL, NULL, CREATE TABLE BodenProfil ( BPNr INTEGER, BNr INTEGER, We FLOAT DEFAULT NULL, nFKWe FLOAT DEFAULT NULL, KRmm FLOAT DEFAULT NULL, KRStufe INTEGER DEFAULT NULL, nFKWeStufe INTEGER DEFAULT NULL, CONSTRAINT PK_BodenProfil PRIMARY KEY (BPNr), CONSTRAINT FK_BodenProfil FOREIGN KEY (BNr) REFERENCES Boden(BNr) ); CREATE TABLE SNr Rechtswert Hochwert BPNr CONSTRAINT BodenStandort ( INTEGER, FLOAT NOT NULL, FLOAT NOT NULL, INTEGER NOT NULL, PK_BodenStandort PRIMARY KEY(SNr), 113 114 ANHANG A. DEFINITION DER RELATIONEN CONSTRAINT FK_BodenStandort FOREIGN KEY (BPNr) REFERENCES BodenProfil(BPNr) ); CREATE TABLE BodenHorizont ( HNr INTEGER, Horizontbezeichnung VARCHAR2(10) DEFAULT NULL, Bodenart VARCHAR2(5) DEFAULT NULL, Rohdichte FLOAT DEFAULT NULL, Grobboden FLOAT DEFAULT NULL, Humusgehalt FLOAT DEFAULT NULL, Carbonatgehalt FLOAT DEFAULT NULL, Tongehalt FLOAT DEFAULT NULL, pHWert FLOAT DEFAULT NULL, LD FLOAT DEFAULT NULL, LDStufe INTEGER DEFAULT NULL, nFK FLOAT DEFAULT NULL, We FLOAT DEFAULT NULL, CONSTRAINT PK_BodenHorizont PRIMARY KEY(HNr) ); CREATE TABLE ProfilHorizont ( BPNr INTEGER, HNr INTEGER, Otief FLOAT NOT NULL, Utief FLOAT NOT NULL, -- CONSTRAINT PK_ProfilHorizont PRIMARY KEY(BPNr,HNr), CONSTRAINT FK_ProfilHorizont_BPNr FOREIGN KEY (BPNr) REFERENCES BodenProfil(BPNr), CONSTRAINT FK_ProfilSchichten_HNr FOREIGN KEY (HNr) REFERENCES BodenHorizont(HNr) ); CREATE TABLE BodenFlaeche ( SNr INTEGER, Geometrie MDSYS.SDO_GEOMETRY, CONSTRAINT PK_BodenFlaeche PRIMARY KEY (SNr), CONSTRAINT FK_BodenFlaeche FOREIGN KEY (SNr) REFERENCES BodenStandort(SNr) ); -- ******************************* -- ** Informationsebene Nutzung ** -- ******************************* CREATE TABLE SNr Rechtswert Hochwert CONSTRAINT ); NutzungStandort ( INTEGER, FLOAT, FLOAT, PK_NutzungStandort PRIMARY KEY (SNr) CREATE TABLE Nutzung( NNr INTEGER, NutzNr INTEGER DEFAULT NULL, A.1. NEUES SCHEMA Jahr INTEGER DEFAULT NULL, CONSTRAINT PK_Nutzung PRIMARY KEY (NNr) ); CREATE TABLE Anbau ( SNr INTEGER, NNr INTEGER, CONSTRAINT PK_Anbau PRIMARY KEY (SNr,NNr), CONSTRAINT FK_AnbauSNr FOREIGN KEY (SNr) REFERENCES NutzungStandort(SNr), CONSTRAINT FK_AnbauNNr FOREIGN KEY (NNr) REFERENCES Nutzung(NNr) ); CREATE TABLE SNr Geometrie CONSTRAINT CONSTRAINT ); NutzungFlaeche ( INTEGER, MDSYS.SDO_GEOMETRY, PK_NutzungFlaeche PRIMARY KEY (SNr), FK_NutzungFlaeche FOREIGN KEY (SNr) REFERENCES NutzungStandort(SNr) -- ***************************** -- ** Informationsebene Klima ** -- ***************************** CREATE TABLE SNr Rechtswert Hochwert CONSTRAINT ); KlimaStandort ( INTEGER, FLOAT NOT NULL, FLOAT NOT NULL, PK_KlimaStandort PRIMARY KEY(SNr) CREATE TABLE SNr Geometrie CONSTRAINT CONSTRAINT ); KlimaFlaeche ( INTEGER, MDSYS.SDO_GEOMETRY, PK_KlimaFlaeche PRIMARY KEY (SNr), FK_Klima_Flaeche FOREIGN KEY (SNr) REFERENCES KlimaStandort(SNr) CREATE TYPE Typ_KlimaDatum as OBJECT ( Datum DATE, Temperatur FLOAT, RFeuchte FLOAT, Niederschlag FLOAT, ewt14 FLOAT, et14 FLOAT, ETPhaude FLOAT ); / CREATE TYPE Typ_KlimaDatenTabelle AS TABLE of Typ_KlimaDatum; / 115 116 ANHANG A. DEFINITION DER RELATIONEN CREATE TABLE Klima ( KNr INTEGER, KlimaDaten Typ_KlimaDatenTabelle, CONSTRAINT PK_Klima PRIMARY KEY (KNr)) NESTED TABLE KlimaDaten STORE AS KlimaDatenMenge; CREATE TABLE StandortKlima ( SNr INTEGER, KNr INTEGER, CONSTRAINT PK_StandortKlima PRIMARY KEY (SNr,KNr), CONSTRAINT FK_StandortKlimaSNr FOREIGN KEY (SNr) REFERENCES KlimaStandort(SNr), CONSTRAINT FK_StandortKlimaKNr FOREIGN KEY (KNr) REFERENCES Klima(KNr) ); -- ****************************** -- ** Informationsebene Relief ** -- ****************************** CREATE TABLE Relief25 ( PNr INTEGER, x INTEGER, y INTEGER, Rasterpunkt MDSYS.SDO_GEOMETRY, Hoehe FLOAT, Hangneigung FLOAT, Exposition FLOAT, CONSTRAINT PK_Relief25 PRIMARY KEY (PNr) ); -- ******************************* -- ** Tabelle SDO_GEOM_METADATA ** -- ******************************* CREATE TABLE TABLE_NAME COLUMN_NAME DIMINFO ); SDO_GEOM_METADATA ( VARCHAR2(30), VARCHAR2(30), MDSYS.SDO_DIM_ARRAY A.2. SCHEMATA FÜR ALTE DATEIFORMATE A.2 Schemata für alte Dateiformate -- **************************** -- *** Originaldatenformate *** -- **************************** -- ******************************* -- *** Informationsebene Boden *** -- ******************************* CREATE TABLE SNr Rechtswert Hochwert CONSTRAINT ); Boden_standorte_orig ( INTEGER, FLOAT, FLOAT, PK_Boden_standorte_orig PRIMARY KEY (SNr) CREATE TABLE RECNO AREA PERIMETER ILDE# ILDE_ID STONR BOTYP KULTUR MGW GWS SNAS FEUCH GRUN ); Boden_allg_orig ( INTEGER, FLOAT, FLOAT, INTEGER, INTEGER, INTEGER, VARCHAR2(10), VARCHAR2(9), VARCHAR2(10), FLOAT, INTEGER, FLOAT, VARCHAR2(3) CREATE TABLE Boden_schicht_orig ( NR INTEGER, STONR INTEGER, STOID INTEGER, OTIEF INTEGER, UTIEF INTEGER, HORIZ VARCHAR2(10), HNBOD VARCHAR2(5), LGDI FLOAT, STEINE FLOAT, ORGSUB FLOAT, KALK FLOAT, WURZELN VARCHAR2(2), GWTIEFE FLOAT, FSAND FLOAT, MSAND FLOAT, GSAND FLOAT, FSCHLUFF FLOAT, MSCHLUFF FLOAT, 117 118 GSCHLUFF TON PHWERT KFWERT NGESAMT KAKPOT SWERT VWERT PHOSCAL SKELETT LDSV ); ANHANG A. DEFINITION DER RELATIONEN FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, VARCHAR2(5), VARCHAR2(3) -- ********************************* -- *** Informationsebene Nutzung *** -- ********************************* CREATE TABLE RECNO AREA PERIMETER IL_NUTZ# IL_NUTZ_ID PARZNR RFN94 RFN95 RFN96 ; nutzung_orig ( INTEGER, FLOAT, FLOAT, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER) CREATE TABLE SNr Rechtswert Hochwert ); nutzung_standort_orig ( INTEGER, FLOAT, FLOAT -- ******************************** -- *** Informationsebene Relief *** -- ******************************** CREATE TABLE PNr Rechtswert Hochwert Hoehe ); dgm25 ( INTEGER, FLOAT, FLOAT, FLOAT CREATE TABLE slope25 ( PNr INTEGER, Rechtswert FLOAT, Hochwert FLOAT, Hangneigung FLOAT ); A.2. SCHEMATA FÜR ALTE DATEIFORMATE CREATE TABLE PNR Rechtswert Hochwert Exposition ); aspect25 ( INTEGER, FLOAT, FLOAT, FLOAT -- ******************************* -- *** Informationsebene Klima *** -- ******************************* -- wird direkt in neue Relationen -- importiert 119 120 ANHANG A. DEFINITION DER RELATIONEN Anhang B Tipps und Tricks In diesem Abschnitt wird beschrieben wie Vektorkarten praktisch in die Rasterdarstellung transformiert werden. Da die Methode SDO RELATE() nur unzureichende Ergebnisse liefert mussten einige Nachbearbeitungen erfolgen. Eine Möglichkeit, die Rasterdaten zu vervollständigen besteht darin, mehrere Rasterkarten, die mit unterschiedlichen Werten für SDO LEVEL und SDO NUMTILES erzeugt wurden, übereinanderzulegen. Dies entspricht einer Verschneidung mehrerer Rasterkarten und ist relativ schnell durchzuführen, da die Nummern der Rasterpunkte alle dieselben Koordinaten referenzieren (sie beziehen sich alle auf Raster10). Bei diesem Verfahren wird zunächst eine Karte benutzt, die mit einer anderen verschnitten wird. Dabei werden in der Ursprungskarte nur den Punkten neue Werte zugewiesen, die vorher null-Werte bezüglich des betrachteten Attributs hatten. Dieses Verfahren wird anschließend mit anderen Karten iteriert. Die Punktanzahl bei Bodenkarten kann dadurch auf etwa 85000 erhöht werden. Anschließend wird eine SQL-Prozedur angewendet, die für Punkte, denen null-Werte zugewiesen sind, die benachbarten Punkte betrachtet und den am häufigsten vorkommenden Wert diesem Punkt zuordnet. Diese Methode findet sich in ./Programme/Rasterkarten/interpoliere_fehlende_Punkte.sql Sie bezieht sich allerdings lediglich auf die Relation BodenRaster10, für das Nutzungsraster liegt aber im selben Verzeichnis eine entsprechende Datei. Mehrfache Anwendung dieser Prozedur bewirkt, dass allen Rasterpunkten Werte zugewiesen werden. Dieses Verfahren bewirkt aber noch nicht die Beseitigung der schmalen horizontalen Streifen mit falschen Werten. Um diese Werte zu korrigieren existiert folgende Prozedur: ./Programme/Rasterkarten/korrigiere_falsche_PunkteBoden.sql Diese Prozedur betrachtet zu jedem Punkt seinen oberen und unteren Nachbarn und 121 122 ANHANG B. TIPPS UND TRICKS falls diese beiden Punkte den gleichen, vom betrachteten Rasterpunkt abweichenden, Wert besitzen, wird der Wert des Rasterpunktes ebenfalls auf den Wert der Nachbarn korrigiert. Eine andere Möglichkeit, die in der vorliegenden Arbeit zur Erzeugung der Rasterkarten verwendet wurde, arbeitet wie folgt: Zunächst wird eine Rasterkarte mittels des Operators MDSYS.SDO FILTER() erzeugt. Dieser Operator ist lediglich ein Primärfilter und liefert daher für ganze Kacheln Werte. Die Größe der Kacheln ist abhängig von SDO LEVEL. Im vorliegenden Fall wurde ein Wert von 9 verwendet. Dies entspricht 512×512 Kacheln, pro Kachel demnach durchschnittlich weniger als ein Rasterpunkt. Trotzdem werden nur 85910 Rasterpunkten Werte für die Bodenstandorte zugeordnet. Nach dem Betrachten der durch die Relation RasterBoden10 gegebenen Karte wird eine andere Karte ausgewählt, die für die Flächen, für die noch keine Werte vorhanden sind, Werte besitzt und wie oben beschrieben mit der bisher erzeugten Karte verschnitten. Auf die jetzt vorhandene Relation RasterBoden10 wird gegebenenfalls noch die Methode zur Interpolierung der fehlenden Punkte angewendet. Das Ergebnis ist für die weiteren Berechnungen benutzt worden. Zur Erzeugung der Relation RasterNutzung10 wird analog vorgegangen. Anhang C Visualisierung Die in dieser Arbeit dargestellten Abbildungen des Untersuchungsgebietes Groß-Ilde wurden mithilfe zweier Visualisierungstools erzeugt, deren Benutzung hier kurz erläutert werden soll. C.1 Rasterkarten Zur Darstellung der Rasterkarten wurde das Programm ./Programme/Rasterkarten/jhpplot.java verwendet. Der Aufruf dieses Programms erfolgt mit drei Parametern: java jhpplot Eingabedatei Fenstergroesse_x Fenstergroesse_y Die Parameter Fenstergroesse x bzw. Fenstergroesse y bestimmen die Größe des Ausgabefensters. Die Punkte werden entsprechend skaliert. Die Eingabedatei muss folgendes Format besitzen, dass auch zum Export der in der Datenbank berechneten Werte in ein GIS eignet: x-Koordinate x1 x2 x3 ... y-Koordinate y1 y2 y3 ... Attributwert v1 v2 v3 ... Zur Ausgabe einer solchen Datei aus der Datenbank wird die Datei ./Programme/Rasterkarten/ausgabe.sql verwendet. Das Visualisierungsprogramm liest zunächst alle Punkte ein und berechnet anschließend aus den Koordinaten die maximalen und minimalen Ausdehnungen des darzustellenden Gebietes. Dies wird für die Skalierung der Punkte benötigt. Zusätzlich 123 124 ANHANG C. VISUALISIERUNG werden noch die Attributwerte betrachtet, die auf einen Bereich von 0 bis 255 skaliert werden, um die Anzahl der zur Verfügung stehenden Farben ausnutzen zu können. C.2 Vektorkarten Zur Darstellung der Vektorkarten wurde das Programm ./Programme/Vektorkarten/plotPolygone.java verwendet. Beim Aufruf dieses Programms ist lediglich der Name einer Eingabedatei zu übergeben, die folgenden Aufbau hat: Attributwert1 sdo_elem_info1 x11,y11,x12,y12,x13,y13 ... Attributwert2 sdo_elem_info2 x21,y21,x22,y22,x23,y23 ... ... Attributwert ist dabei für die Farbwahl in der Darstellung ausschlaggebend. Der Wert sdo elem info wird aus der Datenbank übernommen und dient der Interpretation des Polygons (Polygon, Polygon mit Loch, Multipolygon), um die Darstellung korrekt zu gestalten. Es folgen die Koordinaten, die ebenfalls unbereinigt aus der Datenbank gelesen werden. Um beispielsweise ein Inselpolygon darzustellen werden die zwei in der Koordinatenliste vorhandenen einfachen Polygone vom Programm zunächst extrahiert und intern als zwei einzelne Polygone weiterverarbeitet. Auch dieses Programm berechnet die Ausmaße der darzustellenden Karte, um die Polygone an die richtigen Stellen zu zeichnen. Die Eingabedatei für dieses Programm wird in zwei Schritten erhalten. Zunächst werden die Attributwerte und die benötigten Polygoninformationen aus der Datenbank ausgelesen. Dies geschieht mit ./Programme/Vektorkarten/ausgabe.sql In diesem SQL-Skript müssen ebenfalls Anpassungen für die jeweils auszugebenden Werte gemacht werden. Das Ergebnis ist eine Ausgabedatei mit begrenzter Zeilenlänge. Daher müssen die Zeilen wieder zusammengesetzt werden. Dies wird durch das Programm ./Programme/Vektorkarten/converter.java realisiert. Dieses Programm entfernt alle Leerzeichen bei den Koordinatenwerten. Die benötigten Zeilenumbrüche zur Interpretation der Daten bleiben aber erhalten. Anhang D Hilfsprogramme Datenimport D.1 Konvertierung der Sachdaten Das Programm convert.java erzeugt aus einer Eingabedatei im ASCII-Format SQLKommandos, um die Werte der ASCII-Datei in eine Relation einzulesen. Aufruf des Programms: java convert InputFile NameRelation #Attribute NameAttr[1] TypWert[1] NameAttr[2] TypWert[2] ... Die einzelnen Übergabeparameter haben folgende Bedeutung: • InputFile: Name der Eingabedatei • NameRelation: Name der Relation, in die die Werte eingefügt werden sollen • #Attribute: Anzahl der Attribute der Relation NameRelation • NameAttr[i]: Name des i-ten Attributs der Relation NameRelation • TypWert[i]: Wertebereich des Attributs NameAttr[i] Anmerkung: Für TypWert[i] wird nur zwischen s für Zeichenkette und nicht s als numerischer Wert unterschieden. Das folgende Beispiel zeigt die Benutzung dieses Programmes für eine einfache Datei, die jeweils zwei Zahlen und ein Zeichen pro Zeile enthält. Beispiel: Eingabedatei: testdatei.txt 1 2 a 3 4 b 5 6 c 125 126 ANHANG D. HILFSPROGRAMME DATENIMPORT java convert testdatei.txt Relation 3 Attribut1 i Attribut2 i Attribut3 s Ausgabe: insert into Relation(Attribut1,Attribut2,Attribut3) values (1,2,´a´); insert into Relation(Attribut1,Attribut2,Attribut3) values (3,4,´b´); insert into Relation(Attribut1,Attribut2,Attribut3) values (5,6,´c´); Diese Ausgabe kann in eine Datei umgelenkt werden, die dann als SQL-Skript für den Datenimport zur Verfügung steht. D.2 Konvertierung der Polygone Das Programm convert pol ora.java erzeugt aus einer Datei mit Polygondaten eine Datei, die vom SQL-Loader mit der in Kapitel 5.3 angegebenen Kontrolldatei eingelesen werden kann. Aufruf des Programms: java convert_pol_ora Eingabedatei > Ausgabedatei Beispiel: Eingabedatei: testdatei.txt 1 x1 x2 x3 y1 y2 y3 END 2 x4 x5 x6 END y4 y5 y6 java convert pol ora testdatei.txt Ausgabe: 1,3,,,1,3,1;x2,y2,x3,y3: 2,3,,,1,3,1;x5,y5,x6,y6: Diese Ausgabe kann in eine Datei umgelenkt werden, die dann als SQL-Skript für den Datenimport zur Verfügung steht. Anm.: Die Eingabedateien sind teilweise fehlerbehaftet. Die zwei auftretenden Fehler sind, dass Polygone die Nummer -99999 haben und dass Punkte doppelt direkt nacheinander in einem Polygon vorkommen. Doppelte Punkte werden von Spatial ignoriert, die Polygone mit falschen Nummern werden vom Konverter entfernt. Anhang E Beispielanfragen Was ist die minimale und maximale Dauer des kapillaren Aufstiegs im Untersuchungsgebiet ? SELECT MIN(ta),MAX(ta) FROM vbn; Welches ist die minimale x-Koordinate in Raster10 ? SELECT MIN(a.Rasterpunkt.SDO_POINT.x) FROM Raster10 a; Wieviele Flächen wurden 1996 wie genutzt und wie groß ist die Summe der Flaechen ? SELECT n.nutznr, COUNT(*), SUM(mdsys.sdo_geom.sdo_area(nf.Geometrie,b.diminfo))/10000 AS Flaeche FROM NutzungStandort ns, Anbau a, Nutzung n, NutzungFlaeche nf, sdo_geom_metadata b WHERE ns.snr=a.snr AND nf.snr=ns.snr AND a.nnr=n.nnr AND n.jahr=1996 AND b.table_name=’NutzungFlaeche’ AND b.column_name=’Geometrie’ GROUP BY n.nutznr ORDER BY Flaeche; Welche Polygone beschreiben im Jahr 1996 Flächen, in denen Ackerbau betrieben wurde? SELECT a.snr FROM NutzungFlaeche a, Anbau b, Nutzung c WHERE a.SNr=b.SNr AND b.NNr = c.NNr AND c.Jahr = 1996 AND c.NutzNr between 8000 AND 8999; 127 128 ANHANG E. BEISPIELANFRAGEN Literaturverzeichnis [1] Adhoc-Arbeitsgruppe Boden; Bodenkundliche Kartieranleitung (4.Auflage); E. Schweizerbart’sche Verlagsbuchhandlung, Hannover; 1996 (Nachdruck) [2] Atkinson M., Bancilhon F., DeWitt D., Dittrich K., Maier D., Zdonik S.: The Object-Oriented Database System Manifesto, In: Kim W., Nicolas J.-M., Nishio S. (Hrsg): Deductive and Object-Oriented Databases, Proc. of the 1st Int. Conf., DOOD’89, Kyoto, Japan, December 1989, S. 223-240; North-Holland, Amsterdam; 1990. [3] Balzert H.; Lehrbuch der Software-Technik; Spektrum Akademischer Verlag, Heidelberg-Berlin-Oxford, ISBN 3-8274-0042-2; 1996 [4] Bill R.; Grundlagen der Geo-Informationssysteme, Band 2, Analysen, Anwendungen und neue Entwicklungen; Herbert Wichmann Verlag, Hüthig GmbH, Heidelberg, ISBN 3-87907-228-0; 1996 [5] Cornell G.; Java bis ins Detail; Heise, Hannover, ISBN 3-88229-087-0; 1996 [6] Dehnhardt W.; Anwendungsprogrammierung mit JDBC; Hanser, München-Wien, ISBN 3-446-21265-5; 1999 [7] Duttmann R.; Partikuläre Stoffverlagerungen in Landschaften; Geographisches Institut der Universität Hannover, Abt. Physische Geographie und Landschaftsökologie; Universität Hannover; 1999 [8] Elmasri R., Navathe S.B.; Fundamentals of Database Systems; Addison-Wesley, ISBN 0-201-54263-3; 2000 [9] Fowler M.; Kendall S.; UML konzentriert; Addison-Wesley-Longman, Bonn 1998 [10] Göpfert W.; Raumbezogene Informationssysteme; Herbert Wichmann Verlag GmbH, Karlsruhe; 1987 [11] Goudie A.; Physische Geographie Spektrum Akademischer Verlag GmbH, Heidelberg-Oxford-Berlin; 1995 [12] Hake G., Grünreich D.; Kartographie (7.Auflage); Walter de Gruyter, Berlin - New York; 1994 129 130 LITERATURVERZEICHNIS [13] Kemper A., Eickler A.; Datenbanksysteme; Oldenbourg Verlag, München; 1997 [14] Leser H. (Herausgeber); Handbuch des Geographieunterrichts, Band 11, UMWELT: Geoökosysteme und Umweltschutz; Aulis Verlag Deubner & Co KG, Köln; 1997 [15] Lipeck U.; Skript zur Vorlesung Datenbanksysteme WS 95/96; Institut für Informatik, Universität Hannover 1996 [16] Neteler M.; Das GRASS-Handbuch; Geographisches Institut der Universität Hannover, Abt. Physische Geographie und Landschaftsökologie; Universität Hannover; 2000 [17] Müller Udo; Auswertungsmethoden im Bodenschutz - Dokumentation zur Methodenbank des Niedersächsischen Bodeninformationssystems; Niedersächsisches Landesamt für Bodenforschung; Hannover; 1997 [18] OpenGIS Consortium, Inc; OpenGIS Simple Features Specification for SQL; 1999 [19] Orenstein J.A., Merret T.H.; A Class of Data Structures for Associative Searching; In: Proceedings of the 4th ACM SIGACT-SIGMOD-SIGART Symposium on Principles of Database Systems; 1984 [20] Rumbaugh J., Jacobson I., Booch G.; Unified Modelling Language – Reference Manual; Addison-Wesley 1999 [21] Rumbaugh J., Jacobson I., Booch G.; Unified Software Development Process; Addison-Wesley 1999 [22] Stonebraker M.; Object-relational DBMSs - The next great wave; Morgan Kaufmann, San Francisco; 1996 [23] Online Dokumentation zu Spatial [24] www.gis-tutor.de Erklärung Hiermit erkläre ich, dass ich die vorliegende Arbeit und die zugehörige Implementierung selbständig verfasst und dabei nur die angegebenen Quellen und Hilfsmittel verwendet habe. Hannover, den 15. Februar 2000 131