Erstellen, Aufbauen und Abfragen von geometry-Instanzen

Der planare räumliche Datentyp geometry stellt Daten in einem euklidischen (flachen) Koordinatensystem dar. Dieser Datentyp wird in SQL Server als CLR-Datentyp (Common Language Runtime) implementiert.

Der geometry-Typ ist vordefiniert und in jeder Datenbank verfügbar. Sie können Tabellenspalten des geometry-Typs auf die gleiche Weise erstellen und geometry-Daten in der gleichen Weise verwenden wie andere CLR-Typen.

Der (planare) geometry-Datentyp, der von SQL Server unterstützt wird, entspricht der Open Geospatial Consortium (OGC) Simple Features for SQL Specification Version 1.1.0.

Weitere Informationen zu den OGC-Spezifikationen finden Sie in den folgenden Themen:

SQL Server unterstützt eine Teilmenge des bestehenden GML 3.1-Standards, der im folgenden Schema definiert ist: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd.

In diesem Thema

  • Erstellen oder Konstruieren einer neuen geometry-Instanz

    • Erstellen einer neuen geometry-Instanz aus einer vorhandenen Instanz

    • Erstellen einer geometry-Instanz anhand einer WKT-Eingabe (Well-Known Text)

    • Erstellen einer geometry-Instanz aus einer WKB-Eingabe (Well-Known Binary)

    • Erstellen einer geometry-Instanz anhand einer GML-Texteingabe

  • Zurückgeben von WKT (Well-Known Text) oder WKB (Well-Known Binary) aus einer geometry-Instanz

  • Abfragen der Eigenschaften und Verhalten von geometry-Instanzen

    • Gültigkeit, Instanztyp und GeometryCollection-Informationen

    • Anzahl von Punkten

    • Dimension

    • Leer

    • Begrenzung, Innenbereich und Außenbereich

    • Umschlag

    • Abgeschlossenheit

    • SRID (Spatial Reference ID)

  • Bestimmen der Beziehungen zwischen geometry-Instanzen

  • geometry-Instanzen haben standardmäßig die SRID 0 (null)

  • Beispiele

Erstellen oder Konstruieren einer neuen geometry-Instanz

Erstellen einer neuen geometry-Instanz aus einer vorhandenen Instanz

Der geometry-Datentyp stellt viele integrierte Methoden zur Verfügung, mit denen neue geometry-Instanzen auf der Grundlage vorhandener Instanzen erstellt werden können.

[NACH OBEN]

Erstellen einer geometry-Instanz anhand einer WKT-Eingabe (Well-Known Text)

Der geometry-Datentyp bietet mehrere integrierte Methoden zur Erstellung einer Geometrie anhand der WKT-Darstellung von Open Geospatial Consortium (OGC). Der WKT-Standard ist eine Textzeichenfolge, die den Austausch von Geometriedaten in Textform ermöglicht.

[NACH OBEN]

Erstellen einer geometry-Instanz aus einer WKB-Eingabe (Well-Known Binary)

WKB ist ein vom Open Geospatial Consortium spezifiziertes Binärformat, das den Austausch von geometry-Daten zwischen einer Clientanwendung und einer SQL-Datenbank ermöglicht. Die folgenden Funktionen akzeptieren die WKB-Eingabe zum Zweck der Erstellung von Geometrien:

[NACH OBEN]

Erstellen einer geometry-Instanz anhand einer GML-Texteingabe

Der geometry-Datentyp bietet eine Methode, die eine geometry-Instanz aus GML generiert, einer XML-Darstellung geometrischer Objekte. SQL Server unterstützt eine Teilmenge von GML.

[NACH OBEN]

Zurückgeben von WKT (Well-Known Text) oder WKB (Well-Known Binary) aus einer geometry-Instanz

Anhand der folgenden Methoden können Sie entweder das WKT- oder das WKB-Format einer geometry zurückgeben:

[NACH OBEN]

Abfragen der Eigenschaften und Verhalten von geometry-Instanzen

Alle geometry-Instanzen verfügen über eine Reihe von Eigenschaften, die über durch SQL Server bereitgestellte Methoden abgerufen werden können. In den folgenden Themen werden die Eigenschaften und Verhalten von geometry-Typen und die Methoden zum Abrufen der einzelnen Eigenschaften und Verhalten beschrieben.

Gültigkeit, Instanztyp und GeometryCollection-Informationen

Sobald eine geometry-Instanz erstellt wurde, können Sie anhand der folgenden Methoden ermitteln, ob sie wohlgeformt ist, den Instanztyp zurückgeben oder, wenn es sich um eine Collection-Instanz handelt, eine spezifische geometry-Instanz zurückgeben.

[NACH OBEN]

Anzahl von Punkten

Alle nicht leeren geometry-Instanzen bestehen aus Punkten. Diese Punkte stellen die x- und y-Koordinaten der Ebene dar, auf die die Geometrien gezeichnet werden. geometry stellt zahlreiche integrierte Methoden zum Abfragen der Punkte einer Instanz bereit.

  • So geben Sie die Anzahl von Punkten zurück, aus denen eine Instanz besteht
    STNumPoints (geometry-Datentyp)

  • So geben Sie einen bestimmten Punkt einer Instanz zurück
    STPointN

  • So geben Sie einen beliebigen Punkt zurück, der auf einer Instanz liegt
    STPointOnSurface

  • So geben Sie den Ausgangspunkt einer Instanz zurück
    STStartPoint

  • So geben Sie den Endpunkt einer Instanz zurück
    STEndpoint

  • So geben Sie die X-Koordinate einer Point-Instanz zurück
    STX (geometry-Datentyp)

  • So geben Sie die Y-Koordinate einer Point-Instanz zurück
    STY

  • So geben Sie den geometrischen Mittelpunkt einer Polygon-, CurvePolygon- oder MultiPolygon-Instanz zurück
    STCentroid

[NACH OBEN]

Dimension

Eine nicht leere geometry-Instanz kann null-, ein- oder zweidimensional sein. Nulldimensionale Objekte (geometries), z. B. Point und MultiPoint, verfügen weder über eine Länge noch über eine Fläche. Eindimensionale Objekte (z. B. LineString, CircularString, CompoundCurve und MultiLineString) weisen eine Länge auf. Zweidimensionale Instanzen (z. B. Polygon, CurvePolygon und MultiPolygon) weisen eine Fläche und eine Länge auf. Für leere Instanzen wird als Dimension -1 ausgegeben, und für eine GeometryCollection-Auflistung wird eine Fläche ausgegeben, die vom Typ der darin enthaltenen Elemente abhängt.

  • So geben Sie die Dimension einer Instanz zurück
    STDimension

  • So geben Sie die Länge einer Instanz zurück
    STLength

  • So geben Sie die Fläche einer Instanz zurück
    STArea

[NACH OBEN]

Leer

Eine leere geometry-Instanz besitzt keine Punkte. Die Länge von leeren LineString, CircularString-, CompoundCurve- und MultiLineString-Instanzen ist 0 (null). Die Fläche von leeren Polygon-, CurvePolygon- und MultiPolygon-Instanzen ist 0 (null).

  • So bestimmen Sie, ob eine Instanz leer ist
    STIsEmpty.

[NACH OBEN]

Einfach

Die Geometrie (geometry) einer Instanz ist einfach, wenn sie die beiden folgenden Anforderungen erfüllt:

  • Keine Abbildung der Instanz darf sich selbst außer an den Endpunkten schneiden.

  • Keine zwei Abbildungen einer Instanz dürfen sich an einem Punkt schneiden, der nicht auf den Umrisslinien dieser beiden Abbildungen liegt.

HinweisHinweis

Leere Geometrien sind stets einfach.

  • So bestimmen Sie, ob eine Instanz einfach ist
    STIsSimple.

[NACH OBEN]

Begrenzung, Innenbereich und Außenbereich

Unter dem Innenbereich einer geometry-Instanz wird der von der Instanz belegte Bereich und unter dem Außenbereich wird der nicht von der Instanz bedeckte Bereich verstanden.

Die Begrenzung wird vom OGC wie folgt definiert:

  • Point- und MultiPoint-Instanzen haben keine Begrenzung.

  • Die Begrenzung von LineString- und MultiLineString-Instanzen werden durch die Anfangs- und Endpunkte gebildet, wobei die Punkte entfernt werden, die eine gerade Anzahl von Malen vorkommen.

DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');
SELECT @g.STBoundary().ToString();

Die Begrenzung einer Polygon- oder MultiPolygon-Instanz besteht aus der Menge ihrer Ringe.

DECLARE @g geometry;
SET @g = geometry::Parse('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))');
SELECT @g.STBoundary().ToString();
  • So geben Sie die Begrenzung einer Instanz zurück
    STBoundary

[NACH OBEN]

Umschlag

Der Umschlag einer geometry -Instanz, auch umgebendes Feld genannt, ist das an den Achsen ausgerichtete Rechteck, das durch die minimalen und and maximalen (X,Y-) Koordinaten der Instanz gebildet wird.

  • So geben Sie den Umschlag einer Instanz zurück
    STEnvelope

[NACH OBEN]

Abgeschlossenheit

Eine geschlossene geometry-Instanz ist eine Abbildung, deren Ausgangs- und Endpunkte identisch sind. Alle Polygon-Instanzen gelten als geschlossen. Alle Point-Instanzen gelten als nicht geschlossen.

Ein Ring ist eine einfache, geschlossene LineString-Instanz.

  • So bestimmen Sie, ob eine Instanz abgeschlossen ist
    STIsClosed

  • So bestimmen Sie, ob eine Instanz ein Ring ist
    STIsRing

  • So geben Sie den äußeren Ring einer Polygoninstanz zurück
    STExteriorRing

  • So geben Sie die Anzahl der inneren Ringen in einer Polygoninstanz zurück
    STNumInteriorRing

  • So geben Sie einen gegebenen inneren Ring einer Polygoninstanz zurück
    STInteriorRingN

[NACH OBEN]

SRID (Spatial Reference ID)

Der SRID (Spatial Reference ID) ist ein Bezeichner, der das Koordinatensystem angibt, in dem die geometry-Instanz dargestellt wird. Zwei Instanzen mit unterschiedlichen SRIDs können nicht verglichen werden.

  • So können Sie die SRID einer Instanz festlegen oder zurückgeben
    STSrid

Diese Eigenschaft kann geändert werden.

[NACH OBEN]

Bestimmen der Beziehungen zwischen geometry-Instanzen

Der geometry-Datentyp stellt viele integrierte Methoden zur Verfügung, mit denen die Beziehungen zwischen zwei geometry-Instanzen bestimmt werden können.

  • So bestimmen Sie, ob zwei Instanzen die gleiche Punktmenge umfassen
    STEquals

  • So bestimmen Sie, ob zwei Instanzen disjunkt sind
    STDisjoint

  • So bestimmen Sie, ob sich zwei Instanzen überschneiden
    STIntersects

  • So bestimmen Sie, ob sich zwei Instanzen berühren
    STTouches

  • So bestimmen Sie, ob sich zwei Instanzen überlappen
    STOverlaps

  • So bestimmen Sie, ob sich zwei Instanzen überkreuzen
    STCrosses

  • So bestimmen Sie, ob eine Instanz sich innerhalb einer anderen befindet
    STWithin

  • So bestimmen Sie, ob eine Instanz eine andere enthält
    STContains

  • So bestimmen Sie, ob eine Instanz eine andere überlappt
    STOverlaps

  • So bestimmen Sie, ob zwei Instanzen räumlich verbunden sind
    STRelate

  • So bestimmen Sie die kürzeste Entfernung zwischen Punkten in zwei Geometrien
    STDistance

[NACH OBEN]

geometry-Instanzen haben standardmäßig die SRID 0 (null)

Der Standard-SRID für geometry-Instanzen lautet in SQL Server 0. Bei räumlichen geometry-Daten ist zur Ausführung von Berechnungen des SRID der Räumlichkeitsinstanz nicht erforderlich. Daher können sich Instanzen in einer undefinierten ebenen Fläche befinden. Zur Angabe einer undefinierten ebenen Fläche in Berechnungen mit Methoden des geometry-Datentyps wird in SQL Server Database Engine (Datenbankmodul) der SRID 0 verwendet.

Beispiele

Die folgenden zwei Beispiele zeigen, wie Geometriedaten hinzugefügt und abgefragt werden.

  • Im ersten Beispiel wird eine Tabelle mit einer Identitätsspalte und der geometry-Spalte GeomCol1 erstellt. Eine dritte Spalte rendert die geometry-Spalte als Darstellung im Open Geospatial Consortium (OGC) WKT-Format und verwendet die STAsText()-Methode. Dann werden zwei Zeilen eingefügt: eine enthält eine LineString-Instanz des Typs geometry und die andere eine Polygon-Instanz.

    IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL 
        DROP TABLE dbo.SpatialTable;
    GO
    
    CREATE TABLE SpatialTable 
        ( id int IDENTITY (1,1),
        GeomCol1 geometry, 
        GeomCol2 AS GeomCol1.STAsText() );
    GO
    
    INSERT INTO SpatialTable (GeomCol1)
    VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));
    
    INSERT INTO SpatialTable (GeomCol1)
    VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
    GO
    
  • Im zweiten Beispiel werden mithilfe der STIntersection()-Methode die Punkte zurückgegeben, an denen die beiden zuvor eingegebenen geometry-Instanzen sich schneiden.

    DECLARE @geom1 geometry;
    DECLARE @geom2 geometry;
    DECLARE @result geometry;
    
    SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1;
    SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2;
    SELECT @result = @geom1.STIntersection(@geom2);
    SELECT @result.STAsText();
    

[NACH OBEN]

Siehe auch

Konzepte

Räumliche Daten (SQL Server)