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