400 likes | 524 Views
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.
E N D
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
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 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
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
C A z´= scc(z) B zA z axis ssc(zA) D F H I E G Wenn z = 30 dann ist z´= 3033333 (angenommene Tiefe von 7 für Zerlegung) Spatial Join z-geordneter Spatial Join • Algorithmus Beispiel Kandidatengruppen: (A,D), (A,E), (A,F), (B,E), (B,F), (C,H) und (C,I) zwei Stacks erforderlich
Sweeping einer vertikalen Linie entlang der z-Achse Spatial Join z-geordneter Spatial Join • Algorithmus scannen der beiden Listen zwei mögliche Ereignisse: • Eingabe Ereignisse • Ausgabe Ereignisse
C A B zA ssc(zA) z axis D F H I E G C A B zA ssc(zA) z axis D F H I E G Spatial Join z-geordneter Spatial Join • Beispiel: Schritt 1: • Eingabe von A • current1 = B • S1 = {A} • current2 = D • S2 = {}
C A B zA ssc(zA) z axis D F H I E G C A B zA ssc(zA) z axis D F H I E G Spatial Join z-geordneter Spatial Join Schritt 2: • Eingabe von D • current1 = B • S1 = {A} • current2 = E • S2 = {D} Schritt 3: • Ausgabe von D • current1 = B • S1 = {A} • current2 = E • S2 = {}
C A B zA ssc(zA) z axis D F H I E G C A B zA ssc(zA) z axis D F H I E G Spatial Join z-geordneter Spatial Join Schritt 4: • Eingabe von B • current1 = C • S1 = {B,A} • current2 = E • S2 = {} Schritt 5: • Eingabe von E • current1 = C • S1 = {B,A} • current2 = F • S2 = {E}
C A B zA ssc(zA) z axis D F H I E G C A B zA ssc(zA) z axis D F H I E G Spatial Join z-geordneter Spatial Join Schritt 6: • Eingabe von F • current1 = C • S1 = {B,A} • current2 = G • S2 = {F,E} Schritt 7: • Ausgabe von B • current1 = C • S1 = {A} • current2 = G • S2 = {F,E}
C A B zA ssc(zA) z axis D F H I E G Spatial Join z-geordneter Spatial Join Schritt 8: • Ausgabe von A • current1 = C • S1 = {} • current2 = G • S2 = {F,E} Weitere Schritte analog
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
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 • Algorithmus
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
I = N1.mbb N2.mbb I N1 N2 Ausschluß aller Eingaben außerhalb von I Spatial Join Verbinden zweier R-Bäume
I N1 N2 Markierung der Kandidateneingaben Spatial Join Verbinden zweier R-Bäume 1. Schritt: Scannen der Knoten 2. Schritt: Verarbeiten der Kandidateneingaben durch Nested Loop Algorithmus
Spatial Join Verbinden zweier R-Bäume 2. Optimierung: • Plane-Sweep Technik
b2 b4 r b3 b1 l1 l2 Spatial Join Verbinden zweier R-Bäume Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt
b2 r b4 b3 b1 l1 l2 Spatial Join Verbinden zweier R-Bäume Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt • Gegeben: zwei Sätze von Rechtecken • Gesucht: Schnitt zwischen einem roten und blauen Rechteck
b2 b4 r b3 b1 l1 l2 Spatial Join Verbinden zweier R-Bäume Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt
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 • Algorithmus
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
O B D A C Bucket Ausdehnung Spatial Join Räumlicher Hash Verbund Beispiel 1: • Hash-Funktion teilt den Suchraum in vier Buckets auf • jeder Bucket wird als Rechteck dargestellt • Rechteck r allen Buckets zugewiesen, deren Ausdehnung r • schneiden
D O B A C Spatial Join Räumlicher Hash Verbund Beispiel 2: • jedes Rechteck wird genau einem Bucket zugewiesen • Ausdehnung ist so, daß alle zugewiesenen Rechtecke • eingeschlossen werden
D O Ziel: B A C 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
O B D A 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 • 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
B D A C Vier Buckets mit überlappenden Ausdehnungen 11 5 D 2 4 12 13 6 B 7 3 10 1 8 A C 14 9 Spatial Join Räumlicher Hash Verbund Beispiel: • Teilung der Datengruppe Inhalt der Buckets: A = {1, 14, 10} B = {2, 4, 7, 11} C = {3, 8, 9} D = {5, 6, 12, 13}
a b e g d c f h Mit den Bucket Ausdehnungen des ersten Datensatzes: a D b e B g d c A C f h Spatial Join Räumlicher Hash Verbund Beispiel: • Teilung der zweiten Datengruppe A´ = {c, d } B´ = {a, b, d, g } C´ = {e, g, h } D´ = {a, e }
Suche nach Gruppen von überlappenden Rechtecken 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: