37
Realisierung eines numerisch robusten Data Cartridge f¨ ur r¨ aumliche Daten f¨ ur Oracle 9i auf Basis der ROSE-Algebra Studienarbeit von Nora Ripperda Betreut von Prof. Dr. Udo Lipeck Dipl. Math. Carsten Kleiner 11. November 2002

Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

  • Upload
    vutram

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Realisierung eines numerisch robusten Data

Cartridge fur raumliche Daten fur Oracle 9i auf

Basis der ROSE-Algebra

Studienarbeit vonNora RipperdaBetreut von

Prof. Dr. Udo LipeckDipl. Math. Carsten Kleiner

11. November 2002

Page 2: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Inhaltsverzeichnis

1 Einleitung 3

2 Raumlichen Datentypen 5

2.1 Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Realm-basierte Modellierung raumlicher Daten 6

3.1 Robuste geometrische Primitive . . . . . . . . . . . . . . . . . . . 73.2 ROSE Algebra Operationen . . . . . . . . . . . . . . . . . . . . . 83.3 Einfugen in den Realm . . . . . . . . . . . . . . . . . . . . . . . . 93.4 Dual Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4 Einfugen der Daten in die Datenbank im Dual-Grid-Format 12

4.1 Das Dual-Grid-Datenbankformat . . . . . . . . . . . . . . . . . . 124.2 Die Hilfsklasse BigFraction . . . . . . . . . . . . . . . . . . . . . . 144.3 Die raumlichen Objekte . . . . . . . . . . . . . . . . . . . . . . . 144.4 Transformation in die Dual-Grid-Darstellung . . . . . . . . . . . . 154.5 Ein Beispiel zum Einfugen in das Dual Grid . . . . . . . . . . . . 18

5 Raumliche Operationen 23

5.1 Schnitt von Segmenten . . . . . . . . . . . . . . . . . . . . . . . . 245.2 Punkte auf Lines-Objekten . . . . . . . . . . . . . . . . . . . . . . 255.3 Gemeinsame Segmente . . . . . . . . . . . . . . . . . . . . . . . . 26

6 Tests: Vergleich mit Oracle Spatial 28

6.1 Test1: Intersection . . . . . . . . . . . . . . . . . . . . . . . . . . 286.2 Test2: On . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296.3 Hannover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

7 Ausblick 31

1

Page 3: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

8 Anhang zur Studienarbeit 33

8.1 Anderungen am Programm . . . . . . . . . . . . . . . . . . . . . . 338.1.1 Anderung des Programmablaufs . . . . . . . . . . . . . . . 338.1.2 Redundante Speicherung von Oracle Spatial Daten . . . . 34

8.2 Grosse der Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . 358.3 Testanfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

8.3.1 Punkte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358.3.2 Gemeinsame Segmente . . . . . . . . . . . . . . . . . . . . 368.3.3 Schnittpunkte . . . . . . . . . . . . . . . . . . . . . . . . . 36

8.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2

Page 4: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Kapitel 1

Einleitung

Diese Studienarbeit beschaftigt sich mit einem neuen Ansatz zur Implementie-rung raumlicher Datenbanken. Sie bezieht sich auf die Arbeit ’Dual Grid: A NewApproach for Robust Spatial Algebra Implemantation’ von Jose Antonio CoteloLema und Ralf Hartmut Guting von der Fernuniversitat Hagen [LG00].

Es handelt sich um einen neuen Ansatz, raumliche Daten so zu speichern,dass geometrische Operationen numerisch robust implementiert werden konnen.D.h. das bei geometrischen Operationen keine Rundungsfehler auftreten konnen.Und deshalb keine topologischen Inkonsistenzen auftreten.

Dieses Verfahren baut auf dem Realm-basierten Ansatz zur Implementierungraumlicher Datenbanken auf[Sch97]. Hier wird ein Gitter als Grundmenge furalle raumlichen Objekte hergenommen. Auf diesem Gitter wird eine Ganzzahl-Arithmetik definiert. Und jeder Schnittpunkt zweier Geraden wird wieder aufeinen Gitterpunkt geschoben.

Der Dual-Grid-Ansatz arbeitet mit einer Bruch-Arithmetik und stellt gewisseForderungen an die Koordinaten der Punkte und die Steigung der Geraden. Somitstellt man sicher, dass alle Schnittpunkte wieder auf dem Gitter liegen.

Raumliche Datenbanken stellen eine Alternative zu Geoinformationssystemendar. So werden sie z.B. zum Speichern von geografischen Daten gebraucht. Eskonnen verschiedenen Informationen wie physische oder politische Daten gepei-chert werden. Daraus konnen dann mittels Verschneidungen genaue Informatio-nen uber einen Ort gewonnen werden.

Bei raumlichen Datenbanken gibt es oft Anfragen, die z.B. nach Schnitten vonLinien fragen. Hier tritt dann schnell das Problem der Rechenungenauigkeit derRechner auf. Aufgrund von Rundungsfehlern konnen in Anfrageergebnissen In-konsistenzen auftreten. Es kann also passieren, dass der Schnittpunkt der StreckenS1 und S2 nicht auf S1 oder S2 liegt. Um diesem Problem aus dem Weg zu gehen,arbeitet der Dual-Grid-Anzatz mit großen Bruchzahlen.

In dieser Arbeit soll zuerst einmal die praktische Machbarkeit dieses neu-en Ansatzes getestet werden. Folgende Fragen sollen geklart werden: Stellen dieAnforderungen an Koordinaten und an die Steigung der Geraden eine große Ein-

3

Page 5: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

schrankung dar, gibt es Elemente, die sich nicht darstellen lassen? Ist es moglich,mit der Arithmetik fur große Bruche in angemessener Zeit zu rechnen?

Bei den verwendeten Daten handelt es sich um die ATKIS-Daten der StadtHannover.

In dieser Arbeit wird zunachst der Verwendungszweck raumlicher Daten kurzerlautert. Im dritten Kapitel wird dann die Realm-basierte Methode der Spei-cherung von raumlichen Daten erklart. Diese wird dann zur Dual-Grid-Methodeabgewandelt.

Das vierte Kapitel beschreibt den Aufbau des Datenbankformats. Im zwei-ten Teil ist die Vorgehensweise der Umwandlung der Originaldaten in das Dual-Grid-Format beschrieben. Anhand eines Beispiels wird das Verfahren noch einmaldeutlich gemacht.

Im funften Kapitel wird gezeigt, wie sich eineige raumliche Operatoren aufdem Dual Grid implementieren lassen. Die Laufzeiten dieser Operationen undder Umwandlung wird im sechsten Kapitel beschrieben.

Im letzten Kapitel wird ein Ausblick auf mogliche Erweiterungen und Verbes-serungen des Programms gegeben.

4

Page 6: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Kapitel 2

Raumlichen Datentypen

Mit raumliche Daten sind in diesem Fall zweidimensionale Daten gemeint, wieman sie z.B. auf Karten findet. Außerdem werden hier erst einmal nur Punkteund Strecken behandelt. Das Programm kann aber auf Flachen erweitert werden,da diese im Dual-Grid-Ansatz vorgesehen sind.

2.1 Points

Um auf einer Karte Stadte oder bei großerem Maßstab offentliche Gebaude oderStraßenlaternen darzustellen, wird eine Datentyp benotigt, der Punkte darstellt.Der hier verwendete Datentyp Points kann einen oder mehrere Punkte darstellen.Es kann also sowohl das Rathaus einer Stadt dargestellt werden, als auch einObjekt, das alle Straßenlaternen zusammenfaßt. Da in Points auch noch eineZusatzinformation gespeichert werden kann, besteht sogar die Moglichkeit, dieStraßenlaternen, die nachts ausgehen von denen die weiter leuchten zu trennenund diese Information zusatzlich zu speichern.

2.2 Lines

Neben den Objekten, die sich als Punkt darstellen lassen gibt es auch Straßen,Flusse oder Bahnschienen, die durch Linien oder Linienzuge dargestellt werdenkonnen. Abhangig von der Form des Objektes kann eine gerade Linie, ein zusam-menhangender Linienzug oder aber auch nicht zusammenhangende Linienzugegewahlt werden. D.h. es bestehen wieder die Moglichkeiten, ein einzelnes StuckStraße als Objekt darzustellen oder aber alle Gewasser eines Gebietes zusammen-zufassen.

5

Page 7: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Kapitel 3

Realm-basierte Modellierung

raumlicher Daten

Ein Ansatz, raumliche Daten zu modellieren, stellen Realms dar [Sch97]. Dabeiwerden raumliche Objekte auf einem Gitter dargestellt. Jeder Schnittpunkt zweierGeraden wird auf einen Gitterpunkt gezogen und die Gerade erhalt einen Knickan dieser Stelle. So ist sichergestellt, dass der Schnittpunkt auf der Geraden liegt.

Der Datenraum wird als N × N - Gitter dargestellt, wobeiN = {0, 1, ..., n − 1} ⊆ N ist. Die raumlichen Objekte sind Punkte ausPN := N × N und Segmente aus SN := PN × PN . Jeder Punkt und die Endender Segmente liegen also auf dem Gitter.

Abbildung 3.1: Segment und Punkte auf dem Realm

Realm basierte Datentypen werden in funf Schichten implementiert:

1. Ganzzahl-Arithmetik

2. robuste geometrische Primitive

6

Page 8: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

3. Realms, realm-basierte Primitive und Strukturen

4. raumliche Datentypen und raumliche Algebra Primitive

5. ROSE (RObust Spatial Extension) Algebra Operationen

Vereinfachend kann man auch die Schichten drei, vier und funf zu einer Schichtzusammenfassen. Das soll hier passieren. Es werden nur die Schichten eins, zweiund eine erweiterte funfte genauer betrachtet.

Die erste Schicht bildet eine Ganzzahl-Arithmetik fur Zahlen aus dem Intervall[−2n3, 2n3]. Hier sind neben den Grundrechenarten der Modulo-Operator undVergleichsoperatoren definiert.

3.1 Robuste geometrische Primitive

Die zweite Schicht ist die der robusten geometrischen Primitive. Es gibt Objektevon den Typen Punkt und Segment.

Auf den Punkten und Segmenten lassen sich folgende Operationen definieren:

• equal: Zwei Segmente heißen gleich, wenn sie in beiden Endpunkten uber-einstimmen.

• meet: Die zwei Segmente haben genau einen gemeinsamen Endpunkt.

• overlap: Zwei Segmente sind kollinear und haben ein gemeinsames Stuck.

• aligned: Zwei Segmente sind kollinear, haben aber keinen gemeinsamen Ab-schnitt.

• parallel: Zwei Segmente haben die gleiche Steigung.

• on: Ein Punkt liegt auf einem Endpunkt eines Segmentes.

• in: Ein Punkt liegt auf dem Segment, aber nicht auf den Endpunkten.

• touches: Ein Endpunkt des ersten Segments liegt auf dem zweiten Segment;die Segmente sind nicht kollinear (sonst overlap).

• touch: Dies ist erfullt, wenn Segment 1 touches Segment 2 oder Segment 2touches Segment 1.

• intersect: Zwei Segmente haben einen gemeinsamen Punkt, aber meet undtouch sind nicht erfullt.

• disjoint: Fur zwei Segmente gilt weder equal, meet, overlap, touch nochintersect.

7

Page 9: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

• intersection: Berechnet den Schnittpunkt zweier Segmente und rundet dasErgebnis auf den nachsten Punkt.

In der dritten und vierten Schicht werden die raumlichen Datentypen points,lines und regions erst auf Realms basierend und dann allgemein definiert.

3.2 ROSE Algebra Operationen

In der funften Schicht werden auf den Datentypen points, lines und regions

ROSE Algebra Operationen definiert. Es gibt vier Arten von Operationen:

1. Raumliche Pradikate, die die topologischen Beziehungen zwischen den Ob-jekten beschreiben:

• =

• 6=• inside

• edge inside

• vertex inside

• area disjoint

• edge disjoint

• disjoint: Pruft, ob zwei Objekte disjunkt sind.

• intersects: Pruft, ob zwei Segmente sich schneiden.

• meets

• adjacent

• encloses: Ist true, wenn Regions-Objekt 1 innerhalb eines Lochs vonRegions-Objekt 2 liegt.

• on border of: Pruft, ob alle Punkte eines Point-Objekts auf einem Regions-Objekt liegen.

• border in common: Ist true, wenn zwei Objekte mindestens ein gemein-sames Randsegment besitzen.

2. Raumliche Operationen, deren Ergebnisse wieder raumliche Datentypensind:

• intersection: Liefert den Schnitt zweier Objekte.

• plus: Bildet die Vereinigung von zwei Objekten.

• minus: Liefert das erste Objekt ohne die Elemente des zweiten.

8

Page 10: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

• common border: Erzeugt ein neues Objekt, welches aus den gemeinsa-men Randelementen der ubergebenen Objekte besteht.

• vertices

• contour: Liefert ein Lines-Objekt, das aus den außeren Segmenten desRegions-Objekts besteht.

• interior

3. Raumliche Operatoren, die Zahlen zuruckgeben

• dist

• diameter: Liefert den großten Abstand zwischen zwei Punkten einesRegions-Objekts.

• length: Berechnet die Lange eines Lines-Objekts.

• area: Berechnet die Flache eines Regions-Objekts.

• perimeter: Berechnet den Umfang eines Regions-Objekts.

4. Raumliche Operatoren auf Mengen von raumlichen Objekten

• sum

• closest: Liefert die Objekte die am dichtesten an diesem Objekt liegen.

• decompose

• overlay

• fusion

Hier sind noch einige Laufzeiten der Operationen angegeben. Hierbei steht nfur die Große der Eingabe und k fur die Große des Ergebnisses.

• O(n): =, 6=, disjoint bei Points und Lines, intersects und meets bei Lines,on border of und border in common.

• O(n·log n): disjoint, intersects, plus, minus und inside bei Regions, edge inside,vertex inside, area disjoint und edge disjoint.

• O(n + k · log k): intersection, plus und minus bei Points und Lines, com-

mon border und vertices.

3.3 Einfugen in den Realm

Beim Einfugen von Segmenten in den Realm kann es allerdings zu Problemenkommen. Schneiden sich zwei Segmente, so ist es moglich, dass der Schnittpunktnicht auf einem Gitterpunkt liegt. Dieser Punkt ist also im Realm-Modell nicht

9

Page 11: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

darstellbar. Um dennoch eine Darstellung der zwei Segmente zu erhalten, wer-den die Segmente jeweils in zwei Stucke zerteilt. Diese haben nicht die Form derursprunglichen Segmente sondern fuhren vom Anfangspunkt zum Schnittpunktund von dort zum Endpunkt. Diese Veranderung der Segmente wird Redrawinggenannt. Beim Redrawing werden Segmente zertrennt und erhalten Ecken, die sie

Abbildung 3.2: Schnitt zweier Segmente vor und nach dem Redrawing

ursprunglich nicht hatten. Dies kann zu topologischen Inkonsistenzen fuhren. Soliegen z.B. Punkte, die vorher nicht auf dem Segment lagen nach dem Redrawingauf dem Segment. Oder ein Punkt, der vor dem Redrawing unterhalb des Seg-ments lag, liegt jetzt oberhalb. Diese Problematik kann durch spezielle Verfahren

vor dem Redrawing

nach dem Redrawing

Abbildung 3.3: Punkte und Segmente beim Redrawing

behoben werden. Dabei wird eine Hulle um das Segment gelegt. Beim Redrawing

10

Page 12: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

werden Regeln befolgt, die gewahrleisten, dass das Segment diese Hulle nichtverlasst.

Diesen Aufwand umgeht der Dual-Grid-Ansatz. Er stellt einschrankende For-derungen an die Punkte und Segmente und stellt dadurch sicher, dass ein Redra-wing nicht notig wird.

3.4 Dual Grid

Im Dual Grid sollen Punkte und Segmente dargestellt werden. Komplexere Geo-metrien konnen spater aus diesen zusammengesetzt werden. Es wird ein Werte-bereich fur die Punkte und einer fur die Segmente definiert. Das Paar aus beidenist dann das Dual Grid. Dies ist abhangig von zwei Parametern n und m.

Der Wertebereich fur die Punkte Gp ist ein Paar aus zwei Bruchzahlen. Seg-mente aus Gs werden durch ihren Anfangs- und Endpunkt dargestellt. Diesebeiden Punkte sind aus Gp.

Damit sichergestellt ist, dass kein Redrawing benoting wird, werden folgendeAnforderungen an Gp und Gs gestellt. Sie werden folgendermaßen definiert.

Gp(n, m) := {(x, y) | x, y ∈ Coord(n, m)},

wobeiCoord(n, m) := {x ∈ Q | x =

num

den, num, den ∈ Z,

| num |< 2n, 0 < den < 2m} fur n, m ∈ N

Gs(n, m) ist defniniert als die Menge aller Segmente S = (Pa, Pb) mit Pa, Pb ∈Gp(n, m), so dass es eine Darstellung der Geraden durch Pa und Pb von folgenderForm gibt:

A · x + B · y = C mit A, B, C ∈ Z

und | A |, | B |<√

2m−1 und | C |< 2n−1

√2m−1

.

Dies stellt sicher, dass jeder nichtleere Schnitt zweier Geraden aus Gs wieder eineGerade aus Gs oder ein Punkt aus Gp ist (Beweis siehe J.A. Cotelo Lema, R.H.Guting, Dual Grid: A New Approach for Robust Spatial Algebra Implemantati-on). Die Anforderungen stellen auch keine echte Einschrankung dar. Lassen sichObjekte nicht einfugen, so kann man die Parameter n und m erhohen. In diesemFall mussen allerdings alle Objekte neu eingefugt werden.

11

Page 13: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Kapitel 4

Einfugen der Daten in die

Datenbank im Dual-Grid-Format

Das Programm liest Daten aus einer raumlichen Datenbank Daten aus. Es han-delt sich hierbei um Punkte, Linien und Flachen, die aber alle im DatentypMDSYS.SDO Geometry abgelegt sind. Zusatzlich besitzt jedes Objekt eine Ob-jektnummer. Alle Objekte mit derselben Objektnummer werden einem Objektim Dual Grid zugeordnet.

Aus den MDSYS.SDO Geometry Daten werden der Typ und die Koordina-ten des Objekts ermittelt und in die Dual-Grid-Tabellen geschrieben. Dazu mussallerdings vorher auf Schnitte mit anderen Segmenten gepruft werden. Gegebe-nenfalls werden die raumlichen Daten angepasst. Fur alle Berechnungen wird eineArithmetik fur Bruchzahlen benotigt.

4.1 Das Dual-Grid-Datenbankformat

Zur Darstellung der raumlichen Objekte werden Oracle-Datentypen definiert[HP98]. In diesem Datenmodell gibt es die Datentypen Punkt, Segment, Pointsund Lines. Ein Punkt besteht aus vier Werten. Fur die x- und die y-Koordinatewerden jeweils Zahler und Nenner gespeichert. Ein Segment wird durch die Idsder beiden Punkte dargestellt. Die Objekte Points und Lines besteht aus einerId und dem Namen des Objekts. Sie stellen eine nicht notwedigerweise zusam-menhangende Menge von Punkten bzw. Segmenten dar.

12

Page 14: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

segmentType punktType pointsType linesType

name namexDen

yNum

yDen

ididpunkt1 number(5)

punkt2 number(5)

xNum number

number

number

number

number(5)

varchar2(20) varchar2(20)

number(5)

Abbildung 4.1: Oracle-Datentypen

Raumliche Daten basieren auf Punkten. Diese werden in der Tabelle Punk-te mit den Attributen id und pkt (als punktTyp) gespeichert. Eine Menge vonPunkten wird durch die Relation ’gehort zu’ einem Tupel aus der Tabelle Pointszugeordnet.

Die Linien werden in der Tabelle Segmente gespeichert. Es gibt die Attributeid und segm (als segmentTyp). Im segmentTyp stehen zwei Punkt-Ids. In derTabelle Lines gibt es das Attribut lns (als linesTyp). Dies wird durch die Relation’besteht aus’ einer Menge von Segmenten zugeordnet.

Die Relationen ’gehort zu’ und ’besteht aus’ werden in den Tabellen pointListund segmList realisiert.

id number(5)

Punktegehört

zu Points

pts pointsTypepkt punktType

Segmente

id number(5) segm segmentType

Lines

lns linesType

besteht aus

0..11..*

1..* 1

Abbildung 4.2: ER-Diagramm

13

Page 15: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Es gibt also die sechs Tabellen:

• Punkte(id number, pkt punktType)

• Points(pts pointsType)

• PointList(punktId number, pointsId number)

• Segmente(id number, segm segmentType)

• Lines(lns linesType)

• SegmList(segmId number, linesId number)

4.2 Die Hilfsklasse BigFraction

Der Dual-Grid-Ansatz fordert das Rechnen mit Bruchen, deren Zahler und Nen-ner sehr große Integerzahlen sind. Die Klasse BigFraction stellt eine solche Zahldar. Zahler und Nenner sind Instanzen der Klasse java.math.BigInteger, die ei-ne beliebig große ganze Zahl darstellt. BigFraction stellt neben den get- undset-Methoden die vier Grundrechenarten sowie negieren, kurzen, eine Betrags-funktion und eine Vergleichsmethode zur Verfugung.

4.3 Die raumlichen Objekte

Zu jedem der oben beschriebenen Oracle-Datentypen gibt es eine entsprechen-de Java-Klasse. Diese tragt den selben Namen wie der entsprechende Oracle-Datentyp. Die so erzeugten Klassen enthalten dieselben Daten, wie der Oracle-Datentyp und bieten die dazugehorenden get- und set-Methoden. Falls im Oracle-Datentyp Member-Funktionen existieren, werden auch diese an die Java-Klasseweitergegeben. Von diesen Klassen werden dann folgende Klassen abgeleitet, dieerweiterte Funktionen besitzen.

PunktExt

Von der Klasse Punkttype wird die Klasse PunktExt abgeleitet. Sie wird um fol-gende Methoden erweitert: Die statische Methode sort(PunktExt a, PunktExt b)sortiert zwei Punkte nach (x,y)-Sortierung und gibt sie geordnet in einem Vectorzuruck. Die Methoden equals(PunktExt a) und lowerThan(PunktExt a) bieten dieMoglichkeit zum Vergleich zweier Objekte. Die Methode onSegment(BigFractionx1, BigFraction y1, BigFraction x2, BigFraction y2) pruft, ob der Punkt auf demdurch Koordinaten ubergebenen Segment liegt.

Die Klasse PunktExt bietet als einzige die Moglichkeit, eine Instanz von ihrzu erzeugen, ohne dass dieses Objekt in der Datenbank existieren muss. Dies ist

14

Page 16: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

z.B. beim Einfugen in die Datenbank wichtig. Hier wird getestet, ob der Punktauf schon vorhandenen Segmenten liegt. Diese mussen dann unterteilt werden.

SegmentExt

SegmentExt wird von der Klasse Segmenttype abgeleitet. Weiter stellt sie eineMethode zur Verfugung, die Anfangs- und Endpunkt zuruckgibt. Zur Schnitt-punktberechnung gibt es die Methode testAlign(SegmentExt), die uberpruft, obdas Segment mit dem ubergebenen auf einer Gerade liegt und ein gemeinsamesStuck besitzt. Die Methode getIntersection(SegmentExt) pruft die zwei Segmenteauf allgemeine Schnitte.

PointsExt

Die von Pointstype abgeleitete Klasse PointsExt bietet zur Zeit nur die MethodegetPunkte, die alle zu diesem Objekt gehorenden Punkte zuruckgibt. Es bestehtaber die Moglichkeit, hier Operatoren, die auf Points arbeiten hinzuzufugen (s.LinesExt: Intersection).

LinesExt

Auch in der Klasse LinesExt besteht mit getSegmente oder getPunkt die Moglich-keit, sich alle Segmente, die zum Objekt gehoren, oder deren Anfangs- und End-punkte ausgeben zulassen. Dann ist noch der Operator intersection(LinesExt)implementiert. Dieser berechnet alle Schnittpunkte zwischen diesem und demubergebenen LinesExt.

4.4 Transformation in die Dual-Grid-Darstellung

Fur die Berechnung des neuen Datenformats und das Einfugen in die Datenbankist die Klasse Insert zustandig. Sie liest die vorhandenen Daten aus und pruft, obPunkte auf Segmenten liegen, berechnet Schnittpunkte zwischen Segmenten undtrennt dann gegebenenfalls die Segmente in Teilsegmente auf.

Zur genauen Vorgehensweise des Programms ist hier ein Flussdiagramm derUmwandlung dargestellt.

15

Page 17: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Schreibe alle verschiedenen

Objectno in ON

Lese alle Objektezu Objectno

SDO_GTYPE= 1nach P = (x,y)

Schreibe SDO_POINT

Genügt P denDG−Bedingungen

Gibt es Pschon in DB

Lese id und fügesie zu PId

Füge Punkt in DBein und füge id zu Pid

UnterteileSegment

Füge Point−Objekt einund trage dies mit allen

Elementen aus PIdin diePointList ein

Gibt es nochObjekte zu

dieser Objectno

Gibt es nochElemente in ON

SchreibeSDO_ORDINATES

nach (x0,y0, ... xn,yn)

x2 = xi+1, y2 = yi+1x1 = xi, y1 = yi

Segment von (x1,y1)nach (x2,y2)

Füge Anfangs− undEndpunkt zu SP

x2 = SP[j+2], y2 = SP[j+3]Setze x1 = SP[j], y1 = SP[j+1]

Genügt dieSteigunngdem DG

Gibt esdas Segment (x1,y1),(x2,y2)

schon

genügen(x1,y1) und (x2,y2) den

DG−Bedingungenid lesen

Segment einfügen

Segment−Id undLines−Id in die

SegmList eintragen

Istj < |SP|−2

Isti < n−2

Gibt es nochObjekte zu

dieser Objectno

Gibt es nochElemente in ON

Gibt esSchnittpunkte mit

anderen Segmentenoder Punkten

Liegt P auf einemSegment

ja nein

Fehler

ja

ja

ja

ja

nein

nein

nein

nein

Ende

janein

Füge Lines−Objekt ein

i := 0

Fehlernein

ja

nein

j := 0

neinja

Fehler

nein

ja

i += 2

nein

ja

j += 2

ja

nein

ja

Ende

ja

nein

nein

ja

Anfangs− und Endpunkt

und füge alleSchnittpunkte und

zu SP hinzu

Teile geschnittene Segmente

Abbildung 4.3: Flussdiagramm

16

Page 18: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Als erstes werden alle verschiedenen Objekt-Nummern gelesen. Objekte mitderselben Nummer werden im Dual Grid zu einem Objekt zusammengefasst. Zuden Objekt-Nummern werden dann alle zugehorigen Objekte gelesen.

Anhand des SDO GTYPE wird festgestellt, ob es sich um ein Points- oderLines-Objekt handelt. Je nach Objektart werden jetzt SDO POINT oder SDO OR-DIANTES gelesen. Vor dem Einfugen der Objekte wird gepruft, ob sie den Dual-Grid-Bedingungen genugen.

Weiterhin wird gepruft, ob die Objekte schon in der Datenbank existieren. Istdies der Fall, so wird nur die Id des Objekts zuruckgegeben.

Gibt es das Objekt noch nicht, so muss gepruft werden, ob das Einfugendie schon vorhandenen Objekte beeinflusst. Liegt ein Punkt auf einem schonvorhandenen Segment, so wird dieses in zwei Segmente unterteilt.

Bei Segmenten gibt es zwei Moglichkeiten der Beeinflussung. Ein schon vor-handener Punkt kann auf diesem Segment liegen oder es kann eine Schnittsitua-tion mit einem anderen Segment auftreten. Im ersten Fall werden statt des einenSegments zwei eingefugt. Ein Segment vom Anfangs- zum Schnittpunkt und einsvom Schnitt- zum Endpunkt. Im zweiten Fall muss sowohl das neue als auch dasschon vorhandene Segment in mehrere geteilt werden. Hierbei ist zu beachten,dass in verschiedenen Schnittsituationen verschiedene Unterteilungen notwendigsein konnen.

S1

S2 S1

S1S2

S2

Abbildung 4.4: Verschiedene Schnittsituationen

Im kollinearen Fall darf das mittlere Segment nur einmal in der Datenbankstehen.

Ist ein Objekt abgearbeitet, so wird gepruft, ob es zu dieser Objekt-Nummernoch weitere Objekte gibt. Gibt es welche, so werden diese nacheinander abgear-beitet. Sonst wird gepruft, ob es noch weitere Objekt-Nummern gibt. Wenn ja,dann werden diese bearbeitet, sonst ist das Einfugen beendet.

17

Page 19: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

4.5 Ein Beispiel zum Einfugen in das Dual Grid

Anhand des folgenden Beispiels wird die Vorgehensweise beim Einfugen von Da-ten in die Dual Grid Tabellen dargestellt. Vereinfachend wird hier das AttributObjectgeometry nur durch SDO GTYPE und SDO POINT bzw. SDO GTYPEund SDO ORDINATES dargestellt. Die anderen Daten werden nicht benotigt.Die Parameter seien n = 6 und m = 4. Folgende Daten werden als Ausgangsdatenfur das Beispiel verwendet.

P1

L1

L2

objectno objectgeometry

L1 (2, (1, 2, 4, 5))

L2

1

2

3

1 2 3 40

0

4

5

Abbildung 4.5: Ausgangsdaten des Beispiels

L1 ist noch im Oracle-Spatial-Format und soll in das Dual Grid eingefugtwerden. P1 und L2 sind schon im Dual Grid Format gespeichert. Die Tabellensehen folgendermaßen aus:

Points:

PTS(ID, NAME)

POINTSTYPE(1, ’P1’)

PointList:

PUNKTID POINTSID

1 1

18

Page 20: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Punkte:

ID PKT(XNUM, XDEN, YNUM, YDEN)

2 PUNKTTYPE(3, 1, 1, 1)3 PUNKTTYPE(4, 1, 3, 1)4 PUNKTTYPE(1, 1, 4, 1)5 PUNKTTYPE(1, 1, 5, 1)6 PUNKTTYPE(2, 1, 5, 1)1 PUNKTTYPE(2, 1, 3, 1)

SegmList:

SEGMID LINESID

2 13 11 1

Segmente:

ID SEGM(PUNKT1, PUNKT2)

2 SEGMENTTYPE(4, 5)3 SEGMENTTYPE(6, 3)1 SEGMENTTYPE(2, 3)

Lines:

LNS(ID, NAME)

LINESTYPE(1, ’L2’)

Als erstes werden alle Objectno aus der Tabelle gelesen. Dies liefert hier nurL1. Dann werden alle Objekte mit der Objectno L1 gelesen. Auch hier erhaltenwir nur das Tupel (L1, (2, (1, 2, 4, 5))).

Aus diesem Tupel wird der SDO GTYPE extrahiert und mit 1 verglichen. Esgilt aber SDO GTYPE = 2, also handelt es sich um ein oder mehrere Segmente.

Es wird nun ein Lines-Objekt in die Datenbank eingetragen. Dies bestehtvorerst nur aus einer Id, die fortlaufend vergeben wird, und einem Namen, dieserentspricht der Objectno. Eine Verbindung zu den Segmenten muss erst noch uberSegmList hergestellt werden.

Im nachsten Schritt werden die Koordinaten der einzelnen Segmente ausSDO ORDINATES gelesen. Dies sind hier (1, 2, 4, 5). Es wird also das Segmentvon (1, 2) nach (4, 5) betrachtet.

Es muss gepruft werden, ob die Steigung des Segments den Dual-Grid-Bedingungengenugt. Dies ist der Fall, denn das Segment liegt auf der Geraden y = x+1. Dieselasst sich darstellen durch

Ax + By = C mit A=-1, B=1 und C=1. Und es ist

| A |=| B |= 1 <√

24−1 und | C |< 26−1

√24−1

.

19

Page 21: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Jetzt muss gepruft werden, ob das Segment andere Segmente schneidet, oder obPunkte auf ihm liegen. Dazu werden alle Punkte gelesen, die in dem von Anfangs-und Endpunkt aufgespannten Rechteck liegen. Und es werden die Segmente gele-sen, die in dieses Rechteck hineinragen. Hier im Beispiel erhalten wir alle Punkteund Segmente, die schon in der Datenbank stehen. Schnittberechnungen ergeben,dass der Punkt mit id 1 und das Segment mit id 3 das neue Segment schneiden.

Die Segmente, die das neue Segment schneiden mussen unterteilt werden, alsowird hier das Segment mit id 3 im Schnittpunkt (3, 4) unterteilt. Dazu wird dasalte Segment aus der Datenbank entfernt und zwei neue eingefugt. Diese verlaufenvom alten Startpunkt zum Schnittpunkt bzw. vom Schnittpunkt zum Endpunkt.Dabei wird der Punkt (3, 4) eingefugt und erhalt die Id 7.

Dabei verandern sich die Tabellen Punkte, Segmente und SegmentList. Siesehen nach diesem Schritt folgendermaßen aus:

Punkte:

ID PKT(XNUM, XDEN, YNUM, YDEN)

2 PUNKTTYPE(3, 1, 1, 1)3 PUNKTTYPE(4, 1, 3, 1)4 PUNKTTYPE(1, 1, 4, 1)5 PUNKTTYPE(1, 1, 5, 1)6 PUNKTTYPE(2, 1, 5, 1)7 PUNKTTYPE(3, 1, 4, 1)1 PUNKTTYPE(2, 1, 3, 1)

Segmente:

ID SEGM(PUNKT1, PUNKT2)

2 SEGMENTTYPE(4, 5)5 SEGMENTTYPE(7, 3)4 SEGMENTTYPE(6, 7)1 SEGMENTTYPE(2, 3)

SegmList:

SEGMID LINESID

2 15 14 11 1

Damit auch das neue Segment in mehrere geteilt wird werden alle Schnittpunktein einem Feld gespeichert. Hier werden Anfangs-, Endpunkt, Schnittpunkte undalle Punkte, die auf dem Segment liegen gespeichert. Diese Punkte werden dann

20

Page 22: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

erst nach x-Koordinate, dann nach y-Koordinate sortiert. Hieraus konnen danndie neuen Segmente erstellt werden.

Das Feld der Koordinaten sieht hier folgendermaßen aus: (1, 2, 2, 3, 3, 4, 4, 5).Es mussen also nacheinander folgende Segmente eingefugt werden: (1, 2, 2, 3),(2, 3, 3, 4) und (3, 4, 4, 5).

Es wird jeweils gepruft, ob es dieses Segment schon in der Datenbank gibt.Dies ist bei allen drei Segmenten nicht der Fall. Also mussen alle Segmente ein-gefugt werden. Dazu wird gepruft, ob Anfangs- und Endpunkt dem Dual GridBedingungen genugen. Ist dies der Fall, so werden erst die Punkte, falls sie nochnicht existieren, eingefugt. Dann wird das Segment mit Verweisen auf die Punkt-Ids in die Datenbank eingefugt. Außerdem wird in die SegmList ein Eintrag mitder Segment-Id und Lines-Id geschrieben.

Fur das Segment (1, 2, 2, 3) wird der Punkt (1, 2) eingefugt, da er den DualGrid Bedingungen genugt und noch nicht existiert. Er erhalt die Id 8. Den Punkt(2, 3) gibt es schon in der Datenbank, es wird die Id 1 gelesen. Nun wird einSegment mit den Verweisen auf die Punkte 8 und 1 in die Datenbank geschrieben.Dies Segment erhalt die Id 6. Und es wird in die SegmList ein Eintrag mit Lines-IdL1 und Segment-Id 6 geschrieben. Die Segmente (2, 3, 3, 4) und (3, 4, 4, 5) werdenauf gleiche Weise bearbeitet.

Ist dies geschehen, so sehen die Tabellen folgendermaßen aus:

Points:

PTS(ID, NAME)

POINTSTYPE(1, ’P1’)

PointList:

PUNKTID POINTSID

1 1

Punkte:

ID PKT(XNUM, XDEN, YNUM, YDEN)

2 PUNKTTYPE(3, 1, 1, 1)3 PUNKTTYPE(4, 1, 3, 1)4 PUNKTTYPE(1, 1, 4, 1)5 PUNKTTYPE(1, 1, 5, 1)6 PUNKTTYPE(2, 1, 5, 1)7 PUNKTTYPE(3, 1, 4, 1)1 PUNKTTYPE(2, 1, 3, 1)8 PUNKTTYPE(1, 1, 2, 1)9 PUNKTTYPE(4, 1, 5, 1)

SegmentList:

SEGMID LINESID

2 15 14 16 27 28 21 1

21

Page 23: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Segmente:

ID SEGM(PUNKT1, PUNKT2)

2 SEGMENTTYPE(4, 5)5 SEGMENTTYPE(7, 3)4 SEGMENTTYPE(6, 7)1 SEGMENTTYPE(2, 3)6 SEGMENTTYPE(8, 1)7 SEGMENTTYPE(1, 7)8 SEGMENTTYPE(7, 9)

Lines:

LNS(ID, NAME)

LINESTYPE(1, ’L2’)LINESTYPE(2, ’L1’)

Da es keine weiteren Objekte mit Objectno L1 gibt, mussen keine weiteren Seg-mente bearbeitet werden. Jetzt wird gepruft, ob es noch weitere Objekte mitanderer Objecno gibt, die eingefugt werden sollen. Dies ist auch nicht der Fall,also ist das Einfugen beendet.

22

Page 24: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Kapitel 5

Raumliche Operationen

Raumlliche Operationen erfordern fur gewohnlich einen hohen Rechenaufwand.Um zu prufen, welche Linien sich mit welchen schneiden, muss jede Linie mitjeder auf Schnittpunkte gepruft werden. Dazu sind dann geometrische Operatio-nen notwendig. Bei den Daten im Dual Grid sind bereits alle Schnitte berechnetworden. Diese werden in der Datenstruktur festgehalten. Die einzelnen Segmentehaben keine echten Schnittpunkte mehr. Sie konnen sich nur in den Endpunktenberuhren. Diese Eigenschaft, die beim Einfugen der Daten sichergestellt wird,

Abbildung 5.1: Segmente treffen nur an Endpunkten aufeinander

ermoglicht jetzt eine schnelle und einfache Ausfuhrung der raumlichen Operatio-nen. Schnitte und ahnliches konnen durch Joins auf Tabellen realisiert werden.Wie diese aussehen wird im jeweiligen Abschnitt besprochen.

23

Page 25: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

5.1 Schnitt von Segmenten

Den Schnitt von Segmenten berechnet der Operator Intersection(Lines1, Lines2).Dieser ist in der Klasse LinesExt implementiert. Er kann aber auch als Abfragein SQLPLUS gestartet werden.

Da alle Schnittpunkte schon beim Einfugen berechnet wurden, konnen sichSegmente jetzt nur noch in ihren Endpunkten schneiden. Das bedeutet fur dieSchnittberechnung, dass nur noch die Punkte aus den Tabellen gelesen werdenmussen, die Anfangs- oder Endpunkt von jeweils mindestens einem Segment ausLines1 und Lines2 sind.

L2L1

P1

P2

P3

P4

P5P6

P7

P8

Abbildung 5.2: P2 und P3 gehoren zu L1 und L2

Im Bild sieht man, dass die Punkte P2 und P3 sowohl zum Lines-Objekt L1als auch zu L2 gehoren. Die anderen Punkte gehoren entweder zu L1 oder zu L2.Die gesuchte Schnittmenge besteht also aus P2 und P3.

Durch folgende Anfrage werden die Ids der Punkte ausgegeben, die den Schnittder Lines-Objekte 1 und 2 bilden:

select distinct l1.pkt

from (select p.id pkt

from punkte p, segmente s, lines l, segmList sl

where l.lns.id = 1

and sl.segmId = s.id

and sl.linesId = l.lns.id

and (s.segm.punkt1 = p.id

or s.segm.punkt2 = p.id)) l1,

(select p.id pkt

from punkte p, segmente s, lines l, segmList sl

where l.lns.id = 2

24

Page 26: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

and sl.segmId = s.id

and sl.linesId = l.lns.id

and (s.segm.punkt1 = p.id

or s.segm.punkt2 = p.id)) l2

where l1.pkt = l2.pkt;

5.2 Punkte auf Lines-Objekten

Der Operator on(Points, Lines) zeigt an, ob ein Points-Objekt auf einem Lines-Object liegt. Es wird die Anzahl der Punkte, die auf dem Lines-Objekt liegen,ausgegeben. Ist das Ergebnis 0, so entspricht dies einem false. Ist das Ergebnisgroßer als 0, so entspricht das einem true. Das heißt allerdings nicht, dass dasPoints-Objekt vollstandig auf dem Lines-Objekt liegt.

Um eine Aussage daruber zu bekommen, ob das Points-Objekt vollstandigauf dem Lines-Objekt liegt, muss man die Anzahl der Punkte auf dem Objektmit der Gesamtanzahl der Punkte vergleichen. Dies tut die zweite SQL-Anfrage.Hier gilt jedoch, dass eine 0 true bedeutet. Dann ist die Anzahl der Punkte gleichder Anzahl der Punkte auf dem Lines-Objekt. Alle von 0 verschiedenen Zahlenbedeuten false.

Die Frage, ob ein Punkt auf einem Lines-Objekt liegt, ist im Dual Grid gleich-bedeutend mit der Frage, ob ein Punkt Anfangs- oder Endpunkt von Segmentendes Lines-Objekts ist.

P1

L1

s1

s2

s3

s4

Abbildung 5.3: P1 ist Anfangs- bzw. Endpunkt von s2 bzw. s1

Im Bild kann man sehen, dass P1 auf L1 liegt. Es gilt P1 ist Anfangspunktvon s2 und Endpunkt von s1.

25

Page 27: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Diese Anfrage gibt die Anzahl der Punkte von dem Points-Objekt mit id = 1aus, die auf dem Lines-Objekt mit id = 1 liegen:

select count(punkt.i)

from (select p.id i from punkte p, pointList pl

where pl.pointsId = 1

and pl.punktId = p.id) punkt,

(select distinct p.id i

from punkte p, segmente s, segmList sl

where sl.linesId = 1

and sl.segmId = s.id

and (s.segm.punkt1 = p.id

or s.segm.punkt2 = p.id)) segmPunkt

where punkt.i = segmPunkt.i;

Diese Anfrage gibt an, ob das Points-Objekt mit id = 1 auf dem Lines-Objektmit id = 1 liegt (0 = true , sonst false):

select count(punkt.i) - count(pointList.punktid)

from (select p.id i from punkte p, pointList pl

where pl.pointsId = 1

and pl.punktId = p.id) punkt,

(select distinct p.id i

from punkte p, segmente s, segmList sl

where sl.linesId = 1

and sl.segmId = s.id

and (s.segm.punkt1 = p.id

or s.segm.punkt2 = p.id)) segmPunkt, pointList

where punkt.i = segmPunkt.i

and pointList.pointsId = 1;

5.3 Gemeinsame Segmente

Analog zu common border fur Regions kann man auch ein common segments furLines definieren. Dieser Operator berechnet fur zwei Lines-Objekte L1 und L2,welche Segmente sowohl zu L1 als auch zu L2 gehoren. Die Ids dieser Segmentewerden dann ausgegeben.

Auch diese Anfrage kann als Join uber Tabellen formuliert werden. Dies liegtdaran, dass jedes Segment nur einmal in der Datenbank gespeichert ist. Die Zu-gehorigkeit zu einem Lines-Objekt wird uber die Tabelle SegmList festgestellt. Eswerden also die Segmente ausgegeben, die in der SegmList sowohl einen Eintragmit sem ersten als auch mit dem zweiten Lines-Objekt haben.

Im Bild ist zu sehen, dass s2 sowohl zu L1 als auch zu L2 gehort. DiesesSegment wird also als gemeinsames Segment ausgegeben.

26

Page 28: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

L1

L2

s1

s2

s3s4

Segment

s1s2s3

s4s2

L1L1L2L2

Lines

L1

Abbildung 5.4: s2 gehort zu L1 und L2

Diese Anfrage liefert die Ids der Segmente, die zu dem Lines-Objekt mit Id =1 und dem mit Id = 2 gehoren:

select distinct l1.sid

from (select s.id sid

from segmente s, segmList sl

where sl.linesid = 1

and sl.segmId = s.id) l1,

(select s.id sid

from segmente s, segmList sl

where sl.linesid = 2

and sl.segmId = s.id) l2

where l1.sid = l2.sid;

27

Page 29: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Kapitel 6

Tests: Vergleich mit Oracle

Spatial

Getestet wurde das Programm mit zwei kleinen Datensatzen und dem ATKIS-Datensatz von Hannover. Bei den Tests werden jeweils erst die Daten in dieDatenbank eingefugt. Dies passiert sowohl fur das Dual Grid als auch fur dieOracle Spatial Daten mit einem Java-Programm. Die zu testenden Operationenwerden dann direkt mit SQL getestet. Es wird in SQLPLUS eine entsprechendeAnfrage an die Datenbank gestellt.

6.1 Test1: Intersection

Im ersten Test werden Segmente eingefugt und auf Schnitte gepruft. Das ersteSegment fuhrt waagerecht von P1 = (1, 2) nach P2 = (2, 2). Es gibt noch weitere99 Segmente, die so gewahlt sind, dass jedes das erste einmal schneidet undmit den anderen Segmenten nur den Anfangspunkt gemeinsam hat. Die genaueAnordnung wird im Bild deutlich.

Abbildung 6.1: Test 1

28

Page 30: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Die Oracle Spatial Daten weden in eine Tabelle Test1 mit den AttributenObjectno varchar2 und ObjectGeometry MDSYS.SDO Geometry. Fur die Geo-metrie ist ein Spatial-Index angelegt. Es werden Werte im Bereich [0,100] miteiner Genauigkeit von 0.0001 zugelassen.

Es ergaben sich folgende Zeiten:

• Dual Grid:

– Einfugen ≈ 1.400.000ms

– Schnittberechnung ≈ 14ms

• Oracle Spatial:

– Einfugen ≈ 13.000ms

– Schnittberechnung≈ 38ms

Das Einfugen der Daten dauert im Dual Grid deutlich langer als mit OracleSpatial, aber dafur braucht die Schnittberechnung deutlich weniger Zeit.

6.2 Test2: On

Auf einem zweiten Datensatz wird der Operator on getestet. Bei den Daten han-delt es sich um ein Lines-Objekt und ein Points-Objekt. Im Bild sieht man die geo-metrische Anordnung. Die Punkte p1,...,p5 bilden zusammen ein Points-Objekt.

L1p1

p2

p3

p4

p5

Abbildung 6.2: Test 2

Die Oracle Spatial Daten werden in die Tabelle Test2 geschrieben. Diese istwie die Tabelle aus Test1 aufgebaut und mit demselben Index versehen.

Es ergaben sich folgende Zeiten:

29

Page 31: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

• Dual Grid:

– Einfugen ≈ 1.500ms

– On-Operator ≈ 8ms

• Oracle Spatial:

– Einfugen ≈ 300ms

– On-Operator ≈ 14ms

Das Einfugen der Daten dauert naturlich im Dual Grid wieder deutlich langerals bei Oracle Spatial. Aber man sieht auch hier, dass der On-Operator im DualGrid deutlich schneller ist. Hier zeigt das Dual Grid Vorteile, wenn Operatorenhaufiger aufgerufen werden.

6.3 Hannover

Die Zeit zum Einfugen der Hannover-Daten kann nicht vollstandig gemessen wer-den, da nach einiger Zeit ein Oracle-Fehler auftritt. Bei den Testlaufen wurdemaximal 20 Prozent der Daten eingefugt. Das Einfugen von 1705 Points- undLines-Objekten dauerte 5,3 Tage.

6.4 Fazit

Das Einfugen in die Dual Grid Datenbank dauert erheblich langer als in OracleSpatial. Dies liegt einerseits daran, dass sich Datenbankanfragen und Berech-nungen in Java immer abwechseln. Es kommt also zu einem standigen Wechselzwischen Java und Oracle. Andererseits gibt es beim Einfugen sehr viele Schnitt-punktberechnungen, da jedes Objekt mit jedem anderen uberpruft werden muss.

Die raumlichen Operationen dagegen profitieren davon, dass die Schnitteschon beim Einfugen berechnet wurden. Sie mussen keine Schnitte mehr berech-nen, da alle Informationen schon in der Datenbank gespeichert sind. Hier zeigtsich deshalb ein deutlicher Zeitvorteil.

30

Page 32: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Kapitel 7

Ausblick

Die Studienarbeit befasst sich nur mit den Grundzugen des Dual Grid-Ansatzes.Es ware sinnvoll, das Programm um folgende Punkte zu erweitern:

• Arbeiten mit Flachen: Flachen konnen durch die begrenzenden Polygonedargestellt werden. Hierbei kann noch zwischen dem außeren Rand undLochern unterschieden werden.

• Neuer Oracle-Datentyp zur Darstellung der Koordinaten, damit man nichtmehr auf die Lange des Typs number beschrankt ist.

• Erweiterung der Typen Points und Lines: Hier konnen weitere Felder hin-zugefugt werden, in denen zusatzliche Informationen gespeichert werdenkonnen.

31

Page 33: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Literaturverzeichnis

[HP98] U. Hohenstein, V. Plessre: Oracle8 – Effiziente Anwendungsentwicklungmit objektrelationalen Konzepten. dpunkt-Verlag, Heidelberg, 1998.

[LG00] J. A. C. Lema, R. H. Guting: Dual Grid: A New Approach for RobustSpatial Algebra Implementation. Informatik-Bericht 268, Fernuni Hagen,2000.

[Sch97] M. Schneider: Spatial Data Types for Database Systems – Finite Re-solution Geometry for Geographic Information Systems. LNCS 1288,Springer-Verlag, Berlin, 1997.

32

Page 34: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Kapitel 8

Anhang zur Studienarbeit

8.1 Anderungen am Programm

8.1.1 Anderung des Programmablaufs

Um die Laufzeit des Programms zu verkurzen, wurde der Ablauf des Flussdia-gramms auf Seite 15 verandert. Bisher wurde direkt vor dem Einfugen der Seg-mente gepruft, ob diese den Bedingungen des Dual Grid genugen. Hierbei werdenauch Punkte uberpruft, die schon aufgrund des Dual-Grid-Verfahrens den Bedin-gungen genugen mussen. Wird dieser Test nach vorne gezogen, so werden nur dieursprunglichen Segmente getestet und nicht jedes neu entstandene Teilsegment.So entfallen viele Berechnungen und das Einfugen aller Segmente dauert jetzt 22Stunden.

33

Page 35: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Füge Anfangs− undEndpunkt zu SP

x2 = SP[j+2], y2 = SP[j+3]Setze x1 = SP[j], y1 = SP[j+1]

Gibt esdas Segment (x1,y1),(x2,y2)

schon

id lesen

Gibt esSchnittpunkte mit

anderen Segmentenoder Punkten

SchreibeSDO_ORDINATES

nach (x0,y0, ... xn,yn)

Genügen diePunkte

dem DG

x2 = xi+1, y2 = yi+1x1 = xi, y1 = yi

Segment von (x1,y1)nach (x2,y2)

Isti < n−2

Segment einfügen

Segment−Id undLines−Id in die

SegmList eintragen

Istj < |SP|−2

Genügt dieSteigunngdem DG

i := 0

nein

j := 0

neinja

j += 2

ja

Anfangs− und Endpunkt

und füge alleSchnittpunkte und

zu SP hinzu

Teile geschnittene Segmente

ja

nein

Fehler

i += 2 ja nein

ja

neinFehler

nein

Abbildung 8.1: Geandertes Flussdiagramm

8.1.2 Redundante Speicherung von Oracle Spatial Daten

Ein weiterer Versuch, die Laufzeit zu verkurzen, war das Mitfuhren von redun-danten Daten im Oracle-Spatial-Format. Die Anfragen, die beim Einfugen der

34

Page 36: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

Objekte gestellt werden, konnen dann auf diesen Spatial-Daten laufen. Hierbeikann man den in Oracle Spatial implementierten raumlichen Index nutzen.

Das so modifizierte Programm hat aber leider deutlich hohere Laufzeiten, alsdas ursprungliche (. Der Aufwand, die Spatial-Daten zu verwalten, ist groer alsder Nutzen, der durch den raumlichen Index entsteht.

8.2 Grosse der Tabellen

In den Tabellen gibt es insgesamt 38 Points-Objekte und 6307 Lines-Objekte.Ausder Tabelle USER TABLES lasst sich folgender Platzbedarf fur die einzelnenTabellen ablesen:

punkte: 31287 x 30 Bytessegmente: 35581 x 19 Bytespoints: 38 x 21 Byteslines: 6307 x 23 BytespointList: 38 x 11 BytessegmList: 89380 x 12 Bytes

hannover: 11184 x 238 Bytes

Daraus ergibt sich ein Platzbedarf von 2,702 MB fur das Dual Grid und 2,538MB fur Oracle Spatial.

8.3 Testanfragen

8.3.1 Punkte

In den Daten von Hannover gibt es 38 Punkte. Hierbei handelt es sich um Bahn-hofsanlagen, Gemeindenamen und Wohnplatznamen. Keine zwei dieser Punkteliegen aufeinander und es liegt auch kein Punkt auf einem Lines-Objekt. Deshalbkonnen auch keine Abfragen zum Vergleich von Oracle Spatial und Dual Gridgestartet werden.

Die Anfrage, ob es Punkte gibt, die auf Segmenten liegen, dauerte fur dieBahnhofsanlagen im Dual Grid 3,13 s und in der ursprunglichen Tabelle mitOracle Spatial Daten 3 min 29,06 s. Hierbei besteht im DualGrid allerdings derVorteil, dass die Points- und Lines-Objekte schon getrennt gespeichert sind. Diesist in der Hannover-Tabelle nicht der Fall. Bei den Gemeindenamen waren dieZeiten: 3,37 s und 41,99 s. Und bei Wohnplatznamen: 3,96 s und 34 min 41,21 s.

35

Page 37: Realisierung eines numerisch robusten Data Cartridge f ur ... · Realisierung eines numerisch robusten Data Cartridge f ur r aumlic he Daten f ur Oracle 9i auf Basis der ROSE-Algebra

8.3.2 Gemeinsame Segmente

Diese Anfrage berechnet die Anzahl der gemeinsamen Segmente (bzw. die Anzahlder Lines-Objekte, die gemeinsame Segmente besitzen) von zwei Objektarten.Auch hier gibt es wieder Unterschiede zu Oracle Spatial. Denn dort gibt es nurdie Moglichkeit, zu prufen, ob ein ganzes Lines-Objekt auf einem anderen liegt.Die Ergebnismenge ist also kleiner als die im Dual Grid.

Bahnhofsanlage-3501 : Bahnstrecke-3205: 536/45 (0.39 s) 26 (19.11 s)Fahrbahn-3106 : Brucke-3514: 0/0 (2.45 s) 0 (52.07 s)Grunanlage-2227 : Gartenland-4103: 163/25 (1.45 s) 0 (29.47 s)Brucke-3514 : Bahnstrecke-3205: 23/9 (1.42 s) 0 (23.09 s)Flache-4199 : Gartenland-4103: 182/34 (0.35 s) 0 (21.22 s)Geholz-4108 : Graben-5103: 0/0 (0.26 s) 0 ( 2.22 s)

8.3.3 Schnittpunkte

Diese Anfrage berechnet die Anzahl aller Schnittpunkte zwischen zwei verschie-denen Objektarten. Hier treten bei Oracle aufgrund der in der Studienarbeitbeschriebenen Ungenauigkeiten geringere Zahlen als im Dual Grid auf. Die Lauf-zeiten werden in der folgenden Tabelle angegeben:

Bahnstrecke-3205 : Fahrbahn-3106: 34(5,07 s) 34(23,87 s)Brucke-3514 : Fahrbahn-3106: 53(1,03 s) 49(31,53 s)Flache-4199 : Gartenland-4103: 211(0,95 s) 62(11,95 s)Wald-4107 : Weg-3102: 263(0,79 s) 116(10,52 s)Ackerland-4101 : Bahnstrecke-3205: 0(0,84 s) 0(2,75 s)

8.4 Fazit

Das Einfugen der Daten braucht duch viele Schnittberechnungen viel Zeit. DasEinfugen der Hannover-Tabelle mit 6345 Objekten dauert ca. 22 Stunden. Vorteilezeigt das Dual Grid bei Anfragen. Diese sind deutlich schneller als die Anfragenauf Oracle Spatial-Daten. Stellt man viele Anfragen, so wird der Aufwand beimEinfugen schnell wieder ausgeglichen.

Im Platzbedarf unterscheiden sich die beiden Modelle kaum. Die Abweichungbetragt nur 0,164 MB.

36