PDF file - IDB - Universität Bonn

Werbung
RHEINISCHE FRIEDRICH-WILHELMS-UNIVERSITÄT BONN
INSTITUT FÜR INFORMATIK III
Diplomarbeit
Interaktive Manipulation raumbezogener
Datenbanken über 2D-Bildschirmkarten
Vorgelegt von
Zheyi Ji
Bonn, Mai 2005
Betreuer: Prof. Dr. Rainer Manthey
Inhaltsverzeichnis
1.
2.
Einleitung ........................................................................................................................ 3
Grundlagen relationaler Datenbanken............................................................................ 5
2.1 Datenbankentwurf ................................................................................................. 5
2.2 Das Entity-Relationship-Modell ............................................................................. 8
2.3 Das relationale Modell ......................................................................................... 10
2.4 Normalisierung .................................................................................................... 13
2.5 Grundlagen der SQL ........................................................................................... 15
2.6 Microsoft Access.................................................................................................. 19
3. Visual Basic und Microsoft .NET................................................................................... 22
3.1 Microsoft .Net Framework.................................................................................... 22
3.1.1 Struktur des Microsoft .NET Frameworks.................................................. 23
3.1.2 Kompilierung der .NET-Programme .......................................................... 24
3.2 ADO .NET............................................................................................................ 26
3.3 Visual Basic ......................................................................................................... 28
3.4 Unterschiede zwischen VB und VB .NET ............................................................ 32
4. Geo-Informationssysteme............................................................................................. 33
4.1 Geoobjekte .......................................................................................................... 33
4.2 Modellierung von Geoobjekten ............................................................................ 35
4.3 Präsentation von Geoobjekten ............................................................................ 37
4.4 Kartenprojektion .................................................................................................. 38
5. Modellierung von Geoobjekten in VisMap .................................................................... 41
5.1 Primärmodell der Geoobjekte .............................................................................. 42
5.2 Präsentationsmodell der Geoobjekte................................................................... 46
6. VisMap .......................................................................................................................... 47
6.1 Systemarchitektur................................................................................................ 47
6.2 GUI ...................................................................................................................... 49
6.2.1 Layout der Bildschirmkarte........................................................................ 49
6.2.2 Steuerelemente des Hauptfensters ........................................................... 50
6.2.3 Konfiguration der Bildschirmkarte ............................................................. 52
6.3 Interaktion mit VisMap ......................................................................................... 53
6.3.1 Normalmodus ............................................................................................ 53
6.3.2 Einfügemodus ........................................................................................... 57
6.4 Fenstermanager .................................................................................................. 60
6.4.1 Ereignisinterpretation ................................................................................ 60
6.4.2 Kommunikation mit der Datenbank ........................................................... 62
6.4.3 Pfadsuche ................................................................................................. 66
6.5 Kartengenerator................................................................................................... 67
7. Zusammenfassung und Ausblick .................................................................................. 71
Literaturverzeichnis............................................................................................................... 73
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Ich erkläre hiermit, dass ich die vorliegende Arbeit selbständig verfasst und keine anderen als
die angegebenen Quellen und Hilfsmittel verwendet habe.
Bonn, Mai 2005
2
1. Einleitung
Seit Jahrtausenden versuchen die Menschen, visuelle Darstellungen räumlicher Objekte zu
gewinnen. In der alten Zeit lassen sich die Informationen nur analog darstellen, es findet
meistens in Form von Karten statt. Erst seit der Erfindung des Computers ist es möglich,
raumbezogene Informationen in digitaler Form zu speichern. Dies ist ein großer Fortschritt, da
man in digitaler Form Informationen leichter darstellen, verarbeiten und verbreiten kann.
Die Anwendungsmöglichkeiten rechnergestützter Informationssysteme für raumbezogene
Daten sind vielfältig. In der Wirtschaft können sie zur Standortplanung, Ver-/Entsorgung oder
Verkehrsleitung eingesetzt werden. In der wissenschaftlichen Forschungen wie zum Beispiel
Geographie, Klimatologie und Archäologie spielen sie ebenfalls eine wichtige Rolle. Im Alltagsleben werden sie häufig benutzt für GPS-Navigation, Routenplaner und Stadtpläne. In
dieser Diplomarbeit sowie in ihren zwei Vorgängerarbeiten wird ein 2D-Bildschirmkarten-System für die automatische Kartenerstellung und interaktive Manipulation raumbezogener Daten entwickelt, das für Landkarten, Stadtpläne oder Routenplaner benutzt werden
kann. Es gibt schon zahlreiche kommerzielle GIS-Anwendungen auf dem Markt, die ebenfalls
Bildschirmkarten als Schnittstellen anbieten. Die Bildschirmkarten solcher Anwendungen basieren aber meist auf eingescannten analogen Karten, die nicht automatisch vom Programm
erzeugt worden sind. Es ist bei solchen Systemen in der Regel auch nicht möglich, die Geoobjekte in der Datenbank direkt in der Bildschirmkarte zu bearbeiten. In dieser Arbeit wird die
Bildschirmkarte dagegen automatisch von einem VB-Programm erzeugt, und die Geoobjekte
in der Datenbank können durch Mausklicks auf die Bildschirmkarte leicht bearbeitet werden.
In der Diplomarbeit von Lutz Kunicke [Ku03] sind manche primitive Operationen wie zum
Beispiel das Einfügen der Linienzüge und der Vielecke nicht implementiert worden. Das DataMap-System von Ernest Hadziresic [Ha04] ist eine verbesserte Version von VirtualMap-Systems, bietet aber keine Suchfunktionen, und das Bedienungsinterface ist nicht
ausgereift. Beide Systeme nutzen nur einfache Datenbankstrukturen und ihnen fehlt ein allgemeines Konzept der Modellierung von Geoobjekten. Das Hauptziel dieser Diplomarbeit ist
es, eine technische, funktionale und konzeptuelle Verbesserung der zwei Vorgängerarbeiten
anzubieten. Dazu wird das VisMap-System entwickelt, das aus einer Datenbank und einem
VB-Programm besteht. Die Datenbank enthält sämtliche Informationen über die räumlichen
Objekte der jeweiligen Anwendung. Das anwendungsunabhängige VB-Programm soll in der
Lage sein, die für eine Visualisierung der Geoobjekte relevanten Informationen aus der Datenbank auszulesen, eine interaktive graphische Darstellung dieser räumlichen Objekte auf
dem Bildschirm zu erzeugen und ein benutzerfreundliches graphisches Interface anzubieten,
um die Informationen in der Datenbank zu manipulieren. VisMap ist kein System für eine bestimmte Anwendung, sondern es kann mit einer leichten Anpassungsarbeit in unterschiedlichen Anwendungsgebieten eingesetzt werden. Als Anwendungsbeispiel werden in dieser
Diplomarbeit das Eisenbahn- und Autobahnnetz Deutschlands benutzt, die Koordinatendaten
stammen von http://opengeodb.sourceforge.net/.
3
Statt Visual Basic 6, das die zwei Vorgängerarbeiten benutzt haben, wird in dieser Diplomarbeit eine echte objektorientierte Erweiterung dieser Sprache verwendet, nämlich Visual
Basic .NET, was zahlreiche Vorteile mit sich bringt. Damit das VB-Programm mit der Datenbank kommunizieren und die Daten in der Datenbank manipulieren kann, wird die neue Version von ADO, ADO .NET, verwendet. Das zugrunde liegende Datenbanksystem ist wie
bisher Microsoft Access, um den Administrationsaufwand der Datenbank zu verringern. Dank
der vielfältigen Daten-Provider von ADO .NET kann das Programm später sehr einfach umwandelt werden, damit es auch z.B. mit Microsoft SQL Server, ORACLE und anderen
ODBC-kompatible Datenbanksystemen arbeiten kann.
Im Kapitel 2 werden die Grundlagen von Datenbanken erläutet. Dabei werden nicht nur das
Konzept des Datenbankentwurfs, das Entity-Relationship-Modell und das relationale Datenmodell, sondern auch das DBMS Microsoft Access vorgestellt. Im Kapitel 3 werden die
Microsoft .NET-Plattform, Visual Basic .NET, und ADO .NET vorgestellt. Außerdem werden
die Vorteile von VB .NET gegenüber seinen Vorgängerversionen erörtert. Im Kapitel 4 werden
Geoobjekte behandelt, und deren Modellierung und Präsentation erläutet.
Im 5. Kapitel wird der konzeptuelle Entwurf des VisMap-Systems präsentiert. Dabei stehen
die Modellierung der Geoobjekte und der Entwurf der Access-Datenbank im Vordergrund. In
Kapitel 6 wird der Aufbau des VB-Programms von VisMap erläutet. Hier wird vorgestellt, wie
die Schnittstelle gestaltet ist, wie VisMap mit der Datenbank kommuniziert, wie es eine graphische Darstellung der Geoobjekte herstellt, wie es auf die Ereignisse der Steuerelemente
reagiert und welche Funktionen es bietet, um Geoobjekte zu bearbeiten.
4
2. Grundlagen relationaler Datenbanken
Der Inhalt dieses Kapitels orientiert sich am Buch „Datenbanksysteme“ von Alfons Kemper
[KeEi01] und am Vorlesungsskript „Informationssysteme“ von Rainer Manthey [Man03].
Die Datenverwaltung und Speicherung spielen eine zentrale Rolle in einem
Geo-Informationssystem. Nach einer formalen Definition besteht ein Datenbanksystem (DBS)
aus einem Datenbank-Managementsystem (DBMS) und einer oder mehreren Datenbanken.
Das DBMS dient der Verwaltung und Organisation einer Menge von Objekten, der Zusammenfassung zu Datensätzen und der Beschreibung von Beziehungen und Abhängigkeiten
zwischen Daten und Datensätzen. Es bildet die funktionale Schnittstelle zwischen dem Anwender und den Datenbanken, verwaltet den Zugriff auf die Datenbank, kontrolliert die Datenbankkonsistenz und bietet Funktionen, um die Datensätze zu manipulieren. Das DBMS
verfügt über eine Data Definition Language (DDL) und eine Data Manipulation Language
(DML).
Mit der DDL wird die Struktur der abzuspeichernden Datenobjekte definiert. Dabei werden
gleichartige Datenobjekte durch ein gemeinsames Schema beschrieben. Die Strukturbeschreibung aller Datenobjekte des betrachteten Anwendungsbereichs nennt man das Datenbankschema. Die DML besteht aus der Anfragesprache (Query Language) und der
Datenmanipulationssprache zur Änderung, Löschen und Einfügen von Abgespeicherten Daten. Die DML kann zwei unterschiedliche Arten genutzt werden: Interaktiv, indem
DML-Kommandos direkt im DBMS eingegeben werden, oder indem sie in einem Programm
eingebettet wird.
Die Datenbanksysteme basieren immer auf einem Datenmodell. Ein Datenmodell besteht aus
einer bestimmten Zusammenstellung von Konzepten zum Modellieren von Daten der realen
Welt und/oder im Rechner. Darüber hinaus stellen Datenbanksysteme Werkzeuge zur Definition, Generierung, Manipulation und Abfrage von Daten dar. Das heutzutage am meisten
benutzte Datenmodell ist das relationale Datenmodell. Außerdem gibt es auch das hierarchische Datenmodell, das objektorientierte Datenmodell und das deduktive Datenmodell.
2.1
Datenbankentwurf
Die ANSI/SPARC schlug bereits 1978 eine konzeptionelle Datenbankarchitektur vor, die auch
heute noch breite Anerkennung findet und in dieser Form die Grundlage der meisten kommerziellen und wissenschaftlichen Datenbanksysteme bildet. Diese Drei-Ebenen-Architektur
unterscheidet bei der Modellierung in interne, externe und konzeptuelle Ebene einer Datenbank.
5
Die interne Ebene liegt am dichtesten am physikalischen Speicher einer Datenbank. Auf
dieser Ebene wird die Speicherorganisation festgelegt. Es wird bestimmt, auf welchem
Speicherort und welchem Speichermedium (Platte, Band) welche Daten wie physisch abgelegt sind. Die Strukturen dieser Ebene können die Effizienz des gesamten Datenbanksystems
stark beeinflussen.
Die konzeptuelle Ebene liegt oberhalb der internen Ebene. Auf dieser Ebene erstellt man das
organisationsweite Datenmodell sowie das organisationsweite Datenbankschema. Es wird
festgelegt, welche Daten in der Organisation insgesamt von Bedeutung sind und mit welcher
Struktur sie in der Datenbank abgelegt sein sollen.
Die externe Ebene bietet die Schnittstelle zu den Anwendern und Applikationen. Auf dieser
Ebene kann der Anwender Daten in die Datenbank eintragen (INSERT), Daten ändern
(UPDATE, DELETE), Daten aus der Datenbank selektieren (SELECT) und die für sich relevante Aussicht (VIEW) definieren. Man kann sowohl mit einem User Interface (GUI) als auch
mit einer Programmschnittstelle (API) auf die Datenbank zugreifen.
Die oben genannten drei Ebenen kommunizieren ständig miteinander. Bei jedem Zugriff auf
die Datenbank werden die Daten zwischen zwei übereinander liegenden Ebenen bis zum
physikalischen Speicher und wieder zurück – bis zur externen Sicht – übertragen. Die drei
Ebenen und deren gegenseitige Kommunikationen werden von DBMS organisiert.
Benutzer 1
Benutzer 2
Externe Schicht A
Benutzer 3
Externe Schicht B
Benutzer 4
Externe Schicht C
externe/konzeptuelle Abbildung
Konzeptuelle Schicht
Konzeptuelle/interne Abbildung
Interne Schicht
Abb. 2.1: Drei-Ebenen-Modell
6
DBMS
Die Aufgabe des Datenbankentwurfs ist der Entwurf der logischen und physischen Struktur
einer Datenbank so dass die Informationsbedürfnisse der Benutzer in einer Organisation für
bestimmte Anwendungen adäquat befriedigt werden können. Der Datenbankentwurf orientiert
sich an den oben beschriebenen Abstraktionsebenen einer Datenbankanwendung.
Bevor jedem Datenbankentwurf soll eine Anforderungsanalyse durchgeführt werden. In der
Anforderungsanalyse sollen die Abgrenzung und Eingrenzung des zu modellierenden Realitätsausschnittes festgelegt werden. Außerdem wird auch bestimmt, auf welche Weise die
Objekte zu bearbeiten sind. Es sind ggf. Nutzergruppen mit unterschiedlichen Anforderungsprofilen zu berücksichtigen.
Nach Fertigstellung der Anforderungsspezifikation erfolgt der konzeptuelle Entwurf. In dieser
Phase werden die für die Verarbeitung wesentlichen Merkmale von Objekten und Beziehungen bestimmt. In diesem Entwicklungsschritt wird die Modellierung mit dem „Entity-Relationship-Modell“ bevorzugt. Im relationalen Datenmodell werden zusätzlich alle Details
zu den „Relationen“ der Datenbasis festgelegt, der so genannte logische Entwurf. Es erfolgt
eine Normierung der Relationen zur Vermeidung von Anomalien bei der Nutzung der Datenbank und zur Beseitigung von Redundanz.
Abb. 2.2: Datenbankentwurf und 3-Ebenen-Architektur [Vo99]
Der letzte Schritt des Datenbankentwurfs, der physische Entwurf, verfolgt das Ziel der Effizienzsteigerung. Im physikalischen Modell werden schließlich die Art der Datenspeicherung
sowie der zugehörige Zugriffsmechanismus festgelegt. Bei manchen Datenbanksystemen
kann dabei auch angegeben werden, welche Datenstrukturen für diese Zugriffspfade (Indizierung) benutzt werden sollen.
7
Für diese Diplomarbeit wird das Entity-Relationship-Modell für den konzeptuellen Entwurf und
das relationale Datenmodell für den logischen Entwurf benutzt, die im nächsten Abschnitt
erklärt werden.
2.2
Das Entity-Relationship-Modell
Das am häufigsten benutzte Modell für den konzeptuellen Entwurf ist das Entity-Relationship-Modell, das im Jahr 1976 von Peter Chen entwickelt wurde. Es dient als Abstraktion eines Ausschnitts der realen Welt. Es ist aus mindestens drei unterschiedlichen
Elementen aufgebaut: aus den so genannten Entitäten (Gegenständen), den Attributen von
Entitäten und den so genannten Relationships (Beziehungen zwischen den Gegenständen).
Entitäten und Attribute
Entitäten sind wohlunterscheidbare physisch oder gedanklich existierende Konzepte der zu
modellierenden Welt. Die einzelnen Entitäten, die ähnlich, vergleichbar oder zusammengehörig sind, werden zu einem Entitätstyp zusammengefasst.
Entitäten besitzen Attribute (Eigenschaften), wobei die konkreten Merkmalsausprägungen als
Attributwerte bezeichnet werden. Die Domäne (Wertebereich) umfasst sämtliche mögliche
oder zugelassene Merkmalsausprägungen.
Im ER-Diagramm werden die Entitätstypen als Rechtecke dargestellt. Die Attribute werden
als Kreise oder Ovale graphisch beschrieben, die durch ungerichtete Kanten mit dem zugehörigen Rechteck verbunden werden.
Stadt
id
Stadt
KFZ
Name
Rathaus
Liegt_in
Baujahr
Population
Abb. 2.3: Entitäten und ihre Attribute
Es gibt nicht nur die Entitäten, die autonom existieren und innerhalb ihrer Entitätsmenge über
die Schlüsselattribute eindeutig identifizierbar sind, sondern auch schwache Entitäten, bei
denen dies nicht gilt. Die schwachen Entitäten sind in ihrer Existenz von einer anderen, übergeordneten Entität abhängig und oft nur in Kombination mit dem Schlüssel der übergeordneten Entitäten eindeutig identifizierbar. Sie werden durch doppelt umrandete Rechtecke
8
repräsentiert. Die Beziehung zu dem übergeordneten Entitätstyp wird ebenfalls durch eine
Verdopplung der Raute und der von dieser Raute zum schwachen Entitätstyp ausgehenden
Kante markiert.
Beziehungen
Zwischen verschiedenen Entitäten können Beziehungen existieren. Beim konzeptuellen Datenbankentwurf sind die Beziehungen zwischen Entitätstypen von Interesse. Die Menge solcher Beziehung nennt man Beziehungstypen. Die Beziehungstypen werden als Rauten mit
entsprechender Beschriftung repräsentiert.
Man kann Beziehungstypen hinsichtlich ihrer Funktionalität charakterisieren. Die Funktionalitäten stellen Integritätsbedingungen dar, die in der zu modellierenden Welt immer gelten
müssen. Es gibt 3 Arten von Beziehungstyp. Seien A und B Entitätstypen und R eine Relation
R(a,b), dann gilt:
1: 1 Typ:
1: n Typ:
n: m Typ:
one-to-one-Relationship
Zu jedem a aus A gibt es genau ein b aus B mit R(a,b) und umgekehrt.
one-to-many-Relationship
Zu jedem a aus A gibt es ein oder mehrere b aus B mit R(a,b).
many-to-many-Relationship
Zu jedem a aus A gibt es ein oder mehrere b aus B mit R(a,b) und zu jedem b
aus B gibt es ein oder mehrere a aus A mit R(a,b)
M
N
Begrenzung
Flächen
(3,*)
Kanten
(2,2)
Abb. 2.4: Funktionalität der Beziehung und (min, max)-Notation
Bei der Angabe der Funktionalitäten ist für eine Entität nur die maximale Anzahl von Beziehungsinstanzen relevant. Wenn man für eine Entität die präzisen Unter- und Obergrenzen
festlegen will, ist die (min, max)-Notation die richtige Lösung. Die Markierung (mini, maxi) gibt
an, dass es für alle ei∈Ei mindestens mini viele Tupel der Art (...,ei, …) und höchstens maxi
viele solcher Tupel in R gibt.
Um eine weitere Strukturierung der Entitätstypen zu realisieren werden Generalisierung und
Aggregation eingesetzt. Bei der Generalisierung werden die Attribute ähnlicher Entitätstypen
zusammengefasst und einem gemeinsamen Obertyp zugeordnet. Die ähnlichen Entitätstypen,
aus denen diese Eigenschaften faktorisiert werden, heißen Untertypen des generalisierten
Obertyps. Die Untertypen erben die Attribute von Obertypen. Bei dem jeweiligen Untertyp
verbleiben nur die nicht faktorisierbaren Attribute. Somit stellt der Untertyp eine Spezialisie-
9
rung des Obertyps dar. Die Generalisierung wird durch eine Beziehung mit dem Namen IS-A
ausgedrückt, welche durch ein Sechseck, verbunden mit gerichteten Pfeilen symbolisiert
wird.
Auto
IS-A
Fahrzeug
IS-A
PART-OF
LKW
PKW
PART-OF
Auto
Generalisierung
Auto
Aggregation
Abb. 2.5: Generalisierung und Aggregation
Durch die Aggregation werden einem übergeordneten Entitätstyp mehrere untergeordnete
Entitätstypen zugeordnet. Die unterordneten Entitätstypen bilden in ihrer Gesamtheit den
übergeordneten Entitätstyp. Diese Beziehung wird als PART-OF bezeichnet, um zu betonen,
dass die untergeordneten Entitäten Bestandteile der übergeordneten Entitäten sind.
2.3
Das relationale Modell
Das relationale Datenmodell dient den meisten derzeitigen Datenbanken als Grundlage. In
kommerziellen Datenbanken wird es seit etwa 1981 eingesetzt. Es wurde von E. F. Codd um
1970 vorgestellt mit dem Ziel, die Datenunabhängigkeit zu gewährleisten und basiert auf einer Variante des mathematischen Konzepts der Relation, in der Relationen auf einfache
Weise als Tabellen interpretiert werden. Es sind im Wesentlichen zwei Gründe, die für das
relationale Datenmodell als logisches Datenbankmodell sprechen: [GI03]
•
Einfachheit: die gesamte Information einer relationalen Datenbank wird
einheitlich durch Werte repräsentiert, die mittels eines einzigen Konstrukts
(nämlich der "Relation") strukturiert sind
•
Systematik: das Modell besitzt eine fundierte mathematische Grundlage: die
Mengentheorie
Im Gegensatz zum Entity-Relationship-Modell, welches ein konzeptuelles Modell darstellt,
handelt es sich beim relationalen Modell um ein logisches Datenmodell. Es liegt in gewisser
Hinsicht eine Stufe "tiefer". Hier werden keine abstrakten Entitäten oder Entitätstypen mehr
betrachtet, sondern nur noch deren konkrete, datenmäßige Umsetzung. Das Ziel der logi-
10
schen Datenmodellierung ist das Anordnen der zu speichernden Informationen mit Hilfe eines
Modells, welches eine möglichst redundanzfreie Speicherung unterstützt und geeignete Operationen für die Datenmanipulation zur Verfügung stellt.
In der Regel basiert die logische Datenmodellierung auf einem fertig gestellten konzeptuellen
Schema, das mit Hilfe bestimmter Richtlinien und Regeln in möglichst eindeutiger Weise auf
ein relationales Schema abgebildet wird. Die grundlegende Organisationsform der Daten im
relationalen Datenbankmodell ist die Relation. Das Relationale Datenmodell basiert auf der
mathematischen Definition einer Relation:
Gegeben seien n nicht notwendigerweise unterschiedliche Wertebereiche
(Domänen) D1, D2, …, Dn. Eine Relation R ist dann definiert als eine Teilmenge
des kartesischen Produkts der n Domänen:
R ⊆ D1 × D2 × L × Dn
Eine derartige Relation kann anschaulich durch eine zweidimensionale Tabelle dargestellt
werden, wobei zu beachten ist, dass sich die Definition einer Relation nicht mit der einer Tabelle deckt und umgekehrt. Beim relationalen Datenmodell wird also der gesamte Datenbestand durch einfache Tabellen verwaltet, in denen die Daten der Relationen gespeichert
werden. Dabei stellt eine Zeile jeweils einen Datensatz oder ein Tupel dar. Als Beispiel sei
eine einfache Relation Point zur Speicherung punktförmiger Geometrie genannt.
Schema(Point) = (id: LONG, PositionX: SINGLE, PositionY: SINGLE)
Sei ein Relationenschema, dann ist eine gültige Menge von Instanzen gegeben durch:
Point = {(1, 7.21667, 51.4833), (2, 7.1, 50.7333), (3, 8.68333, 50.1167)}
Schlüssel (key) oder Kandidatenschlüssel (candidate key) ist die minimale Kombination
von Attributen, die eine Entität aus einer Entitätsmenge eindeutig identifiziert. Minimal bedeutet hier, dass man nicht alle Attribute angeben muss, um ein einzelnes Tupel einer Relation eindeutig zu identifizieren. Die Zahl der notwendigen oder auch hinreichenden Attribute
hängt natürlich stark von den Inhalten ab. Man kann einen der Kandidatenschlüssel als so
genannten Primärschlüssel auswählen. Es gibt im relationalen Modell einen besonderen
Schlüsseltyp, den so genannten Fremdschlüsseln. Mit diesem werden Abhängigkeiten
zwischen verschiedenen Relationen einer Datenbank definiert.
Um ein Entity-Relationship-Modell in ein relationales Datenbankschema umzuwandeln, sollen
acht Abbildungsregeln abgearbeitet werden. Jede Regel wird für alle im zu bearbeitenden
Entity-Relationship-Modell gefundenen und der Regel entsprechenden Entitätstypen (Regel 1,
2, 7 und 8) oder Beziehungen (Regel 3, 4, 5 und 6) angewendet. Man beachte die korrekte
11
Reihenfolge der Anwendung der Abbildungsregeln in der Praxis (1, 7, 8, 2, 3, 4, 5 und zum
Schluss 6) [GI03].
Regel 1:
Definiere ein Relationenschema R für jeden starken Entitätstypen G, wobei die Eigenschaften
von G die Attribute von R bilden. Bei mehrwertigen Eigenschaften verfahre nach Regel 7.
Wähle einen Primärschlüssel (Identifikationsschlüssel) aus.
Regel 2:
Für jeden schwachen Entitätstypen S mit Eigentümer G erzeuge ein Relationenschema R,
wobei die Eigenschaften von S die Attribute von R bilden. Bei mehrwertigen Eigenschaften
verfahre nach Regle 7. Übernimm den Primärschlüssel des Relationenschemas, das dem
Eigentümer G entspricht und füge ihn als Fremdschlüssel R hinzu. Wähle eine Attributkombination (Kandidatenschlüssel) aus, die dann zusammen mit diesem Fremdschlüssel den
Primärschlüssel der Relation bildet. Erst die Kombination von Fremdschlüssel- und Kandidatenschlüsselattributen bildet den Primärschlüssel von R.
Regel 3:
Suche alle regulären, binären (1,1)(1,1)-, (0,1)(1,1)- und (0,1)(0,1)-Beziehungstypen B. Finde
die Relationenschemata S und T für die beteiligten Entitätstypen. Wähle eines davon (zum
Beispiel S) aus und füge dort den Primärschlüssel von T als Fremdschlüssel sowie die Eigenschaften von B als Attribute hinzu.
Regel 4:
Suche
alle
regulären,
binären
(1,n)(1,1)-,
(0,n)(1,1)-,
(1,n)(0,1)und
(0,n)(0,1)-Beziehungstypen B, sowie die jeweiligen Relationenschemata S und T der beteiligten Entitätstypen. Wähle das Relationenschema auf der "(1,1)"/"(0,1)"-Seite (S) aus und
füge dort den Primärschlüssel von T als Fremdschlüssel hinzu. Ausserdem werden allfällige
Eigenschaften von B als Attribute zu S hinzugefügt.
Regel 5:
Suche alle regulären, binären (0,n)(0,n)-, (0,n)(1,n)- und (1,n)(1,n)-Beziehungstypen B, sowie
jeweils die Relationenschemata S und T der beteiligten Entitätstypen. Definiere für jeden Beziehungstyp B ein neues Relationenschema R. Die Primärschlüssel der Relationenschemata
der beteiligten Entitätstypen S und T werden als Fremdschlüssel übernommen. Sie bilden
zusammen den Primärschlüssel des neuen Relationenschemas R. Füge Attribute, die Eigenschaften von B entsprechen, zu R hinzu.
Regel 6:
Verfahre für n-stellige Beziehungstypen (n>2) analog zu Regel 5, d.h. bilde sie auf eigenständige Relationenschemas ab und übernimm den Primärschlüssel der Relationenschemas
aller beteiligten Entitätstypen als Fremdschlüssel.
12
Regel 7:
Definiere für jede mehrwertige Eigenschaft E ein neues Relationenschema R'. R' enthält ein
Attribut A, das der Eigenschaft E entspricht und den Primärschlüssel K jenes Relationenschemas (R), welches dem Gegenstandstyp entspricht, der E enthält. Der Primärschlüssel
von R' ergibt sich aus der Kombination von A und K (man beachte, dass R keine Attributentsprechung für die mengenwertige Eigenschaft besitzt).
Regel 8:
Definiere ein Relationenschema R für die Superklasse C mit den Attributen A(R) = (K, A1, ...,
An). Bestimme K zum Primärschlüssel von R. Definiere weiter ein Relationenschema Ri für
jede Subklasse Si, (1<=i<=m) mit den Attributen A(Ri) = (K) ∪ (Attribute von Si). Setze den
Primärschlüssel von Si gleich K.
2.4
Normalisierung
Bei komplexen Systemen mit vielen Objekttypen und Beziehungen ist die Modellierung der
Datenstruktur nicht unproblematisch. Bei einem schlecht entworfenen Relationenschema sind
die Daten mehrfach gespeichert, dies verursacht einen höheren Speicherbedarf sowie einen
langsameren Zugriff auf die Daten. Insbesondere können Probleme bei der Datenpflege auftreten, die so genannten Anomalien.
Updateanomalien:
Bei der Aktualisierung der redundanten Einträge in einem Relationenschema kann es passieren, dass nicht alle betroffene Einträge aktualisiert werden. Dies hat die Verletzung der
Datenbankintegrität zur Folge.
Einfügeanomalien:
Beim Einfügen einer Entität in ein Relationenschema mit gemischten Entitätstypen kann es
passieren, dass nur die Attribute von dieser Entität zugewiesen werden, die Attribute von
anderen Entitäten besitzen nur die NULL-Werten.
Löschanomalien:
Wenn die Information bezüglich eines der miteinander vermischten Entitätstypen gelöscht
wird, kann es zum gleichzeitigen und unbeabsichtigten Verlust der Daten des anderen Entitätstypen kommen.
Um die oben genannten Anomalien zu vermeiden, soll man beim Entwurf einer relationalen
Datenbank die Relationen normalisieren. Normalerweise sollte der Normalisierungsprozess
schon auf konzeptueller Ebene stattfinden. Sein Ziel besteht darin, eine gewisse Einheitlichkeit in den Entwurf zu bringen. Allerdings sind bisher die für diesen Prozess erforderlichen
Schritte nur auf der Ebene des relationalen Datenmodells sauber definiert worden. Daher
werden auch wir die Normalisierung auf logischer Ebene betrachten. Der Entwerfe eines
13
konzeptuellen Schemas sollte sich über die Normalisierungsprinzipien im Klaren sein, um mit
einem korrekten konzeptuellen Schema die Implementierung eines korrekten logischen
Schemas zu erleichtern.
Die Theorie der Normalisierung, die durch E. F. Codd begründet worden ist, besteht aus 9
Regeln, die auch als 1. - 9. Normalform bezeichnet werden, von denen die ersten drei die
wichtigsten sind. Um die Umwandlung der Relationen in die drei Normalformen zu verstehen,
müssen wir zuerst das Konzept der Abhängigkeiten zwischen Attributen dieser Relationen
einführen.
Seien A und B Mengen von Attributen des Relationsschemas R, B ist von A funktional abhängig, wenn zu jedem Wert von A höchstens ein Wert von B auftreten kann. Dies wird wie
folgt dargestellt:
A → B
Die funktionalen Abhängigkeiten stellen eine Verallgemeinerung des Schlüsselbegriffs dar.
Um es zu präzisieren, definieren wir hier den Begriff voll funktional abhängig:
Seien A und B Mengen von Attributen des Relationsschema R, B ist von A
voll funktional abhängig, wenn B von A funktional abhängig aber nicht funktional abhängig von einer echten Teilmenge von A ist. Dies wird wie folgt
bezeichnet:
& B
A →
Nun können wir die ersten drei Normalformen definieren:
Erste Normalform:
Eine Relation befindet sich in erster Normalform, wenn jedes Attribut elementar oder atomar,
d.h. unzerlegbar, ist.
Zweite Normalform:
Eine Relation befindet sich in zweiter Normalform, wenn sie die erste Normalform besitzt und
zusätzlich jedes Attribut, das nicht selbst zum Identifikationsschlüssel gehört, voll funktional
vom gesamten Identifikationsschlüssel abhängig ist.
Dritte Normalform:
Eine Relation befindet sich in dritter Normalform, wenn sie die zweite Normalform besitzt und
zusätzlich kein Attribut, das nicht zum Identifikationsschlüssel gehört, transitiv von einem Identifikationsschlüssel abhängig ist.
14
2.5
Grundlagen der SQL
Der Inhalt dieses Abschnittes orientiert sich stark am „SQL: The Complete Reference“ von
James Groff [GrWe02] und am „Die relationale Anfragesprache SQL“ [GI03].
Man benötigt neben der Strukturbeschreibung auch eine Sprache, mit der man Informationen
aus der Datenbank extrahieren kann. Es gibt zwei formale Anfragesprachen, die für die Anfrageformulierung in relationalen Datenbanken konzipiert wurden: die relationale Algebra und
das Relationenkalkül. In ihrer unmittelbaren Form haben sie heute jedoch als DML stark an
Bedeutung verloren, da sie schwer zu durchschauen sind. Stattdessen hat SQL (structured
query language) sich seit Mitte der 80er Jahre für relationale Datenbanken durchgesetzt. Sie
basiert auf den oben genannten zwei formalen Sprachen und ist eine deskriptive, mengenorientierte Sprache. Sie kann sowohl selbständig als auch eingebettet in eine Programmiersprache (C, C++, Java, VB, …) verwendet werden. SQL wurde zunächst in den 70er Jahren
von IBM unter dem Namen „SEQUEL“ entwickelt. In den 80ern erfolgte eine allgemeine
Standardisierung dieser Sprache, die jüngste Version ist SQL99.
SQL kann nicht nur benutzt werden, um die Daten in der Datenbank zu manipulieren. Sie
kann in drei konzeptionelle Teile aufgeteilt werden. Die Datenbankschemata können mittels
SQL erzeugt und abgeändert werden, hier wird sie als Datendefinitionssprache (DDL) benutzt.
Am häufigsten werden die SQL-Anweisungen benutzt, um Anfragen an die Datenbank zu
stellen und Tupel in Tabellen zu mutieren (mit den Anweisungen INSERT, DELETE und
UPDATE), hier dient sie als Datenmanipulationssprache (DML). Außerdem kann mittels SQL
die Sicherheit der Datenbanken kontrolliert werden, hier wird sie als Datenkontrollsprache
(DCL) benutzt.
Relation, Tupel und Attribute werden in SQL als „table", „row" und „column" bezeichnet. Durch
die CREATE TABLE-Anweisung wird ein Relationenschema in der Datenbank definiert. Bei
dem Definieren eines Relationenschemas müssen die zur Relation gehörenden Attribute sowie deren Domänen angegeben werden. Außerdem kann man auch weitere Deklarationen
wie z.B. Wertebeschränkungen (CHECK-Klausel), Standardwerte oder Primär- und Fremdschlüsseldeklarationen angeben.
SQL bietet eine umfangreiche Auswahl der Domänen, Beispiele dafür sind char, number, long
und date. Durch die Deklaration „NOT NULL“ wird festgelegt, dass für das jeweilige Attribut
keine NULL-Werte zulässig sind. Folglich muss beim Einfügen eines Tupels grundsätzlich ein
Wert für dieses Attribut angegeben werden. Primärschlüssel können mit Hilfe der PRIMARY
KEY-Klausel durch eine so genannte „Table Constraint“ deklariert werden. Gefolgt ist ein
Beispiel dafür, wie eine Datenbanktabelle mit Hilfe von SQL definiert werden kann.
CREATE TABLE City
(
Name VARCHAR2(35),
15
Country VARCHAR2(4),
Province VARCHAR2(32),
Population NUMBER CONSTRAINT CityPop
CHECK (Population >= 0),
CONSTRAINT CityKey PRIMARY KEY (Name, Country, Province)
);
Die Möglichkeiten der Datenmanipulation mit SQL können in zwei Kategorien eingeteilt werden. Die eine sind die Datenbankanfragen, welche Inhalte abfragen, aber keine Änderungen
an der Datenbank vornehmen. Die zweite Gruppe sind die Datenmanipulationen, die die Datenbank verändern, die zum Beispiel Daten einfügen, löschen oder abändern.
Bei den Abfragen mit der SQL werden die Daten des Definitionsbereichs (FROM) mit Hilfe
eines Auswahlkriteriums (WHERE) auf einen Bildbereich (SELECT) abgebildet. Dabei entstehen im Ergebnis grundsätzlich wieder Relationen. Die Standardform einer Datenbankanfrage mittels SQL ist wie folgt aufgebaut:
SELECT <Attributliste>
FROM
<Relationenliste>
WHERE
<Bedingungen>
Wobei die Attributliste aus den Namen der Attribute besteht, deren Werte man durch die Anfrage erhalten möchte; Die Relationenliste ist die Aufführung der Namen der Relationen, die
für die Anfrage gebraucht werden. Die Bedingungen identifizieren die Tupel, die durch die
Anfrage zurückgegeben werden sollen.
Es gibt nun eine Reihe von möglichen Erweiterungen des obigen Grundschemas, welche die
Flexibilität von Anfragen massiv erhöhen:
-
mehrere Bedingungen (konjunktiv oder disjunktiv verknüpft)
komplexere Bedingungen (Unteranfragen, Bereichsanfragen, Verbundoperatoren)
speziellere Bildbereiche (Verknüpfung von Attributen)
nicht-relationale Konstrukte (Sortieren, Gruppierungen, Aggregatfunktionen)
Mengenoperationen (Vereinigung, Durchschnitt, Differenz)
Bedingungen können beliebig durch die Anwendung der logischen Operatoren AND und OR
miteinander verkettet werden. Einzelne Bedingungen können mit dem NOT-Operator negiert
werden. Bedingungen haben prinzipiell die Struktur <Attribut> <Operator> <Wert> (z.B. Name=“Zheyi“) wobei die Werte wiederum Attribute, Konstanten oder aber das Resultat von
Unteranfragen sein können, d.h. man muss die Werte von Bedingungen nicht unbedingt fix
definieren, sondern kann sie mittels einer verschachtelten Anfrage generieren. Mit dem Vergleichs-Operator "IN" können Anfragen beliebig tief geschachtelt werden.
16
SQL unterstützt eine Reihe von Vergleichs- und Mengenoperatoren. Vergleichsoperatoren
wie =, <, >, <>, <=, >=, BETWEEN können auf zwei Arten verwendet werden. Ist ein Wert
einer Bedingung eine Konstante, so handelt es sich bei dieser Bedingung um eine Restriktion.
Ist der Wert wiederum ein Attribut einer anderen Relation des Definitionsbereichs, so handelt
es sich um eine Verbundbedingung. Mittels Verbundbedingungen können Daten aus mehreren Relationen miteinander verknüpft werden. Es können nur Attribute mit identischen Domänen miteinander verglichen werden. Sie müssen jedoch nicht den gleichen Namen
besitzen.
Im SELECT-Teil kann anstelle einer Attributliste auch ein „*“ geschrieben werden. Der Effekt
besteht darin, dass alle Attribute des Definitionsbereichs gezeigt werden.
Durch den Vergleichsoperator "LIKE" können Teile von Zeichenketten miteinander verglichen
werden. Teile von Zeichenketten werden mit zwei reservierten Zeichen dargestellt: "%" ersetzt eine unbestimmte Anzahl von Zeichen, während "_" ersetzt ein Zeichen.
Die arithmetischen Standard-Operatoren für Addition (+), Subtraktion (-), Multiplikation (*) und
Division (/) können für alle numerischen Werte oder Attribute mit numerischen Domänen eingesetzt werden.
SQL unterstützt auch Konstrukte, die mit der ursprünglichen relationalen Algebra wenig bis
gar nichts zu tun haben. So besitzt eine Menge per Definition keine Ordnung. Mittels des
Konstrukts "ORDER BY" kann man jedoch eine Ordnung auf der Ergebnisrelation definieren.
Standardmäßig wir absteigend sortiert. Die Schlüsselwörter "ASC" und "DESC" jedoch bezeichnen aufsteigende und absteigende Anordnung der Werte im Resultat.
Gruppierungen (GROUP BY-Klausel) dienen dazu, die Menge aller Tupel einer Relation nach
bestimmten Kriterien in Teilmengen zu unterteilen, um für diese Teilmengen bestimmte Statistiken zu berechnen. Als Gruppierungskriterium dienen die Werte eines bestimmten Attributs.
Alle Tupel, die für dieses Attribut den gleichen Wert besitzen, werden zu einer Gruppe zusammengefasst. Diese Gruppen können dann weiterbearbeitet werden (als Spezialfall auch
durch eine weitere Gruppierung, um Gruppen von Gruppen zu bearbeiten etc.). Dazu dienen
so genannte Aggregatfunktionen, die nur auf numerische Attribute im "SELECT"-Teil angewendet werden können. Folgende Aggregatfunktionen stehen üblicherweise zur Verfügung:
-
MIN:
MAX:
SUM:
COUNT:
AVG:
Bestimmen des minimalen Wertes eines Attributs
Bestimmen des maximalen Wertes eines Attributs
Berechnen der Summe aller Werte eines Attributs
Anzahl der Werte eines Attributs (nicht der verschiedenen Werte!)
Berechnen des Durchschnitts aller Werte einen Attributs, wobei
NULL-Werte nicht in die Berechnung einfließen
17
Mengenoperationen werden verwendet, um Tupel in einer Ergebnisrelation zusammenzufassen, die aus im Grunde verschiedenen Anfragen stammen. Voraussetzung dafür ist natürlich, dass die Anzahl der selektierten Attribute jeder beteiligten Anfrage identisch ist.
Außerdem müssen die jeweiligen Domänen kompatibel sein (und zwar jeweils in der selben
Reihenfolge). Für die Verknüpfung von Tupelmengen stehen die üblichen Operatoren zur
Verfügung, wie man sie von der Mengenlehre her kennt:
-
UNION:
INTERSECT:
MINUS:
Vereinigung von Tupelmengen
Durchschnitt von Tupelmengen
Differenz von Tupelmengen
Um eine Datenbank immer auf dem aktuellen Stand zu halten, müssen von Zeit zu Zeit die
Daten nachgeführt werden (alte, nicht mehr gebrauchte Einträge löschen, neue Einträge erfassen oder veränderte Einträge anpassen). In SQL gibt es drei Kommandos um die Datenbasis zu modifizieren. Diese Kommandos sind Einfügen (INSERT), Löschen (DELETE) und
Ändern (UPDATE).
In seiner einfachsten Form wird durch das Einfügen-Kommando (INSERT INTO) ein Tupel zu
einer Relation hinzugefügt. Form des Statements:
INSERT INTO Relationenname (Liste von Attributen)
VALUES (Liste von Werten);
Wobei die Liste der Attribute nur dann angegeben werden muss, wenn keine vollständigen
Tupel eingegeben werden oder wenn die Werte in einer anderen Reihenfolge erscheinen
sollen als die zugehörigen Attribute bei der Definition der Relation.
Das Löschen-Kommando (DELETE FROM) entfernt ein oder mehrere Tupel aus einer Relation. Die WHERE-Klausel spezifiziert, welche Tupel betroffen sind. Tupel werden explizit
immer nur aus einer Relation gleichzeitig gelöscht. Bei einer fehlenden WHERE-Klausel
werden alle Tupel aus der angegebenen Relation gelöscht. Form des Statements:
DELETE FROM Relationenname
WHERE Bedingung;
Das Ändern-Kommando (UPDATE) wird gebraucht, um Werte von Attributen von einem oder
mehreren Tupeln zu ändern. Die WHERE-Klausel spezifiziert, welche Tupel von der Änderung betroffen sind. Die SET-Klausel spezifiziert die Attribute, die geändert werden sollen und
bestimmt deren neue Werte. Form des Statements:
UPDATE Relationenname
SET einem oder mehreren Attributen einen Wert zuweisen
WHERE Bedingung;
18
2.6
Microsoft Access
Access ist ein DBMS für relationale Datenbanken, das seit 1992 von Microsoft entwickelt und
vertrieben wird. Es ist eine wichtige Komponente des Microsoft Office Paketes und zählt
heute zum populärsten DBMS für Desktop-PCs, weil es sehr gut für kleine bis mittlere
DB-Anwendungen ohne große Anforderungen für Mehrbenutzerbetrieb geeignet ist.
Es gibt zwei Typen von DBMS für Access, die Jet Database Engine und die MSDE (Microsoft
SQL Server 2000 Desktop Edition). Microsoft SQL Server 2000 Desktop Edition ist eine
Technologie zur lokalen Datenspeicherung in einem Format, das kompatibel mit Microsoft
SQL Server 2000 ist. MSDE kann auch zur servergestützten Datenspeicherung verwendet
werden. Man kann sich SQL Server 2000 Desktop Edition als Client/Server-Alternative zum
Dateiserver Microsoft Jet-Datenbank-Engine vorstellen, sie bietet mehr Funktionen als die Jet
Database Engine. Das System VisMap ist keine Client/Server Anwendung, die Datenbankstruktur ist auch relativ einfach. Um die Verwaltungsaufwand für die Datenbank zu minimieren
wird in VisMap die Jet Database Engine benutzt. Die Jet Database Engine ist das traditionale
DBMS für Access. Sie ist einfach zu verwalten und besonderes geeignet für die Datenbank
mit einfacher Struktur. Die Daten werden in einer Datei gespeichert und deswegen einfach zu
transportieren. Die Benutzung der Systemressource ist auch sehr gering.
MS Jet hat erweiterte Kapazitäten, die normalerweise bei Desktop-Datenbanken nicht zur
Verfügung stehen. Diese sind: [Gr02]
•
Zugriff auf heterogene Datenquellen. MS Jet unterstützt mit Hilfe von Open Database Connectivity (ODBC)-Treibern den Zugriff auf über 170 verschiedene Datenformate einschließlich Borlands dBASE und Paradox, ORACLE von der Oracle
Corporation, den MS SQL Server und IBM DB2. Entwickler können Applikationen
erstellen, in denen die Anwender praktisch jedes Datenformat lesen und verändern
können.
•
Referenzielle Integrität und die Gültigkeit von Daten. MS Jet unterstützt sowohl
Primärschlüssel als auch Fremdschlüssel, datenbankspezifische Regeln und das Löschen oder Ändern von Datensätzen in untergeordneten Tabellen. Das bedeutet, dass
der Entwickler diese Regeln nicht mehr selbst entwickeln muss. Die Datenbank-Engine enthält die Regeln bereits, so dass sie für jede Applikation verfügbar
sind.
•
Erweiterte Sicherheitsmerkmale für Workgroups. MS Jet speichert die Benutzerrechte in einer separaten Datenbank, die normalerweise im Netzwerk abgelegt wird.
Zugriffe auf Datenbank-Objekte (z. B. Tabellen oder Abfragen) werden in jeder Datenbank gespeichert. Durch die Trennung von Benutzerrechten und Informationen
über Dateizugriffe erleichtert MS Jet die Administration der Datenbanken im Netzwerk.
19
•
Veränderbare Datenblattansicht. Im Gegensatz zu vielen Datenbank-Engines, die
Datenbankabfragen in temporären Views oder Snapshots anzeigen, gibt MS Jet eine
Datenblattansicht zurück, die automatisch alle Änderungen, die die Anwender vornehmen, in die Original-Datenbank zurückschreibt. Das heißt, dass alle Ergebnisse
einer Abfrage, auch wenn sie auf verschiedene Tabellen zugegriffen hat, genauso
behandelt werden können wie die Tabellen selber. Außerdem können Abfragen auch
auf anderen Abfragen basieren.
•
Abfrage-Optimierung mit der Microsoft RushmoreTM-Technologie. MS Jet enthält
die innovative RushmoreTM-Technologie von MS FoxPro; die Geschwindigkeit der
Abfragen erhöht sich damit erheblich
Die Daten einer Access-Datenbank werden in Tabellen gespeichert. Tabellen sind daher die
Grundlagen einer Datenbank. Wie viele Tabellen eine Datenbank umfasst und in welcher
Weise die Daten der einzelnen Tabellen miteinander verknüpft sind, lässt sich nicht allgemein
sagen. Diese Aufgabe muss bei den Überlegungen zum Datenbankdesign gelöst werden.
Jede einzelne Tabelle ist dagegen in gleicher Weise aufgebaut.
Abb. 2.6: Graphisches Interface von Microsoft Access
Tabellen sind in Zeilen und Spalten organisiert. Jede Zeile stellt einen Datensatz dar, jede
Spalte ein Feld. Ein Feld enthält daher so viele Werte, wie eine Tabelle Datensätze aufweist.
Obwohl die Werte eines Feldes sich im Allgemeinen inhaltlich unterscheiden, sind sie doch
von gleicher Art. So enthält das Feld Name lauter Textwerte, während das Feld Geburtsdatum nur Datumswerte aufweist. Für eine effiziente Datenbankverwaltung ist es erforderlich,
dass bei der Definition einer Tabelle für jedes Feld sein Datentyp festgelegt wird.
20
Man kann bei dem relationalem Datenmodell die Relationen leicht in Tabellenform umwandeln. Die Tabellen lassen sich auch als Relationen formalisieren, wenn man keine Duplikate
zulässt und von der Anordnung absieht. Im Access kann man mit der Entwurfsansicht sehr
leicht das Schema einer Relation (Felder von Tabellen, Feldernamen, Felddatentypen, Bedingungen, etc.) festlegen. In der Datenblattansicht der Tabellen kann man die Datensätze
addieren, löschen und aktualisieren.
Nachdem man verschiedene Tabellen zu den einzelnen Themen in der Access Datenbank
angelegt hat, muss er Microsoft Access mitteilen, wie diese Informationen wieder zusammengeführt werden. Der erste Schritt in diesem Prozess besteht darin, Beziehungen zwischen den Tabellen zu definieren. Eine Beziehung ist eine Zuordnung zwischen allgemeinen
Feldern (Spalten), die in zwei Tabellen vorkommen. Eine Beziehung kann vom Typ 1:1, 1:n
oder n:n sein. Anschließend kann man Abfragen, Formulare und Berichte erstellen, um die
Informationen aus verschiedenen Tabellen gleichzeitig anzuzeigen. Eine Beziehung funktioniert durch übereinstimmende Daten in Schlüsselfeldern (in der Regel ein Feld, das in beiden
Tabellen denselben Namen besitzt). In den meisten Fällen stellen diese übereinstimmenden
Felder in der einen Tabelle den Primärschlüssel, der einen eindeutigen Bezeichner für jeden
Datensatz enthält, und in der anderen Tabelle einen Fremdschlüssel dar.
Im Abfragenbereich kann man die komplexe Abfragen definieren und speichern. In der Entwurfsansicht kann man mit Hilfe der vordefinierten Formulare unterschiedliche Abfragentypen
definieren: Auswahlabfrage, Kreuztabellenabfrage, Tabellenerstellungsabfrage, Aktualisierungsabfrage, Anfügabfrage und Löschensabfrage. Sie können Abfragen zusammen mit der
Datenbank speichern. Im Allgemeinen enthält eine Datenbank eine Vielzahl von gespeicherten Abfragen, die dann jeweils bei Bedarf aufgerufen oder dauerhaft als Datenherkunft von
Formularen oder Berichten dienen. Obwohl das Abfrageergebnis große Mengen von Daten
beinhalten kann, verbraucht eine gespeicherte Abfrage nur sehr wenig Speicherplatz auf der
Festplatte. Insbesondere ist der benötigte Speicherplatz unabhängig von der im Abfrageergebnis vorhandenen Datenmenge. Dies ist darin begründet, dass Access nur die Abfrageformulierung speichert, nicht jedoch das Abfrageergebnis. Die Folge dieses Konzepts ist
natürlich, dass das Abfrageergebnis jedes Mal neu ermittelt werden muss, wenn die Abfrage
benötigt wird. Das kostet mehr oder weniger viel Zeit, hat jedoch den unschätzbaren Vorteil,
dass Abfrageergebnisse stets dem neuesten Datenmaterial der Tabellen entsprechen.
Access bietet zwei grundsätzlich verschiedene Anfragesprachen, die QBE (Query-by-Example) und die SQL. Mit QBE erhält der Benutzer ein benutzerfreundliches Interface,
um die einfachen Abfragen zu konstruieren. Die komplexen Abfragen können aber nur durch
SQL konstruierbar. Weil man die Datenbank nicht im Access, sondern direkt durch die
Jet-Datenbank-Engine verwaltet und bearbeitet, ist QBE von weniger Bedeutung. Hingegen
sind für diese Diplomarbeit die Abfragen durch die im VB Programm eingebetteten SQL Statements von großer Bedeutung. Zu beachten ist, dass das von MS Jet Database Engine unterstützte SQL keine ANSI-SQL, sondern Jet-SQL von Microsoft ist.
21
3. Visual Basic und Microsoft .NET
Statt Visual Basic 6 wird die Implementierung des VB-Programms von VisMap mit Visual Basic .NET entwickelt. Für den Datenzugriff zur Access-Datenbank wird statt ADO ADO .NET
verwendet. Weil Visual Basic .NET und ADO .NET stark abhängig von dem Microsoft .NET
Framework sind, wird in diesem Kapitel zunächst das Microsoft .NET Framework erklärt.
Dann wird erläutet, was ADO .NET ist und seine Fortschritte im Vergleich mit ADO. Danach
wird erklärt, was Visual Basic .NET ist und wie man die Visual Basic .NET Programme
schreiben. Am Ende wird ein Vergleich zwischen Visual Basic und Visual Basic .NET gemacht, um die Fortschritte von VB .NET zu erklären. Der Inhalt dieses Abschnittes orientiert
sich am „Database Programming with Visual Basic® .NET and ADO .NET” von Barker
[Bark02], „Programming Visual Basic .NET“ von Liberty [Lib03] und „MSDN for Visual Studio .NET“ von Microsoft [MSDNLib].
3.1
Microsoft .Net Framework
Im Jahr 2000 hat Microsoft die .NET Plattform angekündigt. .NET ist ein Entwicklungsframework, das ein neues API (application programming interface) für die Dienste und die APIs
für klassische Windows Betriebssysteme anbietet, besonders für die Windows 2000/XP/2003
Familie. Es kombiniert unterschiedliche Technologien, die von Microsoft während der späten
1990er herausgegeben wurden. Unter letzterem sind die COM+ Komponente-Dienste, das
ASP Web-Entwicklungsframework, die XML, das objektorientierte Design und die Unterstützung der neuen Web Dienste Protokolle wie SOAP, WSDL und UDDI zufinden.
Der Anwendungsbereich von .NET Framework ist riesig, Die Plattform besteht aus 4 separaten Produktionsgruppen, diese Diplomarbeit betrifft aber nur die erste Gruppe:
-
Eine Gruppe von Sprachen, einschließlich Visuell Basic .NET, C#, JScript .NET, und Managed C++; eine Gruppe von Entwicklungswerkzeugen, einschließlich Visual Studio .NET;
eine umfassende Klassenbibliothek für den Aufbau der Web Dienste und Windows-Anwendungen; und die Common Language Runtime (CLR), um die in diesem
Framework erzeugende Objekte auszuführen.
-
Eine Gruppe von .NET Enterprise Server, wie SQL Server 2000, Exchange 2000, BizTalk
2000 usw., die spezialisierte Funktionalität für relationale Datenspeicherung, Email, B2B
Kommerz anbieten.
-
Ein Angebot von kommerziellen Webdiensten, .NET My Services; für ein Honorar können
die Entwickler diesen Dienst benutzen, um eigene Programme zu erstellen.
-
Neue .NET-enabled non-PC Geräte, von Handy bis zum Spiel-Konsole.
22
Das .NET Framework ermöglicht die Zusammenarbeit der unterschiedlichsten Sprachen.
Zusammenarbeit bedeutet dabei nicht nur, dass ein Aufruf von einem Programmcode möglich
ist, der in einer anderen Sprache geschrieben wurde, sondern auch, dass in objektorientierten
Sprachen eine Vererbung von Klassen möglich ist, die in einer anderen objektorientierten
Sprache entwickelt wurden.
Basis für diese Sprachintegration ist einerseits die Zwischensprache MSIL und die CLR und
andererseits die so genannte Common Language Specification (CLS). Die CLS ist ein Regelwerk für Compiler, das festlegt, wie die Umsetzung von sprachspezifischen Konzepten in
die MSIL erfolgen muss. Kern der CLS ist das Common Type System (CTS), das ein einheitliches System von Datentypen definiert. Denn nur, wenn die verschiedenen Sprachen die
gleichen Datentypen verwenden, ist eine problemlose Integration möglich.
3.1.1
Struktur des Microsoft .NET Frameworks
Die Ausführung einer .NET-Anwendung setzt eine Laufzeitumgebung voraus, die Common
Language Runtime (CLR) genannt wird. Die CLR stellt den Just-in-Time-Compiler und zahlreiche andere Basisdienste bereit, die von allen .NET-fähigen Sprachen verwendet werden.
Dazu gehören zum Beispiel ein Garbage Collector, Exception Handling, ein Sicherheitssystem und die Interoperabilität mit Nicht-.NET-Anwendungen.
Wie in der Abb. 3.1 gezeigt, die „Framework Base Classes“ basiert auf CLR. Oberhalb von
„Framework Base Classes“ ist eine Menge von Klassen, die zusätzliche Funktionen bietet, die
„Data and XML Classes“. Am ganz oben ist eine Menge der Klassen für Web Dienste, Web
Formen und Windows Formen. Insgesamt werden diese Klassen als die Framework Class
Library (FCL) bezeichnet, die eine objektorientierte API für das ganze .NET Framework bietet.
Abb. 3.1: Systemarchitektur des .Net Frameworks [Lib03]
23
Die Framework Base Classes, die niedrigste Stufe der FCL, ist ähnlich wie die Java Basis
Klassen. Diese Klassen unterstützen fundamentale Eingabe und Ausgabe, Manipulation der
Strings, Sicherheitsmanagement, Netzkommunikation, Management des Threads, Textmanipulation usw.
Die Data and XML Classes sind eine Erweiterung der Framework Base Classes, sie unterstützen Datenverwaltung und XML Manipulation. Die Daten-Klassen, die ADO .NET enthält,
unterstützen das persistente Management von Daten, die von den Datenbanken im Hintergrund erhalten werden. Diese Klassen umfassen die Structured Query Language Klassen,
damit man durch eine standardmäßige SQL-Schnittstelle die persistente Datenbank manipulieren kann. Das .NET Framework unterstützt auch eine Menge von Klassen, mit denen die
XML Daten bearbeitet und geparst werden können.
Ganz oben steht eine Reihe von Klassen, mit den man mit drei unterschiedlichen Technologien Anwendungen erzeugen kann: Web-Dienste, Web-Formen, und Windows-Formen. Web
Dienste schließen eine Anzahl von Klassen ein, die die Entwicklung von einfach verteilten
Komponenten unterstützen, die sogar mit Firewall und NAT funktionieren können. Diese
Komponenten unterstützen auch Plug-and-Play, da die Web Dienste HTTP und SOAP als
zugrunde liegende Kommunikations-Protokolle brauchen.
Die Web Formen und Windows Formen ermöglichen eine schnelle Entwicklung von Web- und
Windows-Anwendungen. Mit dem Drag and Drop der Maus kann man einfach die vordefinierten Steuerelemente auf die Formen rüberziehen. Nach dem Einfügen des Steuerelementes kann man die gewünschten Ereignisse von diesem Steuerelement in einer List
auswählen und dafür eigene Programmiercodes schreiben.
3.1.2
Kompilierung der .NET-Programme
Das .NET Framework arbeitet – genau wie die Programmiersprache Java – mit einer Zwischensprache. Ein Compiler einer .NET-Sprache erzeugt also nicht einen prozessorspezifischen Maschinencode, sondern einen plattformunabhängigen Zwischencode, der von CLR
ausgeführt werden kann. Dieser Zwischencode heißt Microsoft Intermediate Language (MSIL)
und bildet eine so genannte Assembly. Die VB .NET erzeugende MSIL Datei ist identisch mit
denen von anderen Sprachen erzeugte MSIL Dateien. Eine wichtige Besonderheit der CLR
ist, dass es allgemein ist. Die gleiche Runtime unterstützt die Entwicklung in Visual
Basic .NET und in C#.
Erst zur Laufzeit wird dieser MSIL-Code in einen prozessorspezifischen Maschinencode (Native Code) umgewandelt. MSIL-Code wird aber nicht interpretiert, sondern von einem so genannten Just-in-Time-Compiler Stückchenweise umgewandelt und dann ausgeführt. Der
24
standardmäßige JIT-Compiler läuft nur beim Bedarf. Wenn eine Methode aufgerufen wird,
analysiert der JIT-Compiler die MSIL und erzeugt sehr effiziente Maschinencodes, die sehr
schnell laufen. Der JIT-Compiler kann erkennen, ob der Code schon kompiliert ist. Da die
Kompilierung passiert nur beim Bedarf, läuft eine .NET Anwendung immer schneller, weil die
kompilierten Codes wiederbenutzt werden.
Andere .NET-fähige
VB .NET Quell-
C# Quellcode
Sprachen
VB .NET Compiler
C# Compiler
Compiler
Microsoft Intermediate Language (MSIL)
[Datei]
Just-In-Time-Compiler (JIT)
(Teil der Common Language Runtime)
Native Code
Native Code
(Native Image)
[RAM]
[Datei]
Betriebssystem
Abb. 3.2: Intermediation-Konzept im.NET Framework
Dadurch, dass nicht interpretiert, sondern vor der Ausführung kompiliert wird und der
Just-in-Time-Compiler sehr schnell ist, ist der Performance-Verlust durch die Intermediation
sehr gering. Im Zweifel gibt es auch die Möglichkeit, das Ergebnis der Kompilierung von MSIL
zu Maschinencode zu speichern und später auszuführen. Dies nennt man ein Native Image.
Ein Native Image ist aber nicht mehr plattformunabhängig.
Die CLS garantiert, dass alle .NET-Sprachen sehr ähnliche MSIL erzeugen. Dadurch können
die in einer Sprache entworfenen Objekte von den anderen aufgegriffen und abgeleitet werden. Damit ist es möglich, eine Klasse in C# zu entwerfen und sie davon in VB.NET abzuleiten.
25
3.2
ADO .NET
Viele Anwendungen interagieren mit der Datenbank. Das .NET Framework bietet eine große
Gruppe von Objekten, um die Datenbankinteraktion zu verwalten. Diese Klassen werden als
ADO .NET (ActiveX Data Objects) bezeichnet.
ADO.NET sieht ähnlich wie sein Vorgänger ADO aus. Der Schlüsselunterschied ist, dass
ADO.NET eine getrennte Datenarchitektur ist. In einer getrennten Architektur werden die
Daten aus einer Datenbank abgeholt und in den Cachespeicher auf der lokalen Maschine
aufgenommen. Man manipuliert die Daten auf seinem lokalen Rechner und nimmt mit der
Datenbank Verbindung nur auf, wenn man wirklich die Datensätze in der Datenbank aktualisieren möchte.
Es gibt bedeutende Vorteile, die Verbindung mit der Datenbank nicht permanent zu halten.
Der größte Vorteil ist, dass viele in Zusammenhang mit verbindenden Datenobjekten stehende Probleme vermieden werden. Datenbankverbindungen sind ressourceintensiv, und es
ist schwierig, Tausende (oder Hunderttausende) von gleichzeitigen, kontinuierlichen Verbindungen zu halten. Eine getrennte Architektur ist ressourcesparsam.
Abb. 3.3: Eigenschaften, Methoden, und zusätzliche Objekte von DataSet [Bark02]
26
ADO.NET nimmt mit der Datenbank Verbindung auf, um Daten abzuholen. Dann wird die
Verbindung abgebrochen, bis man die Änderungen eingegeben hat, und die Daten aktualisieren möchte. Zahlreiche Anwendungen verwenden viele Zeit damit, die Daten durchzulesen
und auszustellen, ADO.NET stellt eine auf der lokalen Maschine liegende Untermenge der
Daten für die Anwendung zur Verfügung, wenn sie die Daten liest und ausstellt. Getrennte
Datenarchitektur arbeitet ähnlich wie die Datenbearbeitung in den Web-Applikationen. Alle
Websitzungen sind getrennt, und der Zustand verändert sich nicht, bis man die Abfrage zum
Server schickt. Mit der getrennten Datenarchitektur kann man leicht Netzanwendungen entwickeln.
Abb 3.3 zeigt die Struktur des wichtigsten Objekts von ADO .NET: DataSet. Offensichtlich hat
ADO .NET mehr Objekte als ADO. Das DataSet-Objekt wird zusammen mit den anderen
Datenkontrollen benutzt, in DataSet werden Ergebnisse gespeichert, die von Befehlen und
den Datenadaptern zurückgegeben werden. Im Gegensatz zu dem Recordset von ADO und
DAO bringt es eine hierarchische Ansicht der Daten zurück. Bei der Benutzung der Eigenschaften und Kollektionen im DataSet-Objekt kann man Zeilen, Spalten, einzelne Tabellen
und Beziehungen zwischen Tabellen erhalten.
Das DataTable-Objekt ist ein Objekt von DataSet, es ermöglicht die Manipulation von einzelnen Tabellen. Das Datatable-Objekt ist mit dem Recordset in ADO vergleichbar. Mit dem
DataView-Objekt kann man die Daten filtern, sortieren und unterschiedliche Ansichten von
Daten behalten. Jedes DataTable hat eine Standardansicht, die nach der Initialisierung verändert und in eine andere DataView gespeichert werden kann.
Abb. 3.4: Zwei unterschiedliche Data Providers von ADO .NET [Bark02]
27
Mit dem DataRow-Objekt kann man die Zeilen in einer DataTable manipulieren. Die Manipulation wie Addieren, Löschen oder Aktualisieren findet erst im Cache statt. Mit den
SQL-Anweisungen kann man die Änderung in die Datenbank weiter schicken. Mit dem DataColumn-Objekt kann man die Informationen aus den Spalten der DataTable erhalten. Und
das PrimaryKey-Objekt erlaubt, dass man einen Primärschlüssel für eine DataTable definiert.
Das DataSet-Objekt ist eine Abstraktion der relationalen Datenbank. ADO .NET benutzt DataAdapter als eine Brücke zwischen DataSet und der Datenquelle. DataAdapter nutzt eine
Fill()-Methode, um die Daten von der Datenbank abzuholen und DataSet zu füllen.
Das DBConnection-Objekt repräsentiert eine Verbindung zu einer Datenquelle. Diese Verbindung kann von unterschiedlichen Command-Objekten zusammen benutzt werden. Mit
dem DBCommand-Objekt kann man einzelnen Befehl (normalerweise eine SQL-Anweisung
oder eine gespeicherte Prozedur) zur Datenbank schicken. Diese Objekte werden oft implizit
erzeugt, wenn man ein DataSet erstellt. Aber auf sie kann natürlich auch explizit zugegriffen
werden.
3.3
Visual Basic
Visual Basic ist eine Programmiersprache, mit der man die Programme und Anwendungen für
Microsoft Windows Familie entwickeln kann, sie basiert auf der Programmiersprache BASIC.
Heutzutage ist sie eine der populärsten Programmiersprachen in der kommerziellen Welt
wegen ihres schnellen Entwicklungsdauerns.
Der Befehlssatz von Visual Basic ähnelt dem von Basic, wurde jedoch an das Multitasking
und an die grafischen Eigenschaften von Windows angepasst. Somit enden beim Befehlssatz
bereits die Gemeinsamkeiten mit herkömmlichen Basic-Varianten. Hinter Visual Basic steckt
ein vollkommen anderes Konzept. Wie der Begriff „Visual“ im Namen bereits ausdrückt, spielt
der grafische Aspekt eine entscheidende Rolle. Im Gegensatz zu vielen anderen Programmiersprachen wird ein Visual Basic-Programm zunächst grafisch entwickelt, erst später erfolgt eine textuelle Programmierung. Dafür stellt Visual Basic eine grafische
Entwicklungsumgebung zur Verfügung. Somit ist Visual Basic viel mehr als nur eine Programmiersprache, denn es umfasst neben der eigentlichen Programmiersprache verschiedene Werkzeuge wie eine sehr leistungsfähige und komfortable Entwicklungsoberfläche,
einen Debugger zur Fehlersuche und ein Projektverwaltungssystem.
Visual Basic ist eine objektbasierte System, welches ereignisgesteuert arbeitet. Objektbasiert
bedeutet, dass sich das Programm aus Objekten zusammensetzt, die dem Benutzer grafisch
visualisiert werden. Ein Objekt kann hierbei z.B. eine Schaltfläche, eine Combo-Box oder ein
Laufwerkssymbol sein. Ereignisgesteuert bedeutet, dass das Programm ausschließlich auf
Ereignisse reagiert. Unter Ereignissen versteht man bestimmte Systemereignisse und Anwenderaktionen wie zum Beispiel Mausklicks und Tastatureingaben. Das bedeutet, die Er-
28
eignisse in VB sind die Trigger der Prozeduren, die Prozeduren werden erst aufgerufen, wenn
ein Ereignis passiert. Für jedes Steuerelement gibt es einen Satz von Ereignissen. Nach
Bedarf kann man die Programmcodes schreiben, die auf spezifische Ereignisse reagieren.
Zentrales Merkmal von Visual Basic ist seine Entwicklungsumgebung, die von Microsoft entwickelte IDE (Integrated Development Environment): Microsoft: Visual Studio .NET. Hier
werden die Programme grafisch aufbereitet und mit Funktionalität hinterlegt. Abb 3.5 zeigt die
Entwicklungsumgebung von Visual Basic .NET.
Am oberen Bildschirmrand befindet sich die Menüleiste, die den typischen Stil von Microsoft-Anwendungen hat und die Befehle anzeigt, die dem Entwickler für seine Programmerstellung zur Verfügung stehen. Die Symbolleiste darunter kann wie in anderen
Microsoft-Produkten beliebig angepasst und erweitert werden. Sie bietet einen schnellen
Zugriff auf häufig verwendete Befehle in der Programmierumgebung.
Abb. 3.5: Arbeitsbereich von Microsoft Visual Studio .NET
29
Zentrales Element der Entwicklungsumgebung ist das Entwurfsfenster, hier kann man die
Windows Form entwerfen und die Programmiercodes schreiben. Eine Form ist die Vorlage für
das spätere Programmfenster. Hier wird die grafische Programmoberfläche für die zu entwickelnde Applikation durch Einfügen von Steuerelementen aus der Werkzeugkiste, Grafiken
und Bildern entwickelt. Durch Doppelklick auf die Form oder ein Steuerelement kann man das
Codefenster öffnen und die Programmiercodes für die ausgewählte Form bearbeiten.
Die Werkzeugsammlung auf der linken Seite enthält die Werkzeuge, mit denen zur Entwurfszeit Steuerelemente in einer Form angeordnet werden können. Viele Elemente in dieser
Toolbox sind Standard-Windows-Bedienelemente, die man auch von anderen Windows-Programmen kennt. So gehören z.B. Textfelder, Befehlsschaltflächen und Listenfelder
zu den Steuerelementen.
Sowohl für die Form als auch für die auf ihr positionierten Steuerelemente sind bestimmte
Eigenschaften konfigurierbar. Dies erfolgt im Eigenschaftsfenster, welches eine alphabetisch
geordnete Liste der möglichen Eigenschaftseinstellungen enthält.
Das Projektfenster enthält die Liste der Formen und Module in dem aktuellen Projekt. Als
Projekt wird die Gruppe der Dateien bezeichnet, aus denen die gesamte Anwendung besteht.
Schon anhand dieses Projektfensters erkennt man, dass Visual Basic-Anwendungen modular
aufgebaut sind. Das zu erstellende Programm setzt sich aus mehreren Bestandteilen zusammen.
Visual Basic .NET ist eine objektorientierte Programmiersprache, deswegen besteht ein
VB .NET-Anwendung aus Klassen und Methoden. Die erste Form in dem Projekt kann man
auch als die erste Klasse in dem Projekt nennen. Jede Prozedur für das ausgelöste Ereignis
ist eine Methode in dieser Klasse. Man kann natürlich mehrere Klassen in das Projekt einfügen, um die Funktionalität des Programms zu erweitern und die Struktur des Programms zu
verbessern.
Es gibt zwei Arten von Methoden in VB .NET. Eine Sub-Methode kann eine Aufgabe durchführen. Man kann bei dem Aufruf der Methode Parameter übergeben, um die Aufgabe der
Methode zu steuern. Im Unterschied zu einer Sub-Methode liefert eine Funktion-Methode
einen Rückgabewert zurück. Durch die Benutzung des Schlüsselwortes AS kann man den
Typ des Rückgabewerts der Funktion-Methode bestimmen. Nachfolgend Beispiele für die
Methoden beider Typen:
Sub SomeMethod(ByVal Param As Integer)
Debug.WriteLine( _
"Here are the parameters received: " & Param)
End Sub
30
Function IsBigger(ByVal firstVal As Integer, _
ByVal secondVal As Integer) As Boolean
If firstVal > secondVal Then
Return True
Else
Return False
End If
End Function
Um eine VB .NET-Anwendung zu entwerfen, muss man zuerst ein Projekt erstellen. Visual
Studio .NET bietet viele Projekttypen, die man auswählen kann. Die Projektauswahl legt lediglich eine Reihe von Vorlagen und Voreinstellungen fest, die sich auch unabhängig von der
Auswahl treffen lassen. Die wichtigsten Projekttypen sind Windows-Anwendungen und Konsolenanwendungen. Um das VB-Programm von dem VisMap zu entwerfen wird der Projekttyp Windows-Anwendung benutzt.
Wenn ein Windows-Anwendung-Projekt erstellt wird, wird die erste Form der Anwendung
automatisch erstellt. Man kann dann die Eigenschaften von Steuerelementen auf dieser Form
konfigurieren. Wie schon gesagt ist Visual Basic eine objektorientierte Programmiersprache,
jedes Steuerelement ist ein Objekt. Man kann die Methoden und Eigenschaften für diese
Objekte definieren. Die Eigenschaften der Steuerelemente wie Schriftart, Schriftgröße, Titel,
Farbe, Position oder der Inhalt der Combo-Box werden im Eigenschaftsfenster geändert.
Nach Anklicken des entsprechenden Steuerelementes werden dessen Eigenschaften im Eigenschaftsfenster angezeigt. Zur Festlegung einer Eigenschaft wählt der Entwickler den entsprechenden Eintrag aus, der in der rechten Hälfte des Eigenschaftsfensters bearbeitet
werden kann. Dabei erscheint entweder ein Textcursor zur Texteingabe, oder es wird ein Pfeil
nach unten eingeblendet, mit dem ein Auswahlmenü geöffnet werden kann, welches die
möglichen Werte enthält.
Die eigentliche Programmierung erfolgt im so genannten Codefenster. Unter Visual Basic ist
der Code in Prozeduren unterteilt und häufig bestimmten Steuerelementen zugeordnet.
Deshalb öffnet sich das Codefenster nach dem Doppelklick auf ein Steuerelement. Das zu
erstellende Programm arbeitet ereignisgesteuert, d.h. die Anweisungen beziehen sich auf ein
bestimmtes Ereignis. Im Codefenster werden in der rechten Listbox alle Ereignisse angezeigt,
die zu dem in der linken Box angegebenen Steuerelement ausgelöst werden können. Daher
setzen sich die Namen der Prozeduren meistens aus dem Namen des ausgewählten Steuerelementes und der Bezeichnung des ausgelösten Ereignisses zusammen. Ein typisches
Beispiel dafür ist:
Private Sub btnShow_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles btnShow.Click
MessageBox.Show("Hello World.")
End Sub
31
3.4
Unterschiede zwischen VB und VB .NET
Visual Basic .NET ist eine Überarbeitung von Visual Basic von Microsoft für
die .NET-Plattform. Es unterscheidet sich in bedeutende Hinsicht von den früheren Versionen
von Visual Basic.
Eine der wichtigsten Änderungen ist, dass VB .NET endlich eine echte objektorientierte Programmiersprache geworden ist. Mit dem neuen Schlüsselwort „Inherites“ unterstützt jetzt
VB .NET die Erbung von Objekten, die neue Klasse kann dann alle Methoden und Interfaces
von der Basisklasse haben, aber nur die Methoden mit dem Schlüsselwort „Overridable“ in
der alten Klasse können ersetzt werden. VB .NET unterstützt auch Polymorphismus, man
kann jetzt mit dem Schlüsselwort „Overloads“ Methoden mit selbem Name aber unterschiedliche Eingabeparameter erzeugen. Außerdem kann man auch einen Constructor in der
Klasse definieren, damit man beim Erzeugen der neuen Instanz der Klassen Parameter übertragen kann.
Ein weiterer Fortschritt von VB .NET ist die Fehlerbehandlung. Die unstructured error handling „On Error Goto“ in der früher VB-Version ist nicht geeignet für die Entwicklung der Enterprise-Level-Anwendungen.
Sie
verursacht
hohe
Weiterentwicklungsund
Verwaltungskosten. VB .NET unterstützt zwar wegen der Kompatibilität die alte Mode weiter,
bietet aber eine viel schönere und leistungsfähigere Fehlerbehandlung: die „structured exception handling“. Mit „Try … Catch … Finally“ kann der Code die unterschiedlichen Exceptions unterscheiden und dann passende Reaktionen aufrufen.
In der Vergangenheit wurde Visual Basic als eine Programmiersprache zweiter Klasse behandelt. Die Herausforderung der Software-Entwicklung von Enterprise Niveau konnte nicht
erfüllt werden. Dies ist nicht mehr so in VB .NET. Der von VB .NET erzeugte Code ist fast
gleich wie der von C# oder anderen .NET unterstützten Sprachen erzeugte Code. Es gibt
keine Performance- oder Größenachteile, wenn man in VB .NET programmiert. Eigentlich gibt
es zwischen VB .NET und C# nur syntaktische Unterschiede. Man kann sogar ein
VB .NET-Programm leicht zu einem C#-Programm konvertieren. Solche Software existiert
schon im Internet.
Im Prinzip gibt es gar keine Sprache VB .NET oder C#, es gibt nur eine .NET-Sprache: MSIL
(Microsoft Intermediate Language). Die VB .NET- und C#-Compiler erzeugen beide die
MSIL-Codes, und die von den beiden Compiler erzeugte MSIL-Codes sind fast identisch.
32
4. Geo-Informationssysteme
Der Inhalt dieses Kapitels orientiert sich am " Grundlagen der Geo-Informationssysteme“ von
Ralf Bill [Bi99], „Geoinformatik in Theorie und Praxis“ von Norbert Lange [La02] und „Lexikon
der Geoinformatik“ von Ralf Bill und Marco Zehner [BiZe01].
Geoinformation ist raumbezogene Information und beschreibt unseren Lebensraum, unser
Umfeld im Kleinen wie im Großen, ob es sich um lokale Details handelt wie etwa Gebäude,
Grundstücke, Leitungen und Hausanschlüsse, oder um eine globale Zusammenschau von
Verkehrswegen, Umweltaspekten und Wirtschaftsräumen. Laut [BiZe01] ist ein Geoinformationssystem so definiert:
„Ein Geoinformationssystem (GIS) ist ein rechnergestütztes System, das
aus Hardware, Software, Daten und den Anwendungen besteht. Mit ihm
können raumbezogene Daten digital erfasst und redigiert, gespeichert und
reorganisiert, modelliert und analysiert sowie alphanumerisch und graphisch präsentiert werden.“
Ein GIS soll die raumbezogenen Massendaten verwalten können. Es soll auch die vielfältigen
Datenbankabfragen unterstützen wie zum Beispiel: Existenz, Position, Eigenschaften von
Geoobjekten. Es kann auch das System den Nutzeranforderungen anpassen. Die Lernfähigkeit des Systems kann GIS auch unterstützen.
Die Vorteile der GIS-Technologie sind vielfältig: Sie kann die manuellen Erfassungs-, Zeichen- und Kartierarbeiten entlasten. Mit ihr kann die Redundanz von Geodaten vermieden
werden; erfasste Geometrie- und Attributdaten können vielfach genutzt werden; die Datenqualität (Aktualität, Metadaten) können dadurch verbessert werden; die Auskunfts-, Auswertungs- und Entscheidungsmöglichkeiten durch Raumanalysen können verbessert werden; die
Informationsqualität kann durch die Visualisierung verbessert werden; das Management der
fachübergreifenden GIS-Projekte wird auch verbessert.
4.1
Geoobjekte
Die
raumbezogenen
Informationen
von
Objekten
sind
Kennzeichen
der
Geo-Informationssysteme. Als Geoobjekte treten Punkte, Linien, Flächen und Körper auf.
Laut [La02] werden Geoobjekte wie folgt definiert:
„Geoobjekte sind räumliche Elemente, die zusätzlich zu Sachinformationen
geometrische und topologische Eigenschaften besitzen und zeitlichen Veränderungen unterliegen können. Kennzeichnend für Geoobjekte sind somit
Geometrie, Topologie, Thematik und Dynamik.“
33
Die Geometrie eines Geoobjektes beschreibt die Position des Geoobjektes auf der Basis eines eindeutigen räumlichen Bezugssystems. Um die Lage der Geoobjekte zu beschreiben,
kann man zwei Arten von Metrik benutzen: die primäre Metrik und die sekundäre Metrik. Die
primäre Metrik beschreibt die exakte Festlegung durch Koordinatensystem, man kann zum
Beispiel die Geoobjekte in globalen Koordinatensystemen durch geodätische Koordinaten
oder GPS-Koordinaten darstellen, oder eine Karte mit einer bestimmten Kartenprojektion erzeugen, die die gekrümmte Erdoberfläche in einer zweidimensionalen Ebene abbildet. Die
sekundäre Metrik beschreibt nur die unscharfe Festlegung, man kann zum Beispiel mit
Kennziffern, Adressen oder Namen die Positionen der Geoobjekte beschreiben.
Außer Koordinatensysteme, die die Eigenschaft für einzelnen Punkt beschreiben, sind räumliche Beziehungen von Geoobjekten zueinander auch nicht verzichtbar. Die Topologie der
Geoobjekte beschreibt die Umgebungsbeziehungen, die Nachbarschaftsbeziehungen, die
Teilmengen- oder Enthaltensbeziehungen oder die Überdeckungs- oder Überschneidungsbeziehungen der Geoobjekte. Der Unterschied zwischen Geometrie und Topologie liegt darin,
dass die Topologie sich gegenüber topologischen Transformationen nicht verändert, während
die Geometrie sich verändert. Ein Beispiel für die Hervorhebung topologischer Aspekte und
die Unterdrückung der Geometrie ist die schematische Darstellung der Verbindungen des
öffentlichen Verkehrs. In dieser schematischen Darstellung ist nur das Vorhandensein der
Verbindungen der Verkehrsknotenpunkte von Bedeutung, die exakten Positionen der Verkehrsknotenpunkte sind nicht relevant.
Abb. 4.1: Merkmale der Geoobjekte [AsJa04]
Wie alle anderen Objekte besitzt jedes Geoobjekt auch eine Thematik. Während die Geometrie die räumlichen Informationen von Geoobjekten und die räumlichen Beziehungen zueinander von Geoobjekten beschreibt, gibt die Thematik den Geoobjekten die inhaltliche bzw.
semantische Bedeutung, zum Beispiel physikalische, chemische, funktionale oder soziale
Bedeutung. Es gibt zwei Arten von Thematik: die qualitativen Objektmerkmale und die quantitative Objektmerkmale. Die qualitativen Objektmerkmale beschreiben die Gliederungen
34
nach Merkmalen ihrer Beschaffenheit, und die quantitativen Objektmerkmale sind die größen-,
mengen-, wertmäßige oder relative Ausprägung der Geoobjekte.
Um die verschiedene Thematik von Geoobjekten zu beschreiben, zu bearbeiten und zu
speichern, werden das Ebenenprinzip und das Objektklassenprinzip verwendet. Beim Ebenenprinzip werden die Geometrie der Objekte und deren Attribute streng nach den verschiedenen thematischen Bedeutungen getrennt und in verschiedenen Ebenen vorgehalten.
Beim Objektklassenprinzip gibt es eine Hierarchie zwischen Objektklasse, Objekt und Objektteil, die nach oben offen ist. Diese Hierarchie kann streng eingehalten werden, was zu
einem thematischen Baum führt, oder aber es werden netzwerkartige Verknüpfungen zugelassen.
Die Dynamik der Geoobjekte bezeichnet die zeitlichen Änderungen der Geometrie, Topologie
und Thematik der Geoobjekte. Die Änderungen der Thematik sind am einfachsten realisierbar.
Einzelnen Attributen können Zeitabschnitte für die Gültigkeit der einzelnen Ausprägungen
zugewiesen werden. Für die Verwaltung der zeitlichen Veränderung der Geometrie oder
Topologie von Geoobjekten sind schwer zu implementieren. Diese beschränken sich oft
darauf, zu bestimmten Zeitpunkten Schnappschüsse zur Verfügung zu stellen.
4.2
Modellierung von Geoobjekten
Unsere Welt ist in vielen Fällen ein Kontinuum, in der Regel ist es nicht möglich, eine kontinuierliche Welt direkt in einem System abzubilden. Um die raumbezogenen Daten der realen
Welt digital erfassen, speichern, verwalten, aktualisieren, und analysieren sowie alphanumerisch und graphisch präsentieren zu können, muss man die reale Welt zuerst modellieren.
Diese Modelle entsprechen den Verfahren zur Diskretisierung der Erdoberfläche. Die wichtigsten Modelle sind das Vektormodell und das Rastermodell.
Abb. 4.2: Rastermodell und Vektormodell
Im Vektormodell wird die Geometrie eines Geoobjektes direkt durch Koordinaten aufgezeichnet. Ein Punkt wird über eine X-, eine Y- und gegebenenfalls über eine Z-Koordinate
(Rechtswert, Hochwert, Höhe) genau beschrieben. Eine Linie kann durch zwei solche Tupel
35
bzw. Tripel und eine Fläche durch einen geschlossenen Linienzug, d.h. mindestens drei Tupel bzw. Tripel angegeben. Im Vektormodell werden im Prinzip nur Punkte erfasst, Linien und
Flächen müssen aus Punkten bzw. Vektoren aufgebaut werden.
Die Topologie der Geoobjekte kann jedoch nicht so einfach im Vektormodell modelliert werden. Man muss hier die topologischen Beziehungen der Geoobjekte explizit erfassen, modellieren und speichern. Zum Beispiel muss gespeichert werden, welche Geoobjekte benachbart
sind und damit eine Linie definieren, und welche Linien eine spezielle Fläche begrenzen.
Vektormodell
Vorteile
z
Rastermodell
hohe geometrische Genauig-
z
einfache Datenstrukturen
keit
z
geringer Aufwand bei Erfassung
z
eindeutige Objektbeschreibung
z
geringe Datenmengen
z
größere Ähnlichkeit der gra-
der Geometrie und Topologie
z
phischen Präsentation mit tra-
und Scannerdaten
z
ditionellen Karten
Nachteile
komplexere Datenstrukturen
z
aufwändige
z
einfache logische und algebraische Operationen
z
z
kompatibel mit Fernerkundungs-
Erfassung
z
keine Form- und Lagetreue der
Geoobjekte
von
Geometrie und Topologie
z
höherer Speicheraufwand
aufwändige und recheninten-
z
kleine Pixelgröße mit explodie-
sive logische und algebraische
renden Datenmengen für höhere
Operationen
Genauigkeitsanforderungen
parallele
geometrische
und
z
topologische Beschreibung der
Geoobjekte
weniger
zufrieden
stellende
graphische Präsentation
z
aufwändige
Koordinatentrans-
formationen
Tab. 4.1: Vergleich von Vektor- und Rastermodell ([La02])
Das Rastermodell basiert auf der Unterteilung eines Interessenbereichs in Elemente bestimmter Größe. Man bezeichnet diese Teilflächen als Mosaik. Die Mosaike weisen am häufigsten quadratische oder rechteckige Rasterzellen bzw. Pixel auf. Die Geometrie der
Geoobjekte wird durch Angabe der sie ausfüllenden Pixel beschrieben. Da im Rastermodell
36
jeder Pixel gespeichert werden muss, hat es einen großen Speicherplatzbedarf. Und der
Speicherplatzbedarf steigt bei zunehmender Auflösung erheblich an.
Im Rastermodell muss die Topologie der Geoobjekte nicht explizit angegeben werden. Die
Topologie ist bereits direkt durch Angabe der Geometrie definiert. Zum Beispiel sind zwei
Rasterzellen benachbart, wenn sie eine gemeinsame Zellkante besitzen oder wenn sie mindestens eine gemeinsame Zellecke besitzen.
Die beiden Modelle haben Vor- und Nachteile, und werden nach Bedarf in den verschiedenen
Bereichen verwendet. Das Vektormodell wird wegen seiner höheren Genauigkeit und Eindeutigkeit für das Vermessungs- und Katasterwesen bzw. in der Infrastrukturplanung sowie
generell für großmaßstäbige Anwendungen benutzt. Das Rastermodell wird für kleinmaßstäbige Anwendungen und für die Bildverarbeitung verwendet. Einen Vergleich von Vektor- und
Rastermodell zeigt Tabelle 4.1.
4.3
Präsentation von Geoobjekten
Die Daten in den Datenbanken allein sind nutzlos, wenn man sie nicht je nach Bedarf präsentieren und austauschen kann. Man muss die Ergebnisse der Datenverarbeitung und der
Datenmanipulation im GIS in einer Form präsentieren, die für die Benutzer verständlich und
lesbar ist. Es gibt folgende Möglichkeiten, um die Geoobjekte zu präsentieren:
-
digitaler Datentransfer auf rechnerlesbaren Medien oder via Netzwerk,
nichtgraphische Formen wie Tabellen, Berichte,
passive Graphik in Form von Karten,
interaktive Graphik am Bildschirm in Form von kartenähnlichen und sonstigen graphischen Darstellungen.
Die oben genannten Präsentationsarten können in Kombination miteinander verwendet
werden. So können zum Beispiel in einer interaktiven Graphik Tabellen oder Berichte eingebettet werden, damit man einen klareren Überblick über die Informationen des jeweiligen Interessenbereichs erhält.
In dieser Diplomarbeit werden die Geoobjekte als interaktive Graphik präsentiert, deswegen
ist die visuelle Präsentation der Geoobjekte von großer Bedeutung. Das menschliche Sehvermögen bietet eine wichtige Hilfe beim Erkunden und Verstehen räumlicher Strukturen und
Prozesse. Die Darstellung von Geoobjekten in visueller, bildhafter Form besitzt daher eine
wesentliche Bedeutung für die Analyse und Interpretation von Zusammenhängen und Veränderungen. Die Modellierung und Entscheidungsfindung werden wirkungsvoll unterstützt.
Die Visualisierung gehört zu den am frühesten benutzten und am häufigsten eingesetzten
Wahrnehmungstechniken der Umwelt des Menschen. Information und Kommunikation mittels
37
Visualisierung geschieht häufig unbewusst und intuitiv. Visualisierung ist die Transformation
von Daten in ein sichtbares Bild zur Unterstützung der Erkundung, des Erkennens und der
Erklärung von Strukturen und Prozessen. Visualisierung ist damit eine wichtige Methode für
den wissenschaftlichen Erkenntnisprozess und zugleich ein Verfahren zur raschen Übermittlung komplexer Informationen zwischen Wissenschaft und Praxis.
Die moderne Kartographie orientiert sich an einer Modelltheorie, in der die drei Zustände ineinander überführt werden. Das Original in Form der abzubildenden Landschaft oder eines
problemabhängigen Ausschnitts der Realität wird in ein Primärmodell (Datenmodell) überführt, aus dem beliebige Sekundärmodelle (Präsentationsmodelle) abgeleitet werden können. Die Datenerfassung und Modellierung der Geoobjekte der realen Welt führt zu dem
Primärmodell. Das Primärmodell ist eine 1:1 Abbildung der Realität. Bei der visuellen Präsentation der Geoobjekte sind die Betrachtung und der Aufbau von Sekundärmodellen als
Ableitung aus den jeweiligen Primärmodellen notwendig. Bei einem Präsentationsmodell
handelt es sich um ein kartographisches Modell, das z.B. die kartographischen Signaturen
definiert. Im Gegensatz zu Primärmodellen müssen die Sekundärmodelle nicht unbedingt
eine 1:1 Abbildung der Realität sein.
Die Aufgabe des Präsentationsmodells besteht somit in der Umsetzung kartographischer
Darstellungsformen, die in ihrem Erscheinungsbild völlig losgelöst vom jeweiligen Datenmodell sein können. Es muss umgekehrt jedoch möglich sein, aus jedem beliebigen Datenmodell eine kartographische Darstellung zu entwickeln. Der angestrebte Übergang vom
Datenmodell zum Präsentationsmodell wird über Maßnahmen der Modellgeneralisierung bzw.
der kartographischen Generalisierung erreicht. Während die Modellgeneralisierung den Übergang von einem Objektmodell zu einem anderen Objektmodell behandelt, strebt die kartographische Generalisierung den Übergang von Objektmodell zum kartographischen Modell
an.
4.4
Kartenprojektion
Die Position jedes Geoobjektes auf der Erdoberfläche kann durch das geodätische Koordinatensystem genau bestimmt werden. In diesem System sind der Nullmeridian und der Äquator die Referenzebenen. Der Äquator teilt die Erdkugel in zwei Hälften: Die nördliche und
die südliche Halbkugel, wobei der Äquator selbst senkrecht zur Erdachse steht. Die anderen
Breitenkreise verlaufen parallel dazu, insgesamt 90 in nördlicher sowie 90 in südlicher Richtung vom Äquator aus gesehen. Der Greenwich-Meridian ist der so genannte Nullmeridian. In
ost-westlicher Richtung von dem Nullmeridian liegen die einzelnen Längenkreise nebeneinander, wobei diese jeweils den Nord- und den Südpol verbinden. Die geodätische Länge φ ist
der Winkel zwischen der Meridianebene von Greenwich und der Meridianebene des aktuellen
Punktes, die geodätische Breite λ ist der Winkel zwischen der Ellipsoidnormale im aktuellen
Punkt und der Äquatorebene. Die ellipsoidische Höhe h ist die Höhe eines Punktes über
seinem Lotfußpunkt auf dem Ellipsoid.
38
Abb. 4.3: geodätische Länge und Breite, ellipsoidische Höhe [Bart00]
Das geodätische Koordinatensystem beschreibt die Position der Geoobjekte auf einer gekrümmten Oberfläche. Um sie in einer flachen Karte darzustellen müssen die geodätischen
Koordinaten durch bestimmte mathematische Formeln auf eine rechtwinklige (kartesischen)
Koordinaten übertragen werden. Falls der Ursprung des kartesischen Koordinatensystems
mit dem Zentrum des Rotationsellipsoides zusammenfällt und die x-Achse das Ellipsoid am
Punkt φ=0, λ=0 durchstößt, so gilt:
⎛ x ⎞ ⎛ [ N + h] cos ϕ cos λ ⎞
⎟
⎜ ⎟ ⎜
⎜ y ⎟ = ⎜ [ N + h] cos ϕ sin λ ⎟
⎜ z ⎟ ⎜ [ N (1 − e 2 ) + h] sin ϕ ⎟
⎝ ⎠ ⎝
⎠
Wobei N = a (1 − e 2 sin 2 ϕ )
−
1
2
und a die große Halbachse sowie e die numerische Exzentri-
zität des Ellipsoides ist.
Eine gekrümmte Oberfläche kann nicht verzerrungsfrei in die Ebene abgewickelt werden,
deswegen muss man die Erdeoberfläche auf mehrere Bereiche aufteilen, dann die lokale
Bereiche abbilden und die Abbildung stückweise zusammensetzen. In Deutschland und Österreich wird die Gauß-Krüger-Projektion verwendet. Die GK-Projektion umfasst 120 Meridianstreifen zu je 3 Grad. Jeder Meridianstreifen erhält eine Kennziffer. Dabei bekommt der
Nullmeridian die Kennziffer 0 zugewiesen. Nach Osten wird aufwärts gezählt, und nach
39
Westen abwärts gezählt. In jedem Streifen wird ein rechtwinkliges Koordinatensystem gelegt,
die Y-Achse (Rechtswert) wird am Äquator gelegt, und die X-Achse (Hochwert) wird auf den
Hauptmeridian gelegt. Der Rechtswert gibt die Entfernung vom Hauptmeridian bis zum Punkt
an, und der Hochwert die Entfernung von Äquator auf dem abgebildeten Hauptmeridian bis
zum Ordinatenfußpunkt. Der Rechts- und Hochwert wird in Metern angegeben. Um beim
Rechtswert negative Werte zu vermeiden, wird zu diesem Wert häufig ein konstanter Wert
von 500.000 m addiert. Vor diesen Wert wird die Kennziffer des Meridianstreifens gesetzt. Als
Hochwert wird immer die Entfernung vom Äquator angegeben. Ein Punkt mit Hochwert
15.932.432 m und Rechtswert 4.568.211 m bedeutet, dass er 15.932.432 m vom Äquator
entfernt ist, und liegt im 4. Meridianstreifen bei +68.211 m.
In der bundesdeutschen Landesvermessung gibt es im Randbereich eines Meridianstreifens
jeweils ein „Überlappungsbereich“ mit einer Breite von 1 Grad und 40 Minuten. Im Überlappungsbereich werden für jeden Punkt die Koordinaten im jeweiligen Meridianstreifen und die
Koordinaten des benachbarten Meridianstreifens angegeben.
40
5.
Modellierung von Geoobjekten in VisMap
Die Geoobjekte der realen Welt können nicht direkt in die Datenbank gespeichert und auf der
Bildschirmkarte visualisiert werden. Sie müssen zuerst nach den Verwendungszwecken und
gemäß verschiedenen Maßstäben abstrahiert und durch einfache geometrische Objekte
modelliert werden. Diese geometrischen Objekte können dann mit der Verwendung eines
Präsentationsmodells auf dem Bildschirm visualisiert werden.
In VisMap wird Microsoft Access als DBMS verwendet. Weil Access ein relationales DBMS ist,
wird hier das relationale Modell benutzt. Als Beispiel wird in VisMap das Autobahn- und Eisenbahnnetz Deutschlands verwendet. Weil es sich um ein Infrastrukturnetz handelt, wird hier
für die Modellierung der Geoobjekte ein Vektormodell benutzt, das Genauigkeit bzw. Eindeutigkeit verlangt.
Abb. 5.1: ER-Diagramm von VisMap
Die Anforderungen der Datenbank sind stark von der jeweiligen Anwendung abhängig. In
dieser Diplomarbeit soll die Datenbank in der Lage sein, alle Informationen zu erhalten, aus
denen eine Karte vom Verkehrsnetz Deutschlands durch ein VB .NET-Programm automatisch generiert und auf den Bildschirm angezeigt werden kann. Außerdem soll sie auch die
allgemeinen Metadaten der Geoobjekte erhalten, um die verschiedenen Suchkriterien verwenden zu können.
41
Für die Beispielsanwendung sollen folgende Geoobjekte modelliert und in der Datenbank
gespeichert werden: Städte, Flughäfen, Infrastrukturen zwischen zwei benachbarten Städten,
Zuglinien, Autobahnlinien, Bundesländer und Länder. Weil die Geoobjekte nicht nur tabellarisch in der Datenbank gespeichert, sondern auch in Form einer Karte auf den Bildschirm
angezeigt werden, wird die Modelltheorie der Kartographie verwendet. Wie im letzten Kapitel
dargelegt, gibt es in der Kartographie zwei Modelle der Geoobjekten der realen Welt: das
Primärmodell (Datenmodell) und das Sekundärmodell (Präsentationsmodell). In den zwei
Vorgängerarbeiten wird nur das Primärmodell in der Datenbank gespeichert, das Präsentationsmodell wird aber im VB-Programm festgelegt. Der Nachteil ist offensichtlich: Der Endnutzer kann das Präsentationsmodell nicht ändern, da das GUI dafür keine Funktion anbietet
und er auch keinen Zugriff auf die Quellcode des VB-Programms hat. Der Zeitaufwand für die
Anpassung des Programms ist sehr groß. Das VisMap-System speichert dagegen nicht nur
das Primärmodell, sondern auch das Präsentationsmodell in der Datenbank. Die Änderungen
des Präsentationsmodells kann man sowohl durch das GUI (Endnutzer) als auch durch direkte Bearbeitung in der Datenbank (Datenbankadministrator) realisieret werden.
5.1
Primärmodell der Geoobjekte
Das Primärmodell besteht aus den geometrischen und semantischen Beschreibungen der
Objekte der realen Welt sowie den zwischen ihnen bestehenden Beziehungen unabhängig
von einem konkreten Präsentationsmodell. Die Modellierung der Geometrie der Geoobjekte
ist fundamentaler Bestandteil des Primärmodells. Da wir hier das Vektormodell verwenden,
werden alle Geoobjekte als geometrische Formen modelliert, um sie in der Bildschirmkarte
darstellen zu können.
Die einfachsten geometrischen Formen sind Punkt, Linie und Vieleck. Wegen der Komplexität
der Geoobjekte sind solche einfache Formen nicht ausreichend, um ein zufrieden stellendes
geometrisches Modell der Geoobjekte zu gewinnen. Eine Zuglinie kann zum Beispiel nicht als
Linie modelliert werden, da sie mehrere Städte verbindet; sie ist deswegen nur durch ein
Polygon darstellbar. Analog können manche Länder nicht durch ein Vieleck präsentiert werden. Sie können aus mehreren Bezirken bestehen und deswegen nur mit einer Vieleckgruppe
modelliert werden.
Aus oben genannten Gründen werden in VisMap die Geoobjekte der realen Welt beim Aufbau
des Primärmodells als Punkt, Polygon oder Vieleckgruppe modelliert. Ein Geoobjekt kann
nach den verschiedenen Maßstäben und Anwendungszwecken unterschiedlich modelliert
werden. Eine Stadt kann zum Beispiel in einer Karte im großen Maßstab als Punkt, aber in
einer anderen Karte im kleinen Maßstab als Vieleckgruppe modelliert werden.
Die Thematik der Karte beeinflusst die Modellierung der Geoobjekte ebenfalls sehr stark. In
einem Stadtplan wird die Stadt als Vieleckgruppe modelliert, da nicht nur die Informationen
über die ganze Stadt, sondern auch detaillierte Informationen über die relevanten Entities in
42
der Stadt dargestellt werden. Die Verläufe der Straßen und die Positionen wichtiger Gebäude
sind die typischen Informationen, die in einem Stadtplan enthalten sein sollen. Solche Entities
liegen in der Stadt. Der Punkt ist die kleinste geometrische Einheit, nichts kann in einem
Punkt liegen. Deswegen kann die Stadt in einem Stadtplan nicht als Punkt, sondern nur als
Vieleckgruppe modelliert werden. Nur dann können die Details der Stadt richtig positioniert
und dargestellt werden. Die Bildschirmkarte in unserem Beispiel ist eine Karte des Verkehrsnetzes zwischen den Städten. Die Details der Stadt wie zum Beispiel die Position des
Rathauses oder der Verlauf einer bestimmten Straße sind irrelevant. Die Informationen der
Entities der Stadt sind ebenfalls irrelevant. Relevant sind die Positionen des Stadtzentrums
und die allgemeinen Metadaten der Stadt, um sie in der Karte zu positionieren und einen
Überblick über ihre wichtigsten Informationen der Stadt zu gewinnen. Deswegen genügt es in
dieser Situation, die Städte als Punkte zu modellieren.
Da VisMap eine 2D-Bildschirmkarte erzeugt, wird jeder Punkt durch ein Tupel Koordinaten
festgelegt. Das Bezugssystem, das hier benutzt wird, ist WGS84. Die Position eines Geoobjekts der realen Welt wird durch ihre geodädische Breite (Latitude) und Länge (Longitude)
eindeutig definiert. Die Breite bezieht sich auf den Äquator und reicht von 90 Grad Nord bis 90
Grad Süd. Die Länge bezieht sich auf den Nullmeridian, der durch Greenwich verläuft. Längengrade liegen im Bereich von 180 Grad West bis 180 Grad Ost. Die Geoobjekte City und
Airport werden im diesen Beispiel durch Punkt modelliert.
Abb. 5.2: Modellierung des Geoobjektes des Typs „City“
Die Metadaten der Geoobjekte City und Airport werden in den Tabellen „MetaDaten_city“ und
„MetaDaten_airport“ abgelegt. In unserem Beispiel werden nur einige wichtige Eigenschaften
der Geoobjekte gespeichert. Später lassen sich die Felder der zwei Tabellen nach Bedarf
beliebig erweitern. Diese Vereinfachung gilt auch für andere Geoobjekte.
Die Straßenlinien und Infrastrukturen sind die wichtigsten Geoobjekte in diesem Beispiel. Sie
präsentieren die topologischen Beziehungen zwischen den Städten und können daher nicht
43
als Punkte modelliert werden, da ein Punkt selbst keine topologische Bedeutung hat. In einem
Architekturplan ist es für die Gebäude nötig, die Straßen als Vieleckgruppe zu modellieren, da
es sich um eine Karte im kleinen Maßstab handelt, und ihre Breite und andere Details für die
Anwendung relevant sind. In unserem Beispiel sind die Straßen und Infrastrukturen in einer
Karte im großen Maßstab, denn detaillierte Informationen über eine Straße sind unwichtig.
Die Straßenlinien oder Infrastrukturen präsentieren die topologischen Beziehungen zwischen
den Städten, deswegen wird hier der Linienzug benutzt. Wegen des Aufwands der Datengewinnung werden die Verläufe der Straßenlinien und Infrastrukturen in VisMap stark vereinfacht, die Straßen zwischen zwei Städten werden nur als Linien modelliert. Aber in der
Datenbank werden sie immer als Linienzüge gespeichert, da die Linie ein Sonderfall des Linienzugs ist.
Eine Linie verbindet zwei Punkte. Sie kann nur existieren, wenn ihr Anfangspunkt und Endpunkt schon existiert. Sie beschreibt auch die Topologie zwischen zwei Punkten. Die Geometrie einer Linie wird durch die Koordinaten des Anfangspunktes und des Endpunktes der
Linie gegeben. Die Linie präsentiert kein Objekt der realen Welt, sie ist nur der Baustein des
Linienzugs.
Abb. 5.3: Modellierung des Geoobjektes des Typs „Zuglinie“
Ein Polygon besteht aus einer oder mehreren Linien. Die Geometrie der durch Polygone
modellierten Geoobjekte wird durch die Geometrie der durch die Linie modellierten Geoobjekte bestimmt. Die Infrastruktur zwischen zwei Städten (Eisenbahn, Straße), Zuglinien, die
Autobahnlinien und die Wege zwischen zwei durch Nodes modellierten Geoobjekten werden
in diesem Beispiel durch Polygone modelliert. Die Metadaten der als Polygon modellierten
Geoobjekte von unterschiedlichen Typen werden in den Tabellen „MetaDaten_railway“,
„MetaDaten_street“, „MetaDaten_zuglinie“ und „MetaDaten_autobahnlinie“ gespeichert.
Der Fall für Bundesländer und Länder ist viel übersichtlicher. Die Städte sind als Punkte
modelliert und liegen in einem Land oder einem Bundesland. Die Straßen und Infrastrukturen
sind als Linienzüge modelliert und liegen in einem oder mehreren Ländern/Bundesländern.
Gleiches gilt für die Modellierung der Städte. Sie können nur als Vieleckgruppen modelliert
werden.
44
Das Primärmodell ist eine 1:1 Abbildung des problemabhängigen Abschnitts der Realität, und
jedem Objekt im Primärmodell wird eine geometrische Form zugewiesen. Deswegen werden
die topologischen Beziehungen zwischen den Geoobjekten der realen Welt durch die topologischen Beziehungen zwischen den geometrischen Formen repräsentiert. Im VB-Programm
wird nur die Beziehung zwischen den geometrischen Formen betrachtet.
Die Punkte sind die atomarsten Entities. Sie sind abhängig von keiner anderen geometrischen Form. Eine Linie ist durch genau einen Startpunkt und einen Endpunkt festgelegt, aber
ein Punkt kann der Start-/Endpunkt von beliebig viele Linien sein. Ein Polygon kann aus einer
oder mehreren Linien bestehen. Ein Vieleck ist begrenzt durch genau ein abgeschlossenes
Polygon, und ein Polygon begrenzt auch maximal ein Vieleck. Eine Vieleckgruppe besteht
aus einem oder mehreren Vielecken.
Um die Geoobjekte der realen Welt auf der Bildschirmkarte zu visualisieren, soll ein Sekundärmodell (Präsentationsmodell) aufgebaut werden. Die in der Bildschirmkarte angezeigten
Objekte sind die Abbildung dieser geometrischen Objekte und damit auch die Abbildung der
Objekte der realen Welt. Die Eigenschaften der Objekte im Präsentationsmodell bestimmen
die Visualisierungsform der geometrischen Objekte. So können für einen bestimmten Typ
geometrischer Objekte wie zum Beispiel die Linien verschiedene Farben, Breiten oder Stile
definiert werden.
Abb. 5.4: Modellierung des Geoobjektes des Typs „State“
Ein Vieleck ist von einem abgeschlossenen Polygon begrenzt. Die Geometrie eines Vielecks
wird durch die Koordinaten seiner Eckpunkte bestimmt. Die Vieleckgruppe kann aus einem
oder mehreren Vielecken bestehen. Im diesen Beispiel werden die Bundesländer, das ganze
Deutschland und die Seen durch die Vieleckgruppe modelliert. Die Metadaten der als Vieleckgruppe modellierten Geoobjekte unterschiedlicher Typen werden in den Tabellen „MetaDaten_state“ und „MetaDaten_country“ gespeichert.
45
5.2
Präsentationsmodell der Geoobjekte
Durch die Modellierung des Primärmodells lassen sich bereits die Informationen der relevanten Geoobjekte in die Datenbank speichern und somit manipulieren. Aber um die Geoobjekte in der Bildschirmkarte zu visualisieren, muss noch ein Sekundärmodell
(Präsentationsmodell) aufgebaut werden.
Jedes durch Punkte modellierte Geoobjekt kann durch „Nodes“ in der Bildschirmkarte dargestellt werden, dessen Position von der Koordinate des zugrunde liegenden Punktes umgerechnet ist. Alle Nodes werden in der Tabelle „node“ gespeichert. Das Feld „typeID“ zeigt den
Typ des Nodes. Den verschiedenen Node-Typen können unterschiedliche Darstellungsformen zugewiesen werden. Zum Beispiel kann eine Stadt durch ein Kreis mit einem schwarzen
Punkt in der Mitte dargestellt werden oder ein Flughafen durch ein blaues Fugzeug. Diese
Informationen werden in der Tabelle „nodeType“ gespeichert. Die Darstellungsformen der
Nodes werden durch unterschiedliche Bilder bestimmt. Die Bilder werden in der Tabelle
„images“ gespeichert. Man kann mit dem GUI nicht nur die Darstellungsform des Nodes ändern, sondern auch neue Bilder in der Datenbank hinzufügen.
Die durch Polygone modellierten Geoobjekte können durch „Path“ in der Bildschirmkarte dargestellt werden. Da sie aus Linien bestehen, werden ihre Positionen in der Bildschirmkarte
durch die Positionen der bestehenden Linien abgeleitet. Die Positionen der Linien werden von
den Koordinaten der zugrunde liegenden Start- und Endpunkte umgerechnet. Die Darstellungsformen der Polygone werden durch verschiedene Linientypen, -farben und -breiten bestimmt. Solche Informationen werden in der Tabelle „polygonType“ gespeichert. Man kann für
verschiedenen Typen von Polygonen unterschiedliche Darstellungsformen zuweisen. Zum
Beispiel kann eine Eisenbahn durch eine schwarze Linie dargestellt werden, eine Straße
durch eine blaue Linie.
Die durch eine Vieleckgruppe modellierten Geoobjekte können durch „Region Set“ in der
Bildschirmkarte dargestellt werden. Da sie aus Vielecken bestehen, werden ihre Positionen in
der Bildschirmkarte durch die Position der bestehenden Vielecke abgeleitet. Die Vielecke sind
durch ein abgeschlossenes Polygon begrenzt, deswegen sind ihre Positionen durch die Positionen der Polygone bestimmt. Die Darstellungsformen der Vieleckgruppe werden durch die
Darstellungsformen der zugrunde liegenden Polygone und das Textur ihres Inneren festgelegt. Diese Informationen werden in der Tabelle „areaType“ gespeichert. Verschiedenen Typen von Vieleckgruppen können unterschiedliche Darstellungsformen zugewiesen werden.
Zum Beispiel kann die Landesgrenze durch eine Linie mit der Breite drei, und eine Bundesland-Grenze durch eine Linie mit der Breite eins dargestellt werden.
46
6.
VisMap
6.1
Systemarchitektur
Das VisMap-System besteht aus vier Hauptkomponenten: einer Access-Datenbank, die alle
Informationen über Geoobjekte enthält; einem benutzerfreundlichen GUI, durch das man mit
der Datenbank interagieren kann; dem Kartengenerator, der die Bildschirmkarte erstellt, und
dem Fenstermanager, der die Ereignisse vom GUI interpretiert und darauf reagiert.
Abbildung 6.1 zeigt die Struktur von VisMap. Es kann sowohl das GUI als auch Microsoft
Access benutzt werden, um auf die Datenbank zuzugreifen. Das GUI erzeugt Ereignisse
durch die Bedienung vom Nutzer, der Fenstermanager reagiert auf die Ereignisse und benutzt ADO .NET als Interface für den Zugriff der Jet Database Engine. Die Jet Database Engine dient als DBMS. Sie verarbeitet die SQL-Anweisungen und kommuniziert mit der
Datenbank. Nach der Bearbeitung der SQL-Anweisungen sendet die Jet Database Engine
dann die Ergebnisse der Abfragen zu dem ADO .NET Interface zurück. Das ADO .NET leitet
die Ergebnisse weiter zum Fenstermanager. Dieser bearbeitet die Eingaben vom ADO .NET
und sendet die Ergebnisse eventuell zum Kartengenerator, welcher die Koordinaten der
Geoobjekte konvertiert und eine Bitmap mit den Ergebnissen erzeugt und auf dem Bildschirm
präsentiert. Der andere Weg ist unkomplizierter: Microsoft Access ist das Standardinterface
für das Jet Database Engine. Es kommuniziert direkt mit diesem und bearbeitet die Datenbank mit den Anweisungen. Der Benutzer hat in Access alle Möglichkeiten, die Datenbank zu
manipulieren. Die Voraussetzung hierfür ist, dass er ausreichende Datenbankkenntnisse besitzt und Zugriffsrecht auf die Datenbank hat.
Um die nötige Sicherheit zu gewähren wird die Datenbank durch zwei Arten von Kennwörtern
geschützt. Auf Benutzerebene gibt es zwei Gruppen: die Gruppe „Administrator“ und die
Gruppe „Benutzer“. Jeder Benutzer hat sein eignes Kennwort und gehört zu einer oder mehreren Gruppen. Verschiedene Gruppe haben unterschiedliche Zugriffsrechte auf die Datenbank. Während die Mitglieder der Gruppe „Administrator“ Vollzugriff auf die Datenbank haben,
besitzen die Mitglieder der Gruppe „Benutzer“ nur beschränkten Zugriff. Sie können nur Datensätze in den Tabellen manipulieren, aber nicht die Strukturen der Tabellen ändern. Die
Sicherheit auf der Benutzerebene ist jedoch nicht ausreichend. Sie kann das Zugriffsrecht nur,
wenn die Datenbank mit Access geöffnet wird, kontrollieren. Wird auf die Datenbank direkt
durch den OLEDB-Provider zugegriffen, ist dieser Schützmechanismus umgangen. Der Programmierer hat dann Vollzugriff auf die Datenbank. Um diese Situation zu vermeiden, sollte
zusätzlich ein Datenbankkennwort für die Datenbank verwendet werden, das alle Benutzer
eingeben müssen, um die Datenbank öffnen zu können. Auch der Programmierer muss das
Kennwort kennen, um die Datenbank durch den OLEDB-Provider zu öffnen.
47
Ein normaler Benutzer von VisMap kann auf die Datenbank nicht direkt zugreifen. Nur mit
dem GUI hat er die Möglichkeit, mit Hilfe der Steuerelemente des graphischen Interfaces die
DML eingeschränkt zu benutzen, um die Daten in der Datenbank zu manipulieren. Er hat jedoch keine Möglichkeit, die DDL zu benutzen, um die Datenbankstruktur zu ändern. Der
Benutzer sollte die SQL-Anweisungen nicht direkt erteilen können, da es möglich ist, dass er
nicht genug Kenntnisse von Datenbanken besitzt und nicht in der Lage ist, die Datenbank
direkt mit den SQL-Anweisungen richtig zu bearbeiten. Die CheckBoxes, ComboBoxes,
TextBoxes und Menüs helfen ihm, korrekte SQL-Anweisungen zu konstruieren.
DatenbankAdministrator
GUI
Kartengenerator
MS Access
Nutzer
Fenstermanager
geodata.mdb
Jet Database Engine
ADO .NET
VisMap
DB-Back End
Abb. 6.1 Systemarchitektur von VisMap
Der Datenbankadministrator hat Vollzugriff auf die Datenbank. Er kann die Daten in der Datenbank sowohl durch das GUI als auch durch Microsoft Access manipulieren. Wenn er mit
Access arbeitet, kann er die SQL-Anweisungen direkt ausführen, die Datenbankstruktur ändern und die Datensätze abfragen. Was er in Access nicht ermöglichen kann, ist, die Daten
graphisch auf dem Bildschirm darzustellen. Hierin liegt auch der Grund, aus dem das GUI
aufgebaut wird.
48
6.2
GUI
Die Objekte in einem Geo-Informationssystem sind nicht abstrakte sondern reale Gegenstände, die durch Graphik auf dem Bildschirm simuliert werden können. Deswegen wird ein
GUI für die Datenbank entworfen. Das graphische Interface ist aus Nutzersicht der wichtigste
Bestandteil von VisMap. Mit seiner Hilfe kann ein Benutzer ohne Datenbankkenntnisse die
Daten in der Datenbank manipulieren. Das Ziel des GUI ist, ein benutzerfreundliches Interface für die Manipulation der Datenbank und eine interaktive Bildschirmkarte für die visuelle
Darstellung der Geoobjekte anzubieten. Das GUI besteht aus Steuerelementen. Die Klassen,
die das GUI konstruieren, erben die von .NET vordefinierte Klasse System.Windows.Forms.Form, um das graphische Interface unter dem Betriebssystem Windows
aufbauen zu können.
Abb. 6.2: Hauptfenster von VisMap
6.2.1
Layout der Bildschirmkarte
Das wichtigste Steuerelement des GUI ist die PictureBox1. Sie enthält die Bildschirmkarte.
Die Geometrie der Geoobjekte in VisMap wird durch die geometrischen Koordinaten (x, y)
beschrieben und das Koordinatensystem der PictureBox1 ist ein kartesisches Koordinaten-
49
system, das ideal dafür geeignet ist, alle Geoobjekte in der Datenbank in einer
2D-Bildschirmkarte zu präsentieren.
Die Bildschirmkarte in der PictureBox1 ist eine Bitmap, sie wird durch den Kartengenerator
erzeugt. Beim Starten des GUI wird eine Bitmap mit vorgegebenen Optionen generiert und in
der PictureBox1 angezeigt. Der vorgegebene Maßstab wird so definiert, dass alle Geoobjekte
der Datenbank in der PictureBox1 präsentiert werden können. Nachdem das GUI initialisiert
wurde, kann mit dem Mausklick der Maßstab der Karte vergrößert oder verkleinert werden.
Ebenso lassen sich per Mausklick auf die Bildschirmkarte die Tooltips mit Metadaten der
Geoobjekte und die ContextMenus für Löschen und Aktualisieren der Geoobjekte aktivieren.
Das Koordinatensystem der PictureBox1 ist das Windows-typische Koordinatensystem, sein
Unterschied zum kartesischen Koordinatensystem ist, dass der Ursprung des Koordinatensystems links oben liegt, und der positive Zuwachs der Y-Koordinate erfolgt nach unten hin.
Beim Kartesischen Koordinatensystem ist die Ordinate umgekehrt ausgerichtet, also von
unten nach oben zeigend. Da die Geometrie der Geoobjekte aber von dem geodätischen
Koordinaten beschrieben wird, müssen die Koordinaten zuerst konvertiert werden, damit die
Geoobjekte im Rang der Bildschirmkarte angezeigt werden können. Die Konvertierung erfolgt
in zwei Schritten: Zuerst wird eine Projektion von den geodätischen Koordinaten zu den ebenen rechtwinkligen Koordinaten durchgeführt, dann werden diese Koordinaten umgerechnet, um das Koordinatensystem der PictureBox1 anzupassen.
Zunächst wurde geplant, zuerst die Gauß-Krüger-Projektion anzuwenden und dann die
Gauß-Krüger-Koordinaten nach Maßstab zu verkleinern und zu verschieben, bis sie in der
PictureBox1 angezeigt werden können. Im unseren Beispiel befinden sich die geodätischen
Koordinaten der Geoobjekte in drei verschiedenen Meridianstreifen mit der Streifenbreite 3○.
Um sie in einer Karte darzustellen muss nach der Gauß-Krüger-Projektion noch eine Streifentransformation durchgeführt werden. Diese Transformation ist noch nicht im VB-Programm
implementiert. Deswegen wird im hier behandelten Beispiel der erste Schritt der Konvertierung übersprungen und die geodätischen Koordinaten werden direkt nach Maßstab verkleinert und verschoben. Dies stellt nur eine Zwischenlösung dar. Wenn das Problem der
Transformation zwischen verschiedenen Meridianstreifen gelöst wird, dann kann die alte
convert.vb leicht durch die neue ersetzt werden.
6.2.2
Steuerelemente des Hauptfensters
Das Hauptfenster des GUI besteht aus folgenden Steuerelementen: einer Menüleiste, einer
Statusleiste, einer PictureBox, einer RichtextBox bzw. ListBox, sowie diversen CheckBoxes,
ComboBoxes, TextBoxes, Labels und Buttons.
Mit Hilfe der Menüleisten kann ein Benutzer fast alle Funktionen von VisMap verwenden. Das
Submenü „File“ besteht aus „Open“ und „Exit“, womit eine gewünschte Datenbank geöffnet
50
und das Programm beenden werden kann. Das Submenü „View“ wird verwendet, um zu
bestimmen, welche Typen von Geoobjekten in der PictureBox angezeigt werden sollen. Mit
dem Submenü „Add“ kann der Einfügemodus aktiviert werden, um per Mausklick die neue
Geoobjekte in die Datenbank einzufügen. Mit dem Submenü „Options“ lässt sich konfigurieren, wie die Geoobjekte auf dem Bildschirm dargestellt werden sollen. Das Submenü „About“ von „Help“ zeigt die Metadaten des Programms wie zum Beispiel Name, Version und
Autor des Programms.
Die RichtextBox bzw. ListBox dient als Metadaten-Anzeige für die gewählten Geoobjekte. Die
Metadaten der ausgewählten Geoobjekte oder die per Suchfunktion gefundenen Wege zwischen zwei Nodes werden hier als Text angezeigt.
Die PictureBox dient als Container für die Bildschirmkarte. Alle Geoobjekte in der Datenbank
können nach Wunsch visualisiert und in der PictureBox graphisch dargestellt werden. Die
PictureBox akzeptiert Mausereignisse; auf diese Weise kann interaktiv mit der Datenbank
kommuniziert werden. Unter verschiedenen Modulen wird das Programm auf spezifische Ereignisse unterschiedlich reagieren. Ein linker Mausklick aktiviert im „Add Point“-Modul die
Form frmAddIcon.vb, während im „Zoom“-Modul die „Zoom in“-Funktion aktiviert wird.
Die Statusleiste zeigt die geodätischen Koordinaten der Mausposition in der PictureBox, die
durch das „MouseMove“-Ereignis von der PictureBox ständig aktualisiert werden.
Durch Auswahl der CheckBoxes in der Gruppe „Add“ kann das Einfügemodul aktiviert werden.
Man kann auswählen, welche Art von Geoobjekten in die Datenbank hinzugefügt werden
sollen. Die CheckBoxes in der Gruppe „Show“ steuern die in der Picturebox dargestellten
Geoobjekte nach Wunsch. Das Geoobjekt, das von den ComboBoxes in der Gruppe „Select“ ausgewählt wird, wird in der Picturebox graphisch angezeigt. Per „Route Search“ lassen
sich auch alle bzw. optimale Verbindungen zwischen zwei Knoten suchen. Das Ergebnis wird
in der ListBox angezeigt.
Abb. 6.3: diverse Steuerelemente des Hauptfensters
51
6.2.3
Konfiguration der Bildschirmkarte
Anders
als
in
den
zwei
Vorgängerarbeiten
kann
der
Benutzer in VisMap die Darstellungsformen der Geoobjekte mittels
der GUI ändern. Diese Funktion wird
durch die Auswahl des MenüItems
„Options -> Mode of Display“ realisiert. Nach der Auswahl des
MenuItems wird ein Fenster mit drei
Tabs aktiviert. Im Tab „Nodes“
können
unterschiedliche
Images zu den verschiedenen
Subklassen
der
Objektklasse
„Node“ zugewiesen werden. Weil die
Städte durch Nodes modelliert
werden, werden in diesem Tab die
Darstellungsformen
der
Städte
bestimmt. Die in den ComboBoxes
angezeigten Images sind nicht im
Programm definiert, sondern in der
Datenbank gespeichert. Mit dem
Mausklick auf den Button „Add New
Image“ kann man selbst definierte
Images in die Datenbank einfügen.
Dies
erhöht
die
Erweiterungsmöglichkeit des Präsentationsmodells von Geoobjekten. Mit dem
Mausklick
auf
den
Button
„Ok“ werden die Änderungen übernommen und in der Datenbank
gespeichert. Mit dem Mausklick auf
den Button „Cancel“ werden die
Änderungen verworfen und das
Fenster wird danach geschlossen.
Im
Tab
„Path“
kann
die
Abb. 6.4: Fenster zum Konfigurieren des PräsenDarstellungsform der Subklassen
tationsmodells der Geoobjekte
der Objektklasse „Path“ bestimmt
werden. Weil die Zuglinien und
Autobahnlinien durch Path modelliert werden, werden hier die Darstellungsformen der Zugli-
52
nien und Autobahnlinien bestimmt. Die Attribute „Style“, „Width“ und „Color“ werden ebenfalls
in der Datenbank gespeichert. Die Einträge in den ComboBoxes entsprechen den Parametern der Methode Graphics.DrawPath. Der Mausklick auf den Button „Ok“ oder „Cancel“ funktioniert wie im Tab „Nodes“.
Im Tab „Areas“ kann die Darstellungsform der Subklassen der Objektklasse „Area Set“ bestimmt werden. In unserem Beispiel sind „Country“ und „State“ vom Typ „Area Set“, seine
Darstellungsformen werden in diesem Tab bestimmt. Wie im Tab „Path“ entsprechen die
Einträge in den ComboBoxes den Parametern der Methode Graphics.DrawPath. Der Mausklick auf den Button „Ok“ oder „Cancel“ funktioniert wie im Tab „Nodes“.
6.3
Interaktion mit VisMap
Die Bildschirmkarte bietet nicht nur eine graphische Darstellung der Geoobjekte, sondern
auch ein Interface, wodurch die Geodaten in der Datenbank interaktiv bearbeiten werden
können. Der Benutzer kann mit den Mausklicks auf die Bildschirmkarte und der Abgaben der
Formulare die gewünschten Geoobjekte auf dem Bildschirm anzeigen, die Metadaten bestimmter Geoobjekte abfragen, neue Geoobjekte einfügen, löschen und aktualisieren, sowie
nach bestimmten Geoobjekten suchen. Das GUI hat zwei Modi: Normalmodus und Einfügemodus. Im Normalmodus können die in der Datenbank existierenden Geoobjekte bearbeitet
werden, während im Einfügemodus die neuen Geoobjekte in die Datenbank eingefügt werden.
6.3.1
Normalmodus
Bei Programmstart befindet sich der Nutzer im Normalmodus. Die Geoobjekte in der PictureBox, die vorgegeben angezeigt werden, sind alle in der Datenbank stehenden Geoobjekte
außer Infrastrukturen zwischen den Städten. Es gibt zwei Gründe, aus denen die physischen
Verbindungen nicht angezeigt werden: Erstens sind sie immer von den logischen Verbindungen bedeckt und zweitens ist die logische Bedeutung der Verbindungen zwischen den
Städten in einen Verkehrsnetz wichtiger als die physische Existenz der Infrastrukturen.
Die angezeigten Geoobjekte in der PictureBox lassen sich jedoch nach Wunsch definieren.
Durch die Benutzung der CheckBoxes in der Gruppe „Show“ können die vier Schichten der
Geoobjekte separat oder kombiniert in der PictureBox angezeigt werden. Durch die Benutzung des Menüs „Options -> Mode of Display“ werden die Subschichten der jeweiligen
Schicht konfiguriert, die angezeigt werden sollen.
Durch die Auswahl der CheckBox „Zoom“ hat der Benutzer die Möglichkeit, mit dem Mausklick auf die PictureBox die angezeigte Karte zu vergrößern oder zu verkleinern. Wenn die
CheckBox „Zoom“ angeklickt ist, wird die Auswahl der Geoobjekte beim Mausklick deaktiviert.
Stattdessen wird die Karte in der PictureBox beim rechten Mausklick um das 1,2-Fache ver53
größert und beim linken Mausklick um das 1,2-Fache verkleinert. Die Mitte der vergrößerten
bzw. verkleinerten Karte ist die Position des Mausklicks.
Nach der Darstellung von Geoobjekten können diese interaktiv bearbeitet werden. Im Normalmodus lassen sich die Geoobjekte abfragen, löschen und aktualisieren. Um ein Geoobjekt
zu bearbeiten, muss es zuerst ausgewählt werden. In VisMap wird das gewünschte Geoobjekt durch Mausklick auf die Karte in der PictureBox ausgewählt.
Wie oben erwähnt, gibt es in VisMap mehrere Schichten und Subschichten. Die ausgewählten Schichten werden überlappende in der Picturebox angezeigt. Nur die in der PictureBox
angezeigten Geoobjekte können ausgewählt werden. Wenn die CheckBox „Zoom“ nicht ausgewählt ist, muss das Programm bei jedem Mausklick auf die Karte in der PictureBox im
Normalmodus entscheiden, welches Objekt will der Benutzer mit dem Mausklick auswählen.
Im Prinzip erhält das Programm ein Koordinatenpaar beim Mausklick, und vergleicht es mit
den Koordinateninformationen der in der PictureBox angezeigten Geoobjekte. Wenn sie übereinstimmen, dann werden sie ausgewählt, was in der Praxis aber nicht durchführbar ist.
Mit der Maus lässt sich nur schwer auf einen Punkt oder eine Linie klicken. Dafür muss eine
Toleranz definiert werden. Man kann für die Nodes und Linienzüge eine Epsilonumgebung
definieren, jeder Mausklick in dieser Umgebung kann als Auswahl des Nodes oder Linienzugs
interpretieren. Die Epsilonumgebung kann sowohl durch die euklidische Metrik oder durch die
Manhattan-Metrik definiert werden.
Es kann passieren, dass ein Mausklick in der Epsilonumgebung von mehreren Geoobjekten
unterschiedlicher Schichten stattfindet. Das Programm muss zuerst feststellen, welche
Schicht der Benutzer auswählen will. Deswegen wird jeder Schicht eine Priorität zugewiesen.
Weil die Epsilonumgebung des Punktes kleiner als die der Linie, und die Epsilonumgebung
der Linie kleiner als die des Vielecks ist, haben die Nodes die höchste Priorität, danach die
Path und die Regionen haben die niedrigste Priorität. Das heißt, wenn sich ein Mausklick
gleichzeitig in der Epsilonumgebung von einem Node und einem Path befindet, nimmt das
Programm an, dass der Benutzer das Node auswählen will.
Es kann auch vorkommen, dass mehrere Objekte in derselben Schicht teilweise oder ganz
überlappend in der PictureBox dargestellt werden. Wenn die Metadaten der Geoobjekte abgefragen werden, werden alle überlappenden Objekte in der gleichen Schicht ausgewählt.
Wenn das Geoobjekt bearbeitet werden soll, erscheint ein Popup-Fenster und alle Kandidaten stehen dann in einer ComboBox des Fensters in der dann das gewünschte Objekt ausgewählt werden kann.
Beim Mausklick auf die PictureBox im Normalmodus überprüft das Programm zuerst, ob ein
oder mehrere Geoobjekte ausgewählt werden. Ist dies nicht der Fall, geschieht nichts. Andernfalls wird beim linken Mausklick eine Abfrage nach den Metadaten des Geoobjektes aufgerufen. Die Namen der ausgewählten Geoobjekte werden in einem ToolTip angezeigt,
gleichzeitig stehen die ausführlichen Metadaten des Objektes in der „Info Box“. Bem rechten
54
Mausklick wird ein Kontextmenü angezeigt. Die Menüeinträge des Kontextmenüs sind abhängig vom Typ des ausgewählten Geoobjektes. Mit der Auswahl des Menüeintrages wird die
entsprechende Methode aufgerufen, um das gewählte Objekt zu löschen oder zu aktualisieren.
Abb. 6.5: Fenster zum Aktualisieren der Verkehrslinien
Im Normalmodus kann man nicht nur die in der Datenbank existierenden Geoobjekte abfragen, sondern auch bearbeiten. Diese Funktion wird mit Hilfe der entsprechenden Fenster
ermöglicht. Die Auswahl des Geoobjekts, das der Nutzer bearbeiten möchte, ist identisch mit
der Anzeige der Metadaten von Geoobjekten. Beim rechten Mausklick auf die Bildschirmkarte
überprüft der Fenstermanager, ob ein Geoobjekt ausgewählt wird. In diesem Fall erscheint
ein ContextMenu. Hier kann die gewünschte Operation für das Geoobjekt ausgewählt werden.
Wenn die Operation „Delete“ gewählt wird, dann erscheint ein Dialogfenster, um die Operation zu bestätigen. Beim Mausklick auf den Button „Ok“ wird das Geoobjekt in der Datenbank
gelöscht, und mit dem Mausklick auf den Button „Cancel“ wird die Operation abgebrochen.
Wenn die Operation „Modify“ gewählt wird, erschienen abhängig vom ausgewählten Geoobjekt unterschiedliche Dialogfenster, in denen die Metadaten und Geometrie des Geoobjektes
geändert werden kann. Beim Ausfüllen der Formulare im Dialogfenster gibt der Benutzer die
neuen Werte der Objekte ein. Mit dem Mausklick auf den Button „Save“ werden die
SQL-Anweisungen konstruiert und zum DBMS übertragen. Die Daten in der Datenbank
werden dann aktualisiert. Mit dem Mausklick auf den Button „Cancel“ werden die Änderungen
verworfen und das Fenster wird geschlossen.
Die Änderungen der Geoobjekte bestehen aus den Änderungen der Geometrie und der
Thematik. Die Thematik und Geometrie einer Stadt oder eines Flughafens sind atomar. Die
Infrastruktur verbindet nur zwei Städte. Es ist nicht nötig, ihre geometrische Lage zu ändern.
Es genügt, die alte Lage zu löschen und eine neue anlegen. Die Änderungen, die für die
55
Städte, Flughäfen und Infrastrukturen eingegeben werden können, sind identisch mit denen,
die beim Einfügen solcher Geoobjekte eingegeben werden können. Deswegen sind die Darstellungen der Fenster zum Aktualisieren der Stadt, des Flughafens und der Infrastruktur
ähnlich wie beim Einfügen.
Die Geometrie der Verkehrslinien basiert auf der Geometrie der Infrastrukturen. Sie ist nicht
atomar in der Datenbank. Die Änderungen können deswegen nicht nur durch Aktualisieren
der existierenden Datensätze, sondern auch durch Einfügen oder Löschen der neuen Datensätze ermöglicht werden. Die SQL-Anweisungen dafür sind komplizierter als beim Aktualisieren der Städte, Flughäfen und Infrastrukturen. Die Struktur der SQL-Anweisungen für das
Aktualisieren der Thematik, das Einfügen eines neuen und das Löschen eines existierenden
Nodes sind unterschiedlich. Aus diesem Grund wird das Fenster in drei Tabs aufgeteilt: „General“, „Delete Node“ und „Add Node“. Beim Mausklick auf den Button „Ok“ in verschiedenen
Tabs werden unterschiedliche SQL-Anweisungen erzeugt. Im Tab „General“ lässt sich ausschließlich die Thematik der Verkehrslinien ändern, zum Beispiel deren Namen. Mit dem Tab
„Delete Node“ kann ein Node auf der Verkehrslinie gelöscht werden, in der Combobox stehen
nur die Nodes von der ausgewählten Verkehrslinie, da nur das schon auf der Verkehrslinie
stehende Node gelöscht werden kann. Mit dem Tab „Add Node“ lässt sich ein neues Node in
die Verkehrslinie einfügen. Die erste ComboBox enthält die Namen aller in der Datenbank
gespeicherten Nodes. Nur die schon existierenden Nodes können in eine Verkehrslinie eingefügt werden. Die zweite ComboBox enthält die Namen aller Nodes auf der Verkehrslinie,
um zu kontrollieren, auf welcher Position der Verkehrslinie das neue Node liegen soll. Mit den
RadioButtons kann man bestimmen, ob das neue Node vor oder hinter dem existierenden
Node der Verkehrslinie hinzugefügt werden soll.
Um die Integrität der Datenbank zu bewahren, gibt es für das Löschen und Aktualisieren des
Geoobjektes folgende Integritätsbedingungen:
•
•
•
•
•
Alle Attribute der Geoobjekte dürfen nicht Null sein
Die Werte der Koordinaten dürfen nur im Bereich von -180 bis +180 Grad sein
Die Anzahl der Bewohner darf nur positiv sein
Das Node darf nicht gelöscht werden, wenn es Start- oder Endpunkt einer Kante ist
Die Infrastruktur darf nicht gelöscht werden, wenn Verkehrslinien auf dieser Kante
basieren.
Eine weitere Funktionalität von VisMap im Normalmodus ist das Suchen nach einem bestimmten Objekt in der Datenbank. Die drei ComboBoxes rechts unten im Hauptfenster enthalten alle Geoobjekte der Datenbank. Mit ihnen lässt sich das gewünschte Geoobjekt
auswählen. Das ausgewählte Geoobjekt wird auf der Karte in der PictureBox anschaulich
dargestellt.
Das VisMap-System soll in der Lage sein, die Informationen nicht nur einfach darstellen und
bearbeiten, sondern auch nach individuellen Bedürfnissen analysieren zu können. Durch die
56
Analyse der existierenden Informationen in der Datenbank können neue Informationen gewonnen werden. Als Beispiel wird das Suchen nach den Verbindungen zwischen zwei beliebigen Städten verwendet. Man kann in einem Formular zwei beliebige Städte und den Typ
der Verbindung (momentan nur Eisenbahn und Straße) eingeben. Nach einem Klick auf den
Button „Search“ wird die Suche gestartet. Wenn kein Ergebnis gefunden wird, erscheint ein
Dialogfenster mit einer Warnung. Wenn es die Verbindungen zwischen beiden Städten gibt,
dann werden die gefundenen Verbindungen in der „Info Box“ angezeigt. Bei der Auswahl einer Verbindung in der „Info Box“ wird diese Verbindung graphisch auf der Karte in der PictureBox dargestellt, damit der Benutzer einen anschaulichen Eindruck vom Ergebnis erhält.
Abb. 6.6: Formular zum Suchen der Wege zwischen zwei Nodes
6.3.2
Einfügemodus
Mit Auswahl der CheckBoxes der Gruppe „Add“ befindet der Benutzer sich im Einfügemodus.
Hier kann er mit Mausklicks auf die Bildschirmkarte und die Formulare die neuen Geoobjekte
in die Datenbank speichern. Das Programm reagiert auf die Mausklicks und vordefinierten
Formulare, überprüft die Integritätsbedingungen, und fügt dann die eingegebene Geoobjekte
in die Datenbank ein. Es lassen sich in VisMap drei Typen von Objekte einfügen: Node, Path
und Region Set.
Es ist wichtig, die Objekte vom bestimmten Typ bereits auf dem Bildschirm sehen zu können,
wenn ein Objekt einfügt werden soll. Nur dann lässt sich die ungefähre Position des neuen
Objektes erkennen, gemäß den existierenden Objekten auf der Karte das neue Objekt einfügen, und nach dem Einfügen direkt auf der Karte sehen. Deswegen sind die Zustände der
CheckBoxes in der Gruppe „Add“ abhängig von den Zuständen der CheckBoxes der Gruppe
„View“. Sie sind nur aktiv und auswählbar, wenn die entsprechenden CheckBoxes in der
Gruppe „View“ ausgewählt sind.
57
Das Einfügen der Geoobjekte wird mit Hilfe des entsprechenden Fensters realisiert. Für das
Einfügen verschiedener Objektklassen gibt es unterschiedliche Fenster. Die ComboBoxes
und TextBoxes in den Fenstern entsprechen den Attributen der jeweiligen Geoobjekte, damit
die richtigen SQL-Anweisungen generiert werden können. Mit dem Mausklick auf den Button
„Ok“ werden die Änderungen angenommen, mit dem Mausklick auf den Button „Cancel“ werden die Änderungen verworfen und das Fenster wird geschlossen.
Das Einfügen eines neuen Nodes ist nur möglich, wenn die existierenden Nodes schon auf
der Bildschirmkarte angezeigt werden. Mit dem Mausklick auf die ungefähre Position des
Nodes in der PictureBox erscheint ein Dialogfenster. Man kann dann das Typ, die genauen
geodätischen Koordinaten und die Metadaten für das Node eingeben. Die Steuerelemente
des Dialogfensters werden gemäß dem Typ des Nodes angepasst. Die Klasse „frmAddNode“ erzeugt das Fenster zum Einfügen der Stadt oder des Flughafens. In der ComBox „Node
Type“ kann man die Subklasse der Objektklasse „Node“ wählen. Abhängig von der gewählten
Subklasse werden die entsprechenden ComboBoxes und TextBoxes aktiviert bzw. deaktiviert.
Wenn der Benutzer die Subklasse „City“ wählt, wird das Feld „IATA Code“ deaktiviert, da es
keine IATA-Kennzahl für eine Stadt gibt. Alle anderen Felder bleiben aktiviert. Wenn „Airport“ ausgewählt wird, werden die Felder „KFZ“, „Population“ und „Bundesland“ deaktiviert,
stattdessen wird das Feld „IATA Code“ aktiviert. Es gibt Regeln für die Felder: Die zentralen
Punkte der zwei Nodes können nicht dieselbe Koordinate haben, die Felder „Position“ und
„Population“ dürfen nur Zahlen enthalten, und alle Felder müssen ausgefüllt werden. Beim
Mausklick auf den Button „Ok“ wird kontrolliert, ob alle Regeln eingehalten wurden. Andernfalls erscheint eine Fehlermeldung.
Abb. 6.7: Fenster zum Einfügen einer neuen Stadt oder eines neuen Flughafens
Das Einfügen einer Infrastruktur zwischen zwei Nodes ist komplizierter als das Einfügen des
Nodes. Die Nodes müssen angezeigt werden, damit der Benutzer den Startpunkt und End-
58
punkt der Infrastruktur per Mausklick auswählen kann. Bem Ereignis MouseDown der linken
Maustaste überprüft das Programm, ob ein Node ausgewählt ist. In diesem Fall wird dieses
Node als Startpunkt der Infrastruktur zugewiesen. Andernfalls passiert nichts. Durch Bewegen der Maus wird dann der Endpunkt der Infrastruktur wählbar. Beim MouseUp-Ereignis der
linken Maustaste reagiert das Programm analog wie bei dem MouseDown Ereignis. Wenn ein
Node ausgewählt ist, dann ist es der Endpunkt der Infrastruktur. Nach der Bestimmung des
Startpunktes und Endpunktes der Infrastruktur erscheint ein Dialogfenster. Der Benutzer kann
in diesem Fenster die Namen der zwei Städte sehen, die mit dieser Infrastruktur verbunden
sind. Man kann dann den Typ der Infrastruktur (Eisenbahn oder Straße) eingeben.
Beim Einfügen einer Verkehrslinie (Autobahn oder Zuglinie) muss das Programm noch
strenger kontrollieren, um die Integrität der Datenbank zu bewahren. Wie beim Einfügen der
Infrastruktur müssen die Nodes auf der Bildschirmkarte angezeigt werden, damit der Benutzer die Routine der Verkehrslinie bestimmen kann. Das Programm überprüft beim jeden linken Mausklick, ob ein Node ausgewählt ist. Das erste ausgewählte Node wird als der
Startpunkt der Verkehrslinie gespeichert. Bei der Auswahl des zweiten und nachfolgenden
Nodes überprüft das Programm, ob es zwischen dem n-ten und n-1-ten ausgewählten Node
die Infrastruktur des bestimmten Typs gibt. Zum Beispiel wird beim Einfügen einer ICE Linie
überprüft, ob es zwischen den zwei Nodes eine Infrastruktur vom Typ Eisenbahn gibt. Wenn
eine solche Infrastruktur nicht existiert, dann wird der Vorgang abgebrochen, und eine Fehlermeldung angezeigt. Wenn diese Infrastruktur existiert, wird das ausgewählte Node als die
nächste Station der Routine gespeichert.
Mit dem rechten Mausklick endet die Auswahl der Routine. Das letzte ausgewählte Node wird
als der Endpunkt der Verkehrslinie gespeichert. Ein Dialogfenster erscheint automatisch, und
der Benutzer kann dann die Metadaten der Verkehrslinie eingeben. Der Verlauf der Verkehrslinie wird ganz oben im Fenster angezeigt, damit der Benutzer überprüfen kann, ob der
Verlauf richtig eingegeben wurde. Dieses Feld beschreibt die Geometrie der Verkehrslinien,
da seine Geometrie nicht atomar in der Datenbank ist, ist eine Änderung hier nicht möglich.
Wurde der Verlauf falsch ausgewählt, kann er entweder erneut ausgewählt oder durch das
Fenster zum Aktualisieren der Verkehrslinien modifiziert werden. Im Feld „Type“ lässt sich die
gewünschte Art der Verkehrslinie wählen, und im Feld „Name“ der Name für die Verkehrslinie
eingeben. Beide Felder müssen ausgefüllt werden. Bevor die Verkehrslinie in die Datenbank
gespeichert wird, muss das Programm überprüfen, ob eine identische Verkehrslinie schon in
der Datenbank vorhanden ist.
Beim Einfügen einer Region speichert das Programm die Position des ersten linken Mausklicks als Startpunkt der Region, und überprüft die folgenden Mausklicks. Bei einem rechten
Mausklick wird der Vorgang abgebrochen. Wenn die Position eines linken Mausklicks in der
Epsilonumgebung des Startpunktes liegt, dann erscheint das Fenster zum Einfügen der Region. In diesem Fenster kann der Name und Typ der Region eingegeben werden. Die beiden
Felder dürfen nicht leer sein.
59
6.4
Fenstermanager
6.4.1
Ereignisinterpretation
Die Ereignisse in einem VB-Programm sind abhängig von den Steuerelementen. Das heißt,
die gleichen Ereignisse von verschiedenen Steuerelementen werden unterschiedlich behandelt. Zum Beispiel werden beim linken Mausklick auf einen Button die eingegebenen Informationen zum Programm abgegeben, während beim Klick auf einen anderen Button die
eingegebenen Informationen verworfen werden. Die Methoden für solche Reaktionen sind
von .NET vordefiniert, und so lässt sich leicht die gewünschte Methode im Entwurfsfenster
auswählen. Solche vordefinierten Methoden sind leer, deswegen müssen danach die benutzerdefinierten Codes in die Methode eingefügt werden. Dies funktioniert reibungslos, wenn
die Reaktion auf jedes Ereignis eines Steuerelements eindeutig ist. Aber wenn es für das
gleiche Ereignis eines Steuerelements mehrere Reaktionsmöglichkeiten gibt, muss das Programm nach weiteren Kriterien überprüfen und die richtige Aktion durchführen.
Im GUI von VisMap sind die Reaktionen der Ereignisse für die meisten Steuerelemente eindeutig, außer beim Mausklick auf das Steuerelement PictureBox1. Ein Mausklick auf die PictureBox1 kann mehrere Bedeutungen haben. Zuerst sind das vom Drücken der Maustaste
erzeugte Ereignis und das vom Loslassen der Maustaste erzeugte Ereignis separat zu behandeln. Die zwei Ereignisse können die vorgegebenen Methoden PictureBox1_MouseDown
und PictureBox1_MouseUp aufrufen. Da das Loslassen der Maustaste notwendig immer
nach dem Drücken der Maustaste erfolgt, wird im Programm zuerst die Methode PictureBox1_MouseDown, und danach die Methode PictureBox1_MouseUp aufgerufen. Die separate Behandlung ist sehr sinnvoll, wenn die Drag and Drop Operation von der Maus auf einem
Steuerelement erwünscht ist. Zum Beispiel beim Einfügen einer Linie in VisMap: Das Drücken
der Maustaste auf ein Node ruft die PictureBox1_MouseDown Methode auf, speichert dieses
Node als Startpunkt, und das nachfolgende Auflösen der Maustaste auf ein anderes Node ruft
die PictureBox1_MouseUp Methode auf, speichert dieses Node als Endpunkt und dann ruft
das Fenster zum Einfügen der Linien auf.
Zweitens sollen die Ereignisse der Maus in verschiedenen Modi unterschiedlich behandelt
werden. Mit dem linken Mausklick auf ein Node im Normalmodus ist gemeint, dass die Metadaten des Nodes angezeigt werden sollen. Während es im Einfügemodus, wenn die
CheckBox „Add Route“ ausgewählt wird, bedeutet, dass das Node in ein neues Path eingefügt werden soll.
Drittens werden die von der rechten und linken Maustaste erzeugten Ereignisse unterschiedlich behandelt. Ein linker Mausklick auf ein Node im Normalmodus zeigt die Metadaten des
Nodes im RichTextBox1 und ToolTip, während beim rechten Mausklick ein KontextMenü
angezeigt wird.
60
Abb. 6.8: dynamische Modellierung des Ereignismanagers
Viertens sollen die Mausklicks an verschiedenen Positionen, wenn nötig, auch unterschiedlich behandelt werden. In VisMap enthält die PictureBox1 eine interaktive Bildschirmkarte. In
der Karte stehen alle anzuzeigenden Geoobjekte. Wenn diese mit der Karte interaktiv bearbeitet werden sollen, müssen auch die Positionen der Mausklicks berücksichtigt werden. Das
heißt, auf Ereignisse vom gleichen Steuerelement im gleichen Modus, die von der gleichen
Maustaste erzeugt werden, kann das Programm unterschiedlich reagieren, wenn die Positionen der Mausklicks nicht gleich sind. Zum Beispiel zeigt das Programm die Metadaten einer
61
Stadt, wenn man die linke Maustaste auf eine Stadt drückt, während das Programm beim
linken Mausklick auf eine Verkehrslinie deren Metadaten zeigt.
Um die oben genannte Situation anzupassen, müssen in den Methoden PictureBox1_MouseUp und PictureBox1_MouseDown die „If … Then“-Kontrollstrukturen eingebaut
werden. Nachdem das Programm das Mausklick-Signal erhalten hat, überprüft es zuerst, ob
es sich im Normalmodus oder Einfügemodus befindet. Wenn es im Normalmodus ist, überprüft es, ob die Zoom-Funktion aktiviert ist. Wenn sie nicht aktiviert ist, überprüft es, welche
Maustaste gedrückt ist. Wenn es im Einfügemodus ist, dann überprüft es welche Maustaste
gedrückt ist. Wenn es die linke Maustaste ist, dann wird die Art des Geoobjektes, das eingefügt werden soll, geprüft. Wenn die Zoom-Funktion aktiviert ist, dann überprüft das Programm
welche Maustaste gedrückt wird, wenn es die linke Maustaste ist, wird die Bildschirmkarte
vergrößert. Wenn es die rechte Maustaste ist, wird die Bildschirmkarte verkleinert, dessen
Zentralpunkt die Position des Mausklicks ist.
Die Auswahl des Geoobjektes basiert auf der Überprüfung seiner Epsilonumgebung. Bei jedem Mausklick erhält das Programm die Position des Mausklicks (e.X und e.Y), die in den
Methoden PictureBox1_MouseUp und PictureBox1_MouseDown benutzen werden kann. Das
Programm soll die Position des Mausklicks mit der geometrischen Lage aller vorhandenen
Geoobjekte vergleichen und feststellen, ob der Mausklick in der Epsilonumgebung eines oder
mehrer Geoobjekte stattfand. Für unterschiedliche Geoobjekte gibt es unterschiedliche Vergleichsmethoden. Für die Geoobjekte vom Typ „Node“ wird die Position des Mausklicks mit
dem Zentralpunkt des Nodes verglichen. Die Metrik, die hier benutzt wird, ist die euklidische.
Für die Geoobjekte vom Typ „Linienzug“ wird die Position des Mausklicks mit dem Verlauf der
Linien verglichen. Hier wird die Manhattan-Metrik benutzt. Für die Geoobjekte vom Typ „Vieleck“ wird das Theorem von Jordan benutzt [Bi99]. Ist die Anzahl der echten Schnittpunkte
eines beliebigen in Punkt X startenden Teststrahls mit Vieleckkanten ungerade, so liegt X
innerhalb des Vielecks, anderenfalls ist X ein Punkt außerhalb des Vielecks. Als echte
Schnittpunkte gelten nur solche Punkte, an denen sich die Geraden tatsächlich schneiden,
d.h. Schnitte in der Verlängerung der einen oder der anderen Geraden werden nicht mitgezählt. Der Teststrahl wird im Programm folgendermaßen festgelegt: Er geht von der Position
des Mausklicks aus und durch den Mittelpunkt der ersten Grenzelinie eines Vielecks. Es wird
überprüft, wie viele Grenzelinien, außer der ersten Grenzelinie, noch von diesem Strahl echt
geschnitten werden. Wenn die Anzahl ungerade ist, dann befindet sich der Mausklick innerhalb dieses Vielecks, anderenfalls ist er außerhalb dieses Vielecks.
6.4.2
Kommunikation mit der Datenbank
Wenn man die Datenbank mit dem GUI interaktiv bearbeiten möchte, muss zuerst eine Verbindung zu ihr hergestellt werden. Um diese Verbindung herzustellen, wird hier ADO .NET
(vgl. Kap. 3.2) benutzt. Mit der Klasse DBConnection.vb wird eine Verbindung zur angege-
62
benen Datenbank definiert, die später von mehreren Klassen und Methoden benutzt werden
kann. Weil hier die Microsoft Jet Database Engine als DBMS benutzt wird, wird Microsoft.JET.OLEDB.4.0 als Data-Provider verwendet. Die Datenbank hat ein Datenbankkennwort, um den Zugriff auf die Datenbank zu kontrollieren. Es muss in den ConnectionString
eingegeben werden:
Dim cnn1 As New System.Data.OleDb.OleDbConnection
cnn1.ConnectionString = & _
"provider=Microsoft.JET.OLEDB.4.0;" & _
"Data Source=" & appPath & _
";Jet OLEDB:Database Password=" & Passwd
Eine Verbindung reicht noch nicht, damit beide Seiten miteinander kommunizieren können.
Das Programm muss eine bestimmte Sprache verwenden, die Jet Database Engine versteht:
Jet SQL (vgl. Kap. 2.6). Dann kann sie richtig reagieren und die gewünschten Daten zurückschicken.
In VisMap soll für jedes Ereignis der Steuerelemente, das den Zustand der Daten in der Datenbank verändert, eine SQL-Anweisung erzeugt werden. Nach verschiedenen Anforderungen und Optionen erzeugt die Klasse sqlGenerator.vb unterschiedliche SQL-Anweisungen.
Das Programm schickt diese SQL-Anweisungen über die oben genannte Verbindung zur
Datenbank, und die Datenbank folgt der Anweisung, ändert den Datenzustand, und schickt
ggf. eine Antwort zurück.
Der OleDbAdapter (vgl. Kap. 3.2) erfasst die Antwort der Datenbank, konstruiert ein DataSet-Objekt und schickt es zurück zum Programm. MDieses DataSet-Objekt lässt sich lokal
lesen und bearbeiten. Zum Schluss werden die Änderungen in der Datenbank ermittelt.
Dim sqlstat as String = “SELECT * FROM city”
Dim dataAdapter1 As New System.Data.OleDb.OleDbDataAdapter( &_
sqlstat, cnn1)
Dim cityDataset1 As New System.Data.DataSet
dataAdapter1.Fill(cityDataset1, "city")
Werden nur die Befehle zur Datenbank geschickt und die Antwort der Datenbank soll nicht
bearbeitet werden, muss der OleDbAdapter nicht unbedingt benutzt werden. Für solche Situation wird eine Instanz von der Klasse OleDbCommand für eine bestimmte Datenbankverbindung definiert und ausgeführt, um die Daten in der Datenbank zu manipulieren:
Dim cmd As New OleDbCommand
cmd.Connection = cnn1
cmd.CommandText = "DELETE FROM icon WHERE id=" & _city.icon_id
cmd.ExecuteNonQuery()
63
Die Methode ExecuteNonQuery gibt keinen Datensatz, sondern einen Integer-Wert zurück.
Die Bedeutung des Wertes hängt vom Typ des Kommandos ab. Wenn eine DDL-Anweisung
ausgeführt wird, dann gibt die Methode -1 zurück, wenn die Operation erfolgreich beendet
wurde. Wenn eine Update-, Insert- oder Delete-Anweisung ausgeführt wird, dann gibt die
Methode die Anzahl der beeinflussten Zeilen zurück. In beiden Fällen gibt die Methode 0 zurück, wenn die Operation gescheitert ist.
Manchmal soll ein Kommando ausgeführt werden, das nur einen einzelnen Wert zurückgibt.
Zum Beispiel bei Verwendung von SQL-Anweisungen wie SUM oder COUNT, die eine Aggregatikonsfunktion haben, oder wenn man das Maximum einer Spalte bekommen möchte. In
dieser Situation kann die Methode ExecuteScalar verwendet werden. Diese Methode führt
eine SQL-Anweisung aus und gibt die erste Spalte der ersten Zeile zurück.
Dim maximum as Integer
Dim cmd As New OleDbCommand
cmd.Connection = cnn1
cmd.CommandText = "SELECT areaSegment.ID
FROM areaSegment" & _
" ORDER BY areaSegment.ID DES"
maximum = ToInt16(cmd.ExecuteScalar())
In VisMap werden die Informationen in verschiedenen Zuständen unterschiedlich präsentiert.
Im konzeptuellen Modell werden sie als Entity-Relationship-Typen dargestellt; in der Access-Datenbank sind sie durch Tabellen repräsentiert, bei der Antwort einer SQL-Anweisung
sind sie in DataSets gespeichert, und im VB-Programm werden sie als VB Klassen dargestellt.
Die Konvertierung von ER-Typen zu Tabellen wird durch Aufbau der Datenbank implementiert; die Konvertierung von Tabellen zu DataSets wird durch Microsoft Jet Database Engine
realisiert, das VB-Programm ist dafür zuständig, die DataSets zu VB-Klassen zu konvertieren.
Abb. 6.9: Konvertierung der Datenformate
Im Kapitel 5 wurde schon die Klassifizierung der Geoobjekte bereits diskutiert. Da VB .NET
eine objektorientierte Programmiersprache ist, ist es sehr sinnvoll, im Programm auch die
Klassen für unterschiedliche Geoobjekte zu definieren. Die Klassen im Programm sollen der
Klassifizierung der Geoobjekte im Kapitel 5 entsprechen, um den Datenaustausch zwischen
dem Programm und der Datenbank zu erleichtern.
Die Klassen myNodeClass, myPathClass und myAreaClass entsprechen Node, Path und
Area Set in der Datenbank. Die Eigenschaften der Klassen entsprechen auch den Attribute
von Node, Path und Area Set. Außerdem erbt die Klasse myNodeClass die Klasse my-
64
PointClass, die eine Erweiterung der von .NET vordefinierten Klassen für Punkt ist. Die
von .NET angebotenen Klassen für Punkt sind System.Drawing.Point und System.Drawing.PointF, die Werttypen für die Koordinaten sind Integer und Single. Die Koordinaten in der Klasse myPointClass sind hingegen vom Typ Double.
Abb. 6.10: Klassifizierung der Geoobjekte im VB Programm
Wie in der Modellierung des Datenbankentwurfs gibt es im Programm auch Subklassen für
jeweilige Oberklassen. Die Klasse myNodeClass wird von ihren Subklassen myCityClass und
myAirportClass geerbt. Die beiden Subklassen haben die Eigenschaften von myNodeClass
und ihre eigenen unterschiedlichen Eigenschaften. Die Klasse myPathClass wird von ihren
Subklassen ICE, IC, RB und Autobahn geerbt, und somit auch alle ihre Eigenschaften. Die
Klassen Country und State sind die Subklassen von myAreaClass, sie erben auch alle Eigenschaften von myAreaClass. Das DataSet, das als Antwort auf die SQL-Anweisung zurück
zum Programm geschickt wird, wird durch die mapCollection.vb zu den drei oben genannten
Klassen konvertiert.
Für jede Klasse existieren auch entsprechende Methoden, mit denen die Objekte dieser
Klasse bearbeitet werden können. Diese Methoden ermöglichen das Einfügen, Löschen und
Aktualisieren der Geoobjekte von unterschiedlichen Klassen. Sie werden durch den Mausklick auf den „Ok“ Button in unterschiedlichen Windows-Fenstern aufgerufen, und die unterschiedlichen Aktionen durchführen.
65
6.4.3
Pfadsuche
Das VisMap kann nicht nur die in der Datenbank existierende Dateien darstellen, sondern
besitzt auch die Funktionalität, die existierenden Informationen zu analysieren. Das Suchen
nach dem kürzesten Weg zwischen zwei beliebigen Nodes ist ein Beispiel dafür. Man kann in
VisMap sowohl nach allen Wegen, als auch nach dem kürzesten Weg zwischen zwei beliebigen Nodes suchen.
Das Suchen nach allen Wegen in VisMap ist durch einen rekursiven Algorithmus realisiert.
Am Anfang wird eine Adjazenzmatrix M aufgebaut. Wenn es n Knoten gibt, dann ist die Größe
der Adjazenzmatrix n x n. M(i,j) hat den Wert -1 wenn es keine direkte Verbindung zwischen
dem Knoten i und j gibt, ansonst ist M(i,j) gleich die Distanz zwischen den zwei Knoten. Zuerst
wird gesucht, welche Knoten mit dem Startknoten direkt verbunden sind. Dann wird der
Vorgang rekursive an diesen Knoten wiederholt, bis der Endknoten erreicht:
Private Sub findPaths(ByVal src As Integer, ByVal dest As Integer, & _
ByVal adjmatrix(,) As Double)
For i = 0 To adjmatrix.GetLength(0) - 1
If (adjmatrix(src, i) <> -1) Then
findPaths(i, dest, adjmatrix)
End If
End If
Next i
End Sub
Die Ergebnisse werden in der ListBox1 angezeigt, beim Mausklick auf die Ergebnisse wird
der ausgewählte Weg auf der Bildschirmkarte angezeigt. Dieser Algorithmus ist sehr ineffizient, denn beim Ansteigen der Knotenanzahl steigt Abrechnungsdauer exponentiell. Da das
Suchen aller Wege zwischen zwei Knoten nicht immer gewünscht ist, ist diese Suchoption
nicht die bevorzugte. Die bevorzugte Suchoption ist das Suchen nach dem kürzesten Weg
zwischen zwei vorgegebenen Knoten. Für die Berechnung des kürzesten Wegs wird in VisMap der Dijkstra-Algorithmus benutzt. Das Ergebnis wird nach der Berechnung auf der Bildschirmkarte angezeigt.
Der Dijkstra-Algorithmus wird oft benutzt, um die kürzesten Wege von einem Startknoten s zu
allen anderen Knoten in einem ungerichteten Distanzgraphen G zu berechen. Ein kürzester
Weg von einem Start- zu einem Zielknoten bedeutet hier, dass die Summe der Kantenlängen
vom Start- zum Zielknoten d[v] minimal ist. Ausgehend von s werden die kürzesten Wege für
die Knoten mit aufsteigendem Abstand nacheinander bestimmt. Zuerst wird aus den Knoten,
die mit s durch eine Kante verbunden sind, der Knoten v mit dem kürzesten Abstand zu s
ausgewählt. Aus den gewählten Knoten (hier s und v) werden die so genannten Randknoten
bestimmt. Dies sind Knoten zu denen es einen Weg nach s über die gewählten Knoten gibt.
66
Das heißt: Von einem Randknoten gibt es eine Kante zu einem gewählten Knoten. Durch
Neubestimmung der Randknoten ist es dann möglich, iterativ so fortzufahren, bis für jeden
Knoten ein kürzester Weg nach s gefunden wurde. (Vorausgesetzt es gibt für jeden Knoten
einen Weg zu s) Die Pseudocodes des Dijkstra-Algorithmus’ lauten wie gefolgt:
Dijkstra(G,w,s)
For each Vertex v ∈ V[G]
do d[v] ← ∞
π[v] ← NIL
d[s] ← 0
S ← Ø
Q ← V[G]
While Q ≠ Ø
do u ← Extract-Min(Q)
S ← S ∪ {u}
For each vertex v ∈ Adj[u]
Do Relax(u,v,w)
Relax(u,v,w)
If d[v] > d[u] + w(u,v)
Then d[v] ← d[u] + w(u,v)
π[v] ← u
In VisMap wird ein Sonderfall des Dijkstra-Algorithmus’ benutzt. Es werden nicht die Wege
von einem Startknoten zu allen anderen Knoten im Graph berechnet, sondern nur die Wege
zwischen einem Startknoten und einem Endknoten berechnet. Das heißt, der Algorithmus
wird abgebrochen, sobald der Endknoten durch Extract-Min(Q) aus Q entfernt wird. Die
Komplexität des Dijkstra-Algorithmus’ ist kleiner als O(|V|2).
6.5
Kartengenerator
Die Visualisierung der Geoobjekte spielt eine große Rolle in VisMap. Sie ist eine geometrische und topologische Abbildung der realen Welt auf einer Bildschirmkarte. Häufig werden
Strukturen und Zusammenhänge erst durch die graphische und kartographische Umsetzung
oder durch den visuellen Vergleich von Karten sichtbar. Die PictureBox von Form1 dient als
Container der abgebildeten Geoobjekte. Alle Geoobjekte in der Access-Datenbank können in
der PictureBox visualisiert und danach interaktiv durch Mausklick bzw. Abfrageformulare
behandelt werden. Um die Geoobjekte in der PictureBox darzustellen, wird der Kartengenerator entworfen.
Wie im letzten Abschnitt erklärt, erhält das Programm die Geoobjekte von ADO .NET in
Format DataSet. Sie werden dann durch mapCollection.vb zu VB-Klassen konvertiert und zu
67
mapGenerator.vb geschickt. Die mapGenerator.vb ruft convert.vb auf, um die geodätischen
Koordinaten der Geoobjekte in das Koordinatensystem der PictureBox zu konvertieren, und
lädt die visuelle Einstellung (z.B. das Symbol für Städte, die Stärke der Linien usw.) der
Geoobjekte, konstruiert ein Bitmap-Bild, und zeichnet das Bild in die PictureBox.
Das VisMap verwendet eine erweiterte Implementierung des Windows Graphics Design Interfaces (GDI), die so genannte GDI+, um die Bildschirmkarte zu erzeugen. Mit GDI+ lassen
sich Grafiken erstellen, Text zeichnen und grafische Bilder als Objekte bearbeiten. Mit GDI+
lassen sich grafische Bilder in Windows Forms und Steuerelementen rendern. Grafiken
können nur mit GDI+ programmgesteuert in Windows Forms-Anwendungen gerendert werden.
Um die Geoobjekte visuell darzustellen, muss zuvor jedem Objekttyp ein Symbol zugewiesen
werden. Für verschiedene Anwendungsgebiete und verschiedene Maßstäbe sollte je eine
unterschiedliche Symbolik entworfen werden. In dieser Diplomarbeit wird das Verkehrsnetz
von Deutschland als Beispiel benutzt, für die anderen Anwendungen gilt das gleiche Prinzip.
Wie im Kapitel Fünf geschrieben können alle Geoobjekte in einer 2D-Karte mit drei elementaren Komponenten dargestellt werden: Node, Path und Region Set. Da hier mit einer großmaßstäbigen Karte gearbeitet wird, können die Städte oder Flughäfen als Nodes, die
Verkehrsverbindungen als Path und die Bundesländer oder Seen als Region Set dargestellt
werden.
Die Form des Nodes ist abhängig vom Objekttyp und den quantitativen Eigenschaften der
Objekte. Das Node für den Flughafen ist ein kleines Flugzeug; das Node für eine Stadt mit
weniger als 200.000 Bewohnern ein durchsichtiger Kreis; eine Stadt mit 200.000 - 500.000
Bewohnern wird durch einen Kreis mit einem schwarzen Punkt in der Mitte dargestellt, ein
durchsichtiger Kreis mit einem kleineren schwarz ausgefüllten Kreis präsentiert eine Stadt mit
500.000 - 1.000.000 Bewohnern; Eine Stadt mit mehr als 1.000.000 Bewohnern wird mit einem rot ausgefüllten Quadrat dargestellt.
Da die Nodes keine einfachen geometrischen Formen sind, werden sie als Image-Dateien in
der Datenbank gespeichert. In Access lassen sich die Dateien nicht direkt speichern, sondern
nur mit Hilfe des Programms die ganze Datei als Stream einlesen und als OLE-Objekt in die
Datenbank speichern. Mit dem Menü „Options -> Mode of Display“ lassen sich die zugewiesenen Nodes der Geoobjekte ändern und die neue Art Nodes in die Datenbank einfügen. Mit
der Methode Graphics.DrawImage(image, x, y) werden die Images in die PictureBox gezeichnet. Wobei image das zu zeichnende Image-Objekt, x/y die X/Y-Koordinate der oberen
linken Ecke des gezeichneten Bildes ist.
Jeder Stadt wird eine Beschriftung zugewiesen. Sie ist das KFZ-Kennzeichen der Stadt und
wird mit der Methode Graphics.DrawString(s, font, brush, x, y) in die PictureBox gezeichnet.
Wobei s die zu zeichnende Zeichenfolge, font das Font-Objekt, das das Textformat der zeichenfolge definiert, brush das Brush-Objekt, das die Farbe und Struktur des gezeichneten
68
Textes bestimmt und x/y die X/Y-Koordinate der oberen linken Ecke des gezeichneten Textes
ist. Die Positionen der Beschriftungen für die Geoobjekte zu bestimmen ist ein sehr kompliziertes Problem. Hier werden sie einfach unter die Images gezeichnet. Abhängig von den
Größen der Images für die Städte verschiedener Größen ist die Distanz zwischen der Beschriftung und dem zentralen Punkt des Images unterschiedlich.
Dim townIcon As Image
Dim graphic As Graphics
graphic.DrawImage(townIcon, x, y)
graphic.DrawString(s, drawFont, drawBrush, x-2, y+6)
Die Paths präsentieren die Verkehrsverbindung der realen Welt. Sie bestehen aus Linien, die
Eigenschaften der Linien bestimmen die Eigenschaften der Paths. Die Verbindungen verschiedenen Typs werden durch unterschiedliche Linientypen dargestellt. Der Typ der Linie
wird durch folgende Elemente festgestellt: die Farbe der Linie, die Stärke der Linie und den
Linienstil. Die ICE-Verbindung wird zum Beispiel durch eine braune Linie mit dem Stil „Solid“ und der Stärke drei dargestellt. Die Parameter für Graphics.DrawLine werden in der Datenbank gespeichert, mit dem Menü „Options -> Mode of Display“ kann man die
Darstellungsform der Linien für verschiedene Verkehrsverbindungen anpassen. Mit der Methode Graphics.DrawLine(pen, x1, y1, x2, y2) werden unterschiedliche Linien auf den Bildschirm gezeichnet. Wobei pen das Pen-Objekt, das die Farbe, Breite und den Stil der Linie
bestimmt, x1/y1 die X/Y-Koordinate des ersten Punktes, x2/y2 die X/Y-Koordinate des zweiten Punktes ist.
Dim graphic As Graphics
graphic.DrawLine(myRoute(i).lineStyle, ToSingle(x1), &_
ToSingle(y1), ToSingle(x2), ToSingle(y2))
Das Attribut lineStyle gehört zur Klasse struMap.myRouteClass, es ist vom Typ System.Drawing.Pen. In der Klasse mapCollection.vb werden die Darstellungsformen der verschiedenen Geoobjekte aus der Datenbank gelesen, und dann werden verschiedene
Instanzen von System.Drawing.Pen für unterschiedliche Subklassen von Path definiert:
Dim m_Pen As Pen
m_Pen = New Pen(Color.FromName(row("color").ToString))
m_Pen.Width = ToInt16(row("stark"))
m_Pen.DashStyle = CType(row("style"), DashStyle)
Die Darstellung des Region-Sets ist ähnlich wie die der Paths. Ein Region-Set besteht aus
Regionen, und die Region ist begrenzt durch einen abgeschlossenen Path. Die Region lässt
sich mit der Methode Graphics.DrawPath(pen, path) und GraphicsPath.CloseFigure() auf den
Bildschirm zeichnen. Wobei pen das Pen-Objekt, das die Farbe, Breite und den Stil des
Pfades bestimmt, path das zu zeichnende GraphicsPath-Objekt ist. Die Methode
69
GraphicsPath.CloseFigure() schließt die aktuelle Figur und beginnt eine neue. Wenn die aktuelle Figur eine Abfolge verbundener Linien und Kurven enthält, schließt die Methode die
Schleife, indem End- und Anfangspunkt durch eine Linie verbunden werden. Mit der Methode
Graphics.FillPath(brush, path) kann das Innere der Region mit einer Farbe ausgefüllt werden.
Wobei brush das Brush-Objket, das die Merkmale des Füllvorgangs bestimmt und path das
GraphicsPath-Objekt, das den zu füllenden Pfad darstellt, ist. Das heißt, für das Region-Set
kann mindestens ein weiterer Parameter „Farbe“ in der Datenbank gespeichert werden. Wie
beim Zeichnen der Paths werden m_Pen und m_Brush in der Klasse mapCollection.vb definiert:
Dim myPath As New GraphicsPath
myPath.AddLines(myPoint)
myPath.CloseFigure()
graphic.DrawPath(m_Pen, myPath)
graphic.FillPath(m_Brush, myPath)
70
7.
Zusammenfassung und Ausblick
Das Ziel dieser Diplomarbeit war eine Implementierung der interaktiven Manipulation raumbezogener Datenbanken über eine 2D-Bildschirmkarte, um die in den zwei Vorgängerarbeiten entwickelten Systeme zu verbessern. Dieses Ziel ist mit dem VisMap-System erreicht. In
VisMap sind die Geoobjekte in einer Access-Datenbank gespeichert. Sie können mit dem
VB-Programm gelesen und in einer Bildschirmkarte dargestellt werden. Eine Menge grundsätzlicher Funktionen, mit denen die Geoobjekte bearbeitet werden können, sind auch in
VisMap implementiert. Der Benutzer kann zum Beispiel alle in der Bildschirmkarte dargestellten Geoobjekte löschen und aktualisieren und neue Geoobjekte in die Datenbank einfügen. Eine Pfadsuche zwischen zwei beliebigen Knoten ist ebenfalls möglich. Außerdem bietet
VisMap im Vergleich mit den vorangegangenen Diplomarbeiten eine technische, konzeptuelle
und funktionale Verbesserung.
Mit der technischen Verbesserung ist die Benutzung der Microsoft Visual Basic .NET und
ADO .NET gemeint. Mit der objektorientierten Programmiersprache kann das Programm
später leicht verbessert und erweitert werden. Mit ADO .NET ist die Verbindung mit der Datenbank nicht permanent. Das Programm ist, nur wenn es notwendig ist, mit der Datenbank
verbunden. Damit ist die Leistung der Datenbank drastisch erhöht.
Die primitive Modellierung der Geoobjekte in den Vorgängerarbeiten wurde durch ein
Drei-Schichten-Modell ersetzt. Eine klare Trennung zwischen den Geoobjekten in der realen
Welt, im konzeptuellen Modell und im Präsentationsmodell erleichtert die Erweiterung und
Umwandlung des zukünftigen Entwurfes.
Das VisMap-System bietet auch eine funktionale Verbesserung. Die Darstellungsformen der
Geoobjekte sind nicht mehr vom VB-Programm abhängig, sie werden in der Datenbank gespeichert, und sind durch GUI veränderbar. Außerdem kann der Benutzer nicht nur die in der
Datenbank existierenden Geoobjekte manipulieren, sondern auch durch Analysieren der existierenden Geoobjekte neue Informationen gewinnen. Ein Versuch dafür ist das Suchen
nach den Wegen zwischen zwei beliebigen Knoten.
Wegen der eingeschränkten Funktionalitäten der Microsoft Jet Database Engine müssen
anwendungsabhängige Codeteile im VB-Programm bereitgestellt werden, um komplexe Anfragen zu realisieren. Ein Versuch, das VB-Programm noch unabhängiger von den Anwendungsgebieten zu machen, ist deswegen nur teilweiser erfolgreich. Eine Erweiterung ist nur
möglich, wenn ein anderes DBMS mit der Unterstützung komplexerer Abfragenmöglichkeiten,
gespeicherter Prozeduren und von Triggern verwendet wird.
In der Zukunft kann das VisMap-System in zwei Richtungen weiterentwickelt werden. In
Richtung Datenbankentwicklung können zum Beispiel durch die Benutzung eines leistungsstärkeren DBMS wie zum Beispiel Oracle oder Microsoft SQL Server die gespeicherten Pro71
zeduren und Trigger verwendet werden. Dadurch kann nicht nur das VB-Programm noch
unabhängiger von den Anwendungsgebieten sein, sondern die häufig benutzten Berechnungen müssen auch nicht on Demand aufgerufen werden, ihre Ergebnisse werden statisch
in der Datenbank gespeichert und nur beim Einfügen, Löschen oder Aktualisieren der Geoobjekte aktualisiert. In Richtung Softwareentwicklung können noch mehr Funktionen implementiert werden. Zuerst soll eine Kartenprojektion wie zum Beispiel Gauß-Krüger-Projektion
implementiert werden. Es ist auch sinnvoll, die komplexen Operationen wie zum Beispiel
Zerlegung und Vereinigung der Linien und Vielecke zu realisieren. Um den Datenaustausch
zwischen VisMap und anderen Geo-Informationssysteme zu ermöglichen, ist eine Konvertierungsfunktion auch wünschenswert.
72
Literaturverzeichnis
[Av00]
Averdung, Christoph: GIS im Kontext der Steuerung von Geschäftsprozessen, Dissertation, Institut für Kartographie und Geoinformation der Universität Bonn, 2000
[AsJa04]
Asche, Hartmut/Schwarz, Jan-Arne: Geoinformationssysteme, Vorlesungsskript, Institut für Geographie der Universität Potsdam, 2004
[Bark02]
Barker, F. Scott: Database Programming with Visual Basic® .NET and
ADO .NET, Sams Publishing, 2002
[Bart00]
Bartelme, Norbert: Geoinformatik, Springer, Berlin 2000
[Bi99]
Bill, Ralf: Grundlagen der Geo-Informationssysteme, Herbert Wichmann
Verlag, 1999
[BiZe01]
Bill, Ralf/Zehner, Marco: Lexikon der Geoinformatik, Herbert Wichmann
Verlag, 2001
[BuSn95]
Bugayevskiy, Lev M./Snyder, John P.: Map Projections, Taylor & Francis,
1995
[Dob03]
Dobson, Rick: Programming Microsoft Visual Basic .NET for Microsoft Access Databases, Microsoft Press, 2003
[Ha04]
Hadziresic, Ernest: Interaktive 2D-Bildschirmkarten mit Datenbankanbindung, Diplomarbeit, Institut für Informatik III der Universität Bonn, 2004
[GrWe02]
Groff, James R. /Weinberg, Paul N.: SQL: The Complete Reference, Second
Edition, Osborne/McGraw-Hill, 2002
[GIS99]
Das GIS-Tutorial 3.0 (http://www.gis-tutor.de)
[Gle01]
Glemser: Zur Berücksichtigung der geometrischen Objektunsicherheit in der
Geoinformatik, Dissertation, Fakultät Bauingenieur- und Vermessungswesen der Universität Stuttgart, 2001
[Geo03]
Geographic Information Technology Training Alliance (http://www.gitta.info)
73
[Gr02]
Green, Robert: Leitfaden Datenbankauswahl, (http://portal.dfpug.de/dfpug/
Dokumente/Online/Leitfaden%20Datenbankauswahl.doc)
[HaGrMe02]
Hake, Günter/Grünreich, Dietmar/Meng, Liqiu: Kartographie, Gruyter, 2002
[KeEi01]
Kemper, Alfons/Eickler, Andre: Datenbanksysteme, Oldenbourg, 2001
[Ku03]
Kunicke, Lutz: Entwurf und Implementierung eines Werkzeugs zur Visualisierung und interaktiven Manipulation von Geodaten, Diplomarbeit, Institut
für Informatik III der Universität Bonn, 2003
[La02]
Lange, Norbert: Geoinformatik in Theorie und Praxis, Springer, Berlin 2002
[Li94]
Litwin, Paul: Microsoft Jet Database Engine 2.0: A User’s Overview,
(http://support.microsoft.com/default.aspx?scid=kb;en-us;128386)
[Lib03]
Liberty, Jesse: Programming Visual Basic .NET, O’Reilly & Associates, 2003
[Man03]
Manthey, Rainer: Informationssysteme, Vorlesungsskript, Institut für Informatik III der Universität Bonn, 2003
[MSDNLib]
MSDN for Visual Studio .NET, (http://msdn.microsoft.com/)
[Op05]
OpenGeoDB: (http://opengeodb.sourceforge.net/)
[SaBe97]
Saurer, Helmut/Behr, Franz-Josef: Geographische Informationssysteme,
Wissenschaftliche Buchgesellschaft, 1997
[Sta01]
Stark, Benjamin: Vektorisierung von raum- und zeitbezogenen Daten zur
Visualisierung mit Macromedia Flash, Diplomarbeit, Fakultät Mathematik/Informatik der Universität Osnabrück, 2001
[Ste98]
Stephans: SQL in 21 Tagen, Markt+Technik, 1998
[Vo99]:
Vossen, Gottfried: Datenmodelle, Datenbanksprachen und DatenbankManagement-Systeme, Oldenbourg, 1999
[Wa96]:
Walter, Volker: Zuordnung von raumbezogenen Daten, Dissertation, Institut
für Photogrammetrie der Universität Stuttgart, 1996
74
Danksagung
Ich möchte mich ganz herzlich bei meinem Betreuer Professor Rainer Manthey für sein außergewöhnliches Engagement und für sein stets offenes Ohr für meine Fragen während der
Entstehung dieser Arbeit bedanken. Einen ganz besonderen Dank möchte ich meinen Eltern
für die Ermöglichung meines Studiums und für ihre Unterstützung in jeder Situation aussprechen.
75
Herunterladen