Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation IV GIS-Seminar SQL und Simple Features Übersicht • SQL - relationale Datenbanken ... was ist das? • kurze Wiederholung: Simple Features • Feature Tables – Speicherungsarten • Anfragen an die Geometrie durch Methoden Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 2 SQL - was ist das? • Strucured Query Language • Standard für relationale Datenbanken • IBM: SEQUEL (1970) SQL (ab 1980) • Sprache zur Definition und Manipulation von relationalen Datenbanken Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 3 Relationale Datenbank • 2-dimensionale Matrix • Inhalte: – Spalten: Attribute – Jede Zeile ein Feature Beispieltabelle: Punktnummer X-Koordinate Y-Koordinate 1 2 3 4 0,00 0,00 100,00 100,00 0,00 100,00 100,00 0,00 • Eigenschaften – jede Spalte beinhaltet ein Attribut und hat einen Attributnamen – die Wertebereiche der Eintragungen sind elementar und nicht weiter zerlegbar – Reihenfolge der Spalten ist beliebig – Alle Zeilen (Tupel) sind paarweise verschieden Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 4 Simple Features Geometrie-Klassen-Hierarchie (OGC) Übersicht: Erinnerung: Geoinformation 4, Vorlesung 10 Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 5 Simple Features 0-, 1- oder 2-dim. Geometrien • Point • • • • • • • • • MultiPoint Curve Line LineString MultiLineString MultiCurve LinearRing Polygon MultiPolygon 0-dimensional • Surface 2-dimen• MultiSurface sional • Geometry Collection 1-dimensional Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 6 Feature Table • Features sind räumliche Objekte • Feature Tables ähneln im Aufbau den vorhin beschriebenen relationalen Datenbanken • Jedes Feature wird in einer Zeile dargestellt • Darstellung und Speicherung der Simple Features wurde vom Open GIS Consortium (OGC) entwickelt Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 7 Feature Table Es gibt drei Speicherungsarten der Feature Tables • SQL 92, unter Anwendung von a) numerischen b) binären SQL-Typen zur Speicherung der Geometrie • SQL 92, mit Geometrietypen Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 8 Beispiel 1: SQL92 - numerische Implementation (1) GID ESEQ ETYPE SEQ X0 Y0 X1 Y1 X2 Y2 X3 Y3 X4 Y4 1 1 3 1 0 0 0 30 30 30 30 0 0 0 1 2 3 1 10 10 10 20 20 20 20 10 10 10 2 1 3 1 30 0 30 30 60 30 60 0 30 0 2 2 3 1 40 5 40 20 45 20 45 15 50 15 2 2 3 2 50 15 50 5 40 5 Nil Nil Nil Nil 3 1 3 1 0 30 0 60 30 60 30 30 0 30 4 1 3 1 30 30 30 60 60 60 60 30 30 30 (0,60) (60,60) (30,60) GID: geometry identifier ESEQ: element sequence number GID 3 GID 4 (0,30) (60,30) ESEQ 2 ESEQ 2 GID 1 (0,0) GID 2 (30,0) ETYPE: primitive type -> Geometrietyp • 1 - Point • 2 - LineString • 3 - Polygon •... SEQ: sequence number (60,0) Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 9 Beispiel 1: SQL92 - numerische Implementation (2) GID ESEQ ETYPE SEQ X0 Y0 X1 Y1 X2 Y2 X3 Y3 X4 Y4 1 1 3 1 0 0 0 30 30 30 30 0 0 0 1 2 3 1 10 10 10 20 20 20 20 10 10 10 2 1 3 1 30 0 30 30 60 30 60 0 30 0 2 2 3 1 40 5 40 20 45 20 45 15 50 15 2 2 3 2 50 15 50 5 40 5 Nil Nil Nil Nil 3 1 3 1 0 30 0 60 30 60 30 30 0 30 4 1 3 1 30 30 30 60 60 60 60 30 30 30 (0,60) (60,60) (30,60) GID 3 Darstellung der Geometrie GID 4 (0,30) (60,30) ESEQ 2 ESEQ 2 SEQ 1 SEQ 2 GID 1 (0,0) (30,0) GID 2 (60,0) Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 10 Beispiel 2: SQL92 - binäre Implementation GID XMIN YMIN XMAX YMAX Geometry 1 0 0 30 30 <Well-Known-Binary-Geometry> 2 30 0 60 30 <WKBGeometrie> 3 0 30 30 60 <WKBGeometrie> 4 30 30 60 60 <WKBGeometrie> (30,60) (0,60) (60,60) X,Y -> Min, Max: Definition der bounding box (0,30) GID 3 GID 4 ESEQ 2 GID 1 (0,0) (60,30) ESEQ 2 (30,0) WKBGeometrie: Stellt die Geometrie als eine Sequenz von unsigned integer oder double dar. GID 2 (60,0) Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 11 SQL92 mit Geometrietypen • Zu jedem Geometrietyp wird eine Tabelle definiert, die nur Objekte des einen Geometrietyps enthält • basiert auf der Geometrie Klassen Hierarchie vom OGC • Anwendung von Methoden möglich Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 12 Anfragen • Anfragen an die Geometrie werden in SQL durch vorgefertigte Methoden getätigt • Diese Methoden können nur im SQL 92 mit Geometrietypen benutzt werden • Es gibt Methoden, die – für alle Geometrien gelten Basis-Methoden – nur auf spezielle Geometrien angewendet werden können • Ausgaben sind im WKBGeometry Format Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 13 Anfrage in SQL • Ein Anfrage in SQL92 -Form sieht folgendermaßen aus: Beispiel: Schnitte von Flurstücken mit einer Straße: SELECT Parcel.Name, Parcel.Id FROM Parcels, Street WHERE Intersects(Parcels.Location, Street.centerline) = 1 • Ausgabe: Alle Flurstücke, die von dieser Straße geschnitten werden Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 14 Basis-Methoden Anfrage • • • • • • • • • Ausgabe Dimension ( ):Integer GeometryType ( ):String SRID ( ):Integer Envelope( ):Geometry AsText( ):String AsBinary( ):Binary IsEmpty( ):Integer IsSimple( ):Integer Boundary( ):Geometry - Dimension des Objektes (0, 1 od. 2) - Name der Geometrie - ID für das Spatial Reference System - Bounding Box als Polygon - textuelle Repräsentation - binäre Repräsentation - 1: true, 0: false, -1: unknown - 1: true, 0: false, -1: unknown - Grenze Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 15 Test-Methoden für räumliche Beziehungen Test • • • • • • • • • Beziehung Equals():Integer - Gleichheit mit einer anderen Geometrie Disjoint():Integer - Menge der gemeinsamen Punkte = 0 Intersects():Integer - Schnitt mit einer anderen G. Touches():Integer - Berührung mit einer anderen G. Crosses():Integer - Kreuzung mit einer anderen G. Within():Integer - innerhalb einer anderen Geometrie Contains():Integer - Enthält eine andere G. Overlaps():Integer - Überlappung mit einer anderen G. Relate():Integer - Beziehung mit einer anderen G. (Beispiele siehe unter anderem Vorlesung 10, GIS III 2001) Ausgabe ist immer 1 für „true“, 0 für „false“ oder -1 für „unknown“! Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 16 Methoden, die Spatial Analysis unterstützen (1) Anfrage Ausgabe • Distance():Double • • • • - kürzeste Distanz zu einer anderen Geometrie Buffer():Geometry - Repräsentation aller Punkte, die einen kleineren oder gleichen Abstand wie den angegebenen von der Geometrie haben. ConvexHull( ):Geometry - Repräsentation der konvexen Hülle Intersection():Geometry - Repräsentation des Schnitts (AB) Union():Geometry - Repräsentation der Vereinigten Punktmenge (AB) Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 17 Methoden, die Spatial Analysis unterstützen (2) Anfrage Ausgabe • Difference():Geometry - Repräsentiert die Geometrie der nichtgemeinsamen Punkte (A-B) • SymDifference():Geometry - ist gleich der Vereinigung minus dem Schnitt ((A-B)(B-A)) Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 18 Methoden - GeometryCollection Anfrage Ausgabe • NumGeometries( ):Integer • GeometryN():Geometry - die Anzahl der enthaltenen Geometrien - die N-te Geometrie in der Collection Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 19 Methoden - Point Anfrage Ausgabe • X( ):Double • Y( ):Double - X-Koordinate - Y-Koordinate Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 20 Methoden - Curve Anfrage • • • • Ausgabe Length( ):Double StartPoint( ):Point EndPoint( ):Point IsClosed( ):Integer • IsRing( ):Integer - Länge der Kurve - Startpunkt - Endpunkt - 1: „true“, wenn Startpunkt=Endpunkt 0: „false“ oder -1: „unknown“ - 1: „true“, falls closed und simple ! 0: „false“ oder -1: „unknown“ „simple“: kein Punkt wird doppelt durchlaufen, mit Ausnahme des Start- und Endpunktes! Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 21 Methoden - LineString, Line, LinearRing Anfrage Ausgabe • NumPoints( ):Integer - Anzahl der Punkte im LineString • PointN(N:Integer):Point - Punkt n aus LineString l Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 22 Methoden - MultiCurve Anfrage Ausgabe • IsClosed( ):Integer • Length( ):Double - 1: „true“, wenn Startpunkt=Endpunkt 0: „false“ oder -1: „unknown“ - Länge der Kurve Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 23 Methoden - Surface Anfrage Ausgabe • Area( ):Double - Fläche des Surface • Centroid( ):Point - Schwerpunkt • PointOnSurface( ):Point - Punkt der garantiert im Surface liegt Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 24 Methoden - Polygon Anfrage Ausgabe • ExteriorRing( ):LineString • NumInteriorRing( ):Integer • InteriorRingN():LineString - umgebender Ring - Anzahl der inneren Ringe - N-te innere Ring Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 25 Abschlusswort • Simple Features vom OGC nur zweidimensional • Zukunft: komplexe Geometrien • Spatial Schema Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 26 Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Vielen Dank für eure Aufmersamkeit! Noch Fragen? Line, LineString, LinearRing • ein Linestring ist eine Kurve (Curve), wenn zwischen den Punkten linear interpoliert wird • besteht ein LineString aus exakt zwei Punkten, so wird er als Line bezeichnet • Ist ein LineString „einfach“ und „geschlossen“, so wird er als LinearRing bezeichnet s s e s s e e e einfach nicht einfach geschl./einf. geschl./nicht einf. Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 28 Curve • 1-dimensional • Sequenz von Punkten zwischen denen linear interpoliert wird Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 29 MultiCurve • 1 – dimensionale Geometrie • Elemente dieser Subklasse sind Kurven • Die Klasse wird als „einfach“ bezeichnet, wenn alle Elemente „einfach“ sind • Schnittpunkte dürfen nur in der Begrenzung zweier Elemente vorkommen • Begrenzung dieser Klasse sind all diejenigen Punkte, welche in einer ungeraden Anzahl der Teilelemente vorkommen • MultiCurve gilt als „geschlossen“, wenn alle Teilelemente „geschlossen“ sind Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 30 MultiLineString • MultiCurve = MultiLineString, wenn Elemente LineStrings – (lineare Interpolation zwischen den Punkten) e2 s2 e2 s2 e2 s1 s1 s1 e1 e1 e1 s2 einfach Grenzen = {s1,e2} nicht einfach Grenzen = {s1,e1} geschlossen Grenzen = {Ø} Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 31 Polygon • ebene Oberfläche, definiert durch eine äußere und 0 oder mehrere innere Grenzen – jede innere Grenze legt ein „Loch“ im Polygon fest • die Grenzen bestehen aus LinearRings • mehrere Grenzen dürfen sich nicht schneiden – Berührpunkte sind gestattet Polygon mit einem ... zwei ...bzw. drei Ringen Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 32 MultiPolygon 1 • Subklasse, deren Elemente Polygone sind • Kennzeichen : • Die Innenräume und die Grenzen zweier Polygone dieser Klasse dürfen sich nicht schneiden – Sie dürfen sich an einer begrenzten Anzahl von Punkten berühren • MultiPolygon besteht aus einer geordneten, geschlossenen Ansammlung von Punkten • Die inneren Bereiche dieser Klasse sind nicht zusammenhängend • Die Anzahl der inneren Bereiche entspricht der Anzahl der Polygone Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 33 MultiPolygon 2 • die Grenzen dieser Klasse bestehen aus einer Ansammlung geschlossener Kurven (LineString) • Jede Grenze wird exakt einem Polygon zugeordnet, welches sich in der Klasse befindet 1 Polygon 3 Polygone 2 Polygone 2 Polygone Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 34 Surface • 2D – geometrisches Objekt • Zeichnet sich durch eine „äußere“ Grenze aus – Darüber hinaus können mehrere „innere“ Grenzen bestehen • Einfache Oberflächen (= Simple Surfaces) haben im 3D die gleiche Gestalt, wie ebene Oberflächen • Polyhedral Surfaces erhält man, indem man einfache Oberflächen entlang ihrer Grenzen miteinander „vernäht“ • diese müssen dann nicht mehr eben sein (3D) Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 35 MultiSurface • 2D Ansammlungen von Oberflächen • zwei verschiedene Oberflächen (Surfaces) dürfen sich nicht schneiden – ansonsten kein Multisurface sondern Surface • die Grenzen zweier Elemente können sich in einer begrenzten Anzahl von Punkten berühren • MultiSurface wird als abstrakte Klasse bezeichnet • Sie definiert verschiedene Vorgehensweisen für deren Unterklassen Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 36 MultiGeometry • Stellt eine Geometrie dar, die mehrere anderen Geometrien beeinhaltet Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 37 Textuelle Repräsentation (WKB) • Ausgabe ist für den Menschen lesbar • Beispiel: Ein String im geogr. Koordinatensystem für die UTM-Zone 10 im NAD83 GEOGCS[‘GCS_North_American_1983’, DATUM[‘D_North_American_1983’, SPHEROID[‘GRS_1980’,6378137,298.257222101]], PRIMEM[‘Greenwich’,0], UNIT[‘Degree’,0.0174532925199433]] Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 38 Binäre Repräsentation (WKB) • Zahlencode • zur maschinellen Weiterverarbeitung • Beispiel: B=1 T=3 NR=2 NP=3 X1 Y1 X2 Y2 X3 Y3 NP=3 X1 Y1 X2 Y2 X3 Y3 Ring 1 Ring 2 WKB Polygon Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 39 Beispiel - NRW Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 40 Beispiel - NRW: Envelope Envelope( ):Geometry Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 41 Beispiel - NRW: Envelope Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 42 Beispiel - NRW: Envelope Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 43 Beispiel - NRW: Envelope Ausgabe: Polygon, das die bounding box repräsentiert Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 44 Beispiel - NRW: Boundary Boundary( ):Geometry Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 45 Beispiel - NRW: Boundary Ausgabe: Polgon, das die Grenze NRW´s repräsentiert Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 46 Beispiel - NRW: Buffer Buffer():Geometry: Repräsentation aller Punkte, die einen kleineren oder gleichen Abstand wie den angegebenen von der Geometrie haben. Z.B.: Umkreis von X Kilometern Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 47 Beispiel - NRW: Buffer Buffer():Geometry: Repräsentation aller Punkte, die einen kleineren oder gleichen Abstand wie den angegebenen von der Geometrie haben. Z.B.: Umkreis von X Kilometern X Ausgabe wäre in diesem Fall die Geometrie des grünen Kreises Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 48 Beispiel - NRW Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 49 Beispiele A B Intersection():Geometry A B A B Union():Geometry A B B-A A-B Difference():Geometry A B B A (A-B)(B-A) SymDifference():Geometry A B A Till Baberg - GIS-Seminar - SS 02 - SQL und Simple Features - 13.06.02 B 50