Spatial Join

Werbung
GIS-Seminar Wintersemester 01/02
Spatial
Join
Vortrag: Carsten Breuer
Spatial Join
Spatial Join
• wichtigste Join- Operation in einem GIS
• paarweise Verknüpfung zweier Mengen von geometrischen
Objekten deren räumliche Merkmale eine räumliche
Aussage erfüllen
• verschiedenen Typen räumlicher Aussagen
• bedeutendste Varianten:
• Intersection Join
• Overlap Join
Spatial Join
Spatial Join
• Einsatzmöglichkeiten: alle Arten von Anfragen und Operationen,
die geometrische Daten miteinander in Verbindung setzen
• Grundlage für die effiziente Ausführung des Map Overlays
• kann dazu dienen, aus mehreren Geo- Objekten ein neues Ob-
jekt zu generieren oder um räumliche Abhängigkeiten zwischen
Geo- Objekten festzustellen
• das Join- Prädikat und die betroffenen Attribute sind geometri-
schen Typs (Bsp. für Attributstypen: Streckenzüge, Flüsse,..)
Spatial Join
Spatial Join/ Beispiel 1
• gegeben: Relationen Städte und Wälder
• die Anfrage „finde alle Wälder, die in einer Stadt liegen“ ist
ein möglicher Spatial Join auf den Relationen Wälder und
Städte mit dem Prädikat „liegt in“
• liegt ein Wald „w“ in einer Stadt „s“, so wäre das Paar (w,s)
in der Ergebnismenge des Spatial Joins
Spatial Join
Spatial Join/ Beispiel 2
• Kombination zweier Karten mit verschiedenen Typen von Ob-
jekten
• Kombination einer Nutzungskarte mit einer Niederschlagskarte
• Anfrage „finde alle Waldgebiete mit mindestens 20 Litern
durchschnittlichem Regenfall pro Monat“
Spatial Join
Berechnung des Spatial Joins
zwei Schritte:
• Filter Step
• Refinement Step
Filter Step:
• Minimum Bounding Box (mbb)
• Plane Sweep Algorithmus
• Ergebnis: Kandidatenmenge
Refinement Step:
• Entfernung der mbbs und Vergleich der eigentlichen
Objekte
Spatial Join
Strategien und Algorithmen für Spatial Joins
• Lineare Strukturen
jede Beziehung mit einer linearen Struktur indiziert
z-geordnete Bäume
• R-Bäume
synchronisiertes Durchgehen beider Bäume
• Einzel-Index
indizierte Nested Loop Methode
• Kein Index
vereinfachte Hash-Join Methode
Spatial Join
z-geordneter Spatial Join
Voraussetzung: beide Beziehungen sind z-geordnet
z-geordneter Baum als Index
Blätter von jedem Baum: Liste L von Einträgen der Form
[z,oid]
die Zellen von einer Zerlegung müssen nicht unbedingt
minimal sein
die Beziehungen teilen sich den gleichen Raum
Zelle mit dem key z ist in einer mit dem key z´
enthalten (oder ist gleich), wenn z´ ein Präfix von z ist und
wenn z´  z
Spatial Join
z-geordneter Spatial Join
Algorithmus
• Verbinden der Listen L1/L2 der Eingaben die sich auf
die beiden Relationen beziehen
• Paar von Eingaben von den beiden Listen sind
Kandidaten für den Verfeinerungsschritt, wenn ein
key ein Präfix des anderen ist
• Vor dem Verfeinerungsschritt: Kandidatengruppen
von Objekt ids müssen sortiert werden um Duplikate
zu entfernen
Spatial Join
z-geordneter Spatial Join
Algorithmus
A
Beispiel
z´= scc(z)
B
zA
D
E
F
C
z axis
ssc(zA)
G
H
I
Wenn z = 30 dann ist z´= 3033333 (angenommene Tiefe
von 7 für Zerlegung)
Kandidatengruppen: (A,D), (A,E), (A,F), (B,E), (B,F),
(C,H) und (C,I)
zwei Stacks erforderlich
Spatial Join
z-geordneter Spatial Join
Algorithmus
scannen der beiden Listen
Sweeping einer vertikalen Linie entlang der z-Achse
zwei mögliche Ereignisse:
• Eingabe Ereignisse
• Ausgabe Ereignisse
Spatial Join
z-geordneter Spatial Join
Beispiel:
A
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Schritt 1:
• Eingabe von A
• current1 = B
• S1 = {A}
• current2 = D
• S2 = {}
A
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
Schritt 2:
• Eingabe von D
• current1 = B
• S1 = {A}
• current2 = E
• S2 = {D}
A
C
D
E
ssc(zA)
F
G
z axis
H
I
A
Schritt 3:
• Ausgabe von D
• current1 = B
• S1 = {A}
• current2 = E
• S2 = {}
B
zA
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
Schritt 4:
• Eingabe von B
• current1 = C
• S1 = {B,A}
• current2 = E
• S2 = {}
A
C
D
Schritt 5:
• Eingabe von E
• current1 = C
• S1 = {B,A}
• current2 = F
• S2 = {E}
B
zA
E
ssc(zA)
F
G
z axis
H
I
A
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
Schritt 6:
• Eingabe von F
• current1 = C
• S1 = {B,A}
• current2 = G
• S2 = {F,E}
A
C
D
Schritt 7:
• Ausgabe von B
• current1 = C
• S1 = {A}
• current2 = G
• S2 = {F,E}
B
zA
E
ssc(zA)
F
G
z axis
H
I
A
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
A
Schritt 8:
• Ausgabe von A
• current1 = C
• S1 = {}
• current2 = G
• S2 = {F,E}
Weitere Schritte analog
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
Algorithmus Zordering Join
begin
•
result: Set of pairs of ids, initially empty
while not (eof(L1) and empty (S1) and eof(L2) and empty (S2))
begin
event = MIN (CURRENT(L1), SCC(top(S1)),
CURRENT(L2), SCC(top(S2)))
if (event = CURRENT(L1))then //left bound of a rectangle
Entry (L1,S1)
else if (event = SCC(top(S1)))then //right bound of a rectangle
result += EXIT (S1,S2)
else if (event = CURRENT(L2))then //left bound of a rectangle
ENTRY (L2, S2)
else if (event = SCC(top(S2)))then //right bound of a rectangle
result += EXIT (S2,S1);
end while
sort result; remove duplicates;
return result
end
es werden der Reihe nach
die Ereignisse verarbeitet,
die sich aus den Listen L1/L2
bzw. von den Säulen S1 und
S2 ergeben
Spatial Join
z-geordneter Spatial Join
• jedes z-geordnete Blatt eines Baumes nur einmal gelesen
• Zahl der I/O´s: n1 + n2 +k
• Voraussetzung: jeder Stack wird im Hauptspeicher gehalten
• Worst Case: Algorithmus-Komplexität quadratisch zur
Eingabegröße
• In allen Fällen ist eine Eliminierung der Duplikate erforderlich
Spatial Join
Verbinden zweier R-Bäume
• Algorithmus, bei dem beide Relationen entweder mit einem
R-Baum, einem R* Baum oder jeder anderen Variante
indiziert sind
• Minimierung der I/O und CPU-Kosten
• drei Varianten des Algorithmus
Spatial Join
Verbinden zweier R-Bäume
Algorithmen
• der einfachste benutzt eine Tiefensuche
• Anfang an den beiden Wurzeln
• bei jedem Schritt wird ein Knoten N1 eines Baumes mit einem
Knoten N2 des anderen Baumes verglichen
• Berechnung der Gruppen von überlappenden Eingaben (e1,e2)
• wenn das Blatt-Level erreicht ist, sind die Paare von
Objekt ids gefunden
Spatial Join
Verbinden zweier R-Bäume
Algorithmus
begin
result: set of pairs of ids, initially empty
for all e1 in N1 do
for all e2 in N2 such that e1.mbb  e2.mbb  0 do
if (the leaf level is reached) then
result += {(e1,e2)}
else
N´1 = READPAGE (e1.pageID); N´2 = READPAGE (e2.pageID);
result += STT (N´1,N´2)
end if
end for
end for
return result
end
Spatial Join
Verbinden zweier R-Bäume
• hohe CPU Kosten
• CPU Kosten abhängig von
der Hardware
von der Seitengröße
• Schwächen des Algorithmus:
Nested Loop über den Eingaben von den Knoten
Blindtest jeder Kandidatengruppe
Spatial Join
Verbinden zweier R-Bäume
1. Optimierung:
• Beschränken des Suchraumes
• Beobachtung: die mbbs der Knoten N1 und N2 decken
nicht den gleichen Raum ab
Spatial Join
Verbinden zweier R-Bäume
I
I = N1.mbb  N2.mbb
N1
N2
Ausschluß aller Eingaben außerhalb von I
Spatial Join
Verbinden zweier R-Bäume
I
N1
N2
1. Schritt: Scannen der Knoten
Markierung der Kandidateneingaben
2. Schritt: Verarbeiten der Kandidateneingaben durch Nested Loop Algorithmus
Spatial Join
Verbinden zweier R-Bäume
2. Optimierung:
• Plane-Sweep Technik
Spatial Join
Verbinden zweier R-Bäume
Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt
b2
r
b3
b1
l1
l2
b4
Spatial Join
Verbinden zweier R-Bäume
Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt
b2
r
l1
b1
b4
b3
l2
• Gegeben: zwei Sätze von Rechtecken
• Gesucht: Schnitt zwischen einem roten und blauen Rechteck
Spatial Join
Verbinden zweier R-Bäume
Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt
b2
r
b3
b1
l1
l2
b4
Spatial Join
Verbinden zweier R-Bäume
Algorithmus
begin
result: set of pairs of ids, initially empty
pos1 = 1, pos2 = 1// current positions in N1 and N2
Sort the entries e in N1 and N2 on e.mbb.xmin
while (pos1  |N1| and pos2  |N2|) do
begin
if (N1[pos1].mbb.xmin < N2[pos2].mbb.xmin) then
e = N1[pos1]; p´ = pos2; e´ = N2[p´]
while (e´.mbb.xmin e.mbb.xmax) do
begin
if (e.mbb  e´.mbb  0) then result += {(e.oid, e´.oid)}
p´ = p´ + 1; e´ = N2[p´]
end do
pos1 = pos1 + 1// next entry in N1
else
Do as before, permuting the roles of entries of N1 and N2
end if
end while
return result
end
Spatial Join
Verbinden zweier R-Bäume
• Mischung von Plane-Sweep und Nested Loop Techniken
• Im Gegensatz zum Nested Loop Algorithmus begrenzt die
Sweep-Linie die Anzahl von Rechtecken, die gegeneinander getestet
werden müssen
• Algorithmus ist sowohl einfach als auch effizient
• erheblicher Leistungsgewinn
Spatial Join
Räumlicher Hash Verbund
• Alternative zum externen Plane-Sweep Algorithmus
• Anwendung des Hash-Join-Algorithmus für
räumliche Daten
• wenn kein räumlicher Index für die zusammenzuführenden
Beziehungen existiert
• Hauptziel: ausgewogene Verteilung der Daten zwischen
Buckets am Ende des Prozesses
Spatial Join
Räumlicher Hash Verbund
Beispiel 1:
B
A
O
D
C
• Hash-Funktion teilt den Suchraum in vier Buckets auf
• jeder Bucket wird als Rechteck dargestellt
Bucket Ausdehnung
• Rechteck r allen Buckets zugewiesen, deren Ausdehnung r
schneiden
Spatial Join
Räumlicher Hash Verbund
D
Beispiel 2:
B
A
O
C
• jedes Rechteck wird genau einem Bucket zugewiesen
• Ausdehnung ist so, daß alle zugewiesenen Rechtecke
eingeschlossen werden
Spatial Join
Räumlicher Hash Verbund
Algorithmus für den Overlap Spatial Join
Schritt 1: anfängliches Teilen von R
jedes Rechteck einem Bucket zuteilen
Ausdehnung eines Buckets = mbb all seiner Rechtecke
Anforderungen an die Teilung
ungefähr gleiche Anzahl Rechtecke in jedem Bucket
jeder Bucket sollte in den Hauptspeicher passen
Überlappen von Bucket Ausdehnungen minimal
D
Ziel:
B
A
O
C
Spatial Join
Räumlicher Hash Verbund
Algorithmus für den Overlap Spatial Join
Schritt 2: zweites Teilen
• jedes Rechteck aus S einem Bucket der R-Teilung zuteilen
dessen Ausdehnung es überlappt
• dieser Schritt führt zu einzelnen überflüssigen Zuteilungen
B
A
O
D
C
• Verteilung von S ganz sich ganz anders darstellen als die von R
• Anzahl von Rechtecken aus S in einem Bucket variablel
Spatial Join
Räumlicher Hash Verbund
Algorithmus für den Overlap Spatial Join
Schritt 3: Verbundphase
• Gegeben: zwei Gruppen von Buckets
• Ziel: jeder Bucket BR muß mit einem Bucket BS zusammengelegt
werden
• Ein Bucket muß in den Hauptspeicher passen
• Ergebnisse enthalten keine Duplikate
Spatial Join
Räumlicher Hash Verbund
Beispiel:
• Teilung der Datengruppe
Vier Buckets mit
überlappenden Ausdehnungen
D
A
C
11
2
1
5
4
7 B
Inhalt der Buckets:
A = {1, 14, 10}
B = {2, 4, 7, 11}
C = {3, 8, 9}
D = {5, 6, 12, 13}
B
10
14 A
6
D
13
3
9
C
12
8
Spatial Join
Räumlicher Hash Verbund
Beispiel:
b
• Teilung der zweiten Datengruppe
e
d
c
f
Mit den Bucket Ausdehnungen
des ersten Datensatzes:
A´ = {c, d }
B´ = {a, b, d, g }
C´ = {e, g, h }
D´ = {a, e }
a
g
h
a
b
D
B
d
c
A
f
e
g
h
C
Spatial Join
Räumlicher Hash Verbund
Beispiel:
• zu verbindende Gruppen von Buckets:
• [A, A´], [B, B´], [C, C´], [D, D´]
• Verbund von einem Paar von Buckets:
Suche nach Gruppen von überlappenden Rechtecken
Herunterladen