Freigeben über


Erstellen, Konstruieren und Abfragen von Geometrieinstanzen

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

Der geometry Typ ist vordefinierte und in jeder Datenbank verfügbar. Sie können Tabellenspalten vom Typ geometry erstellen und mit geometry-Daten auf die gleiche Weise wie mit anderen CLR-Typen arbeiten.

Der geometry von SQL Server unterstützte Datentyp (planar) entspricht den einfachen Features des Open Geospatial Consortium (OGC) für SQL Specification, Version 1.1.0.

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

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

Erstellen oder Konstruieren einer neuen Geometrieinstanz

Erstellen einer neuen Geometrieinstanz aus einer vorhandenen Instanz

Der geometry Datentyp bietet zahlreiche integrierte Methoden, mit deren Hilfe Sie neue geometry Instanzen basierend auf vorhandenen Instanzen erstellen können.

So erstellen Sie einen Puffer um eine Geometrie
STBuffer (Geometriedatentyp)

BufferWithTolerance (Geometriedatentyp)

So erstellen Sie eine vereinfachte Version einer Geometrie
Reduzieren (Geometriedatentyp)

So erstellen Sie den konvexen Rumpf einer Geometrie
STConvexHull (geometry Data Type)

So erstellen Sie eine Geometrie aus der Schnittmenge zweier Geometrien
STIntersection (Geometrie-Datentyp)

So erstellen Sie eine Geometrie aus der Vereinigung zweier Geometrien
STUnion (Geometriedatentyp)

So erstellen Sie eine Geometrie aus den Punkten, an denen sich eine Geometrie nicht überschneidet
STDifference (Geometriedatentyp)

So erstellen Sie eine Geometrie aus den Punkten, an denen sich zwei Geometrien nicht überlappen
STSymDifference (geometry Data Type)

So erstellen Sie eine beliebige Punktinstanz, die sich in einer vorhandenen Geometrie befindet
STPointOnSurface (Geometriedatentyp)

Erstellung einer geometrischen Instanz aus Well-Known-Texteingabe

Der geometry Datentyp stellt mehrere integrierte Methoden bereit, die eine Geometrie aus der Open Geospatial Consortium (OGC)-WKT-Darstellung generieren. Der WKT-Standard ist eine Textzeichenfolge, mit der Geometriedaten in Textform ausgetauscht werden können.

So erstellen Sie einen beliebigen Geometrieinstanztyp aus der WKT-Eingabe
STGeomFromText (Geometriedatentyp)

Analysieren (Geometriedatentyp)

So erstellen Sie eine Geometriepunktinstanz aus der WKT-Eingabe
STPointFromText (Geometriedatentyp)

So erstellen Sie eine Geometrie-MultiPoint-Instanz aus der WKT-Eingabe
STMPointFromText (geometry Data Type)

So erstellen Sie eine Geometrie-LineString-Instanz aus der WKT-Eingabe
STLineFromText (Geometriedatentyp)

So erstellen Sie eine Geometrie-MultiLineString-Instanz aus der WKT-Eingabe
STMLineFromText (Geometrie-Datentyp)

So erstellen Sie eine Geometrie-Polygoninstanz aus der WKT-Eingabe
STPolyFromText (Geometriedatentyp)

So erstellen Sie eine Geometrie-MultiPolygon-Instanz aus der WKT-Eingabe
STMPolyFromText (Geometriedatentyp)

So erstellen Sie eine GeometryCollection-Instanz aus der WKT-Eingabe
STGeomCollFromText (Geometriedatentyp)

Erstellen einer Geometrieinstanz aus Well-Known Binäre Eingabe

WKB ist ein binärformat, das vom Open Geospatial Consortium (OGC) angegeben wird, das den Austausch von Daten zwischen einer Clientanwendung und einer SQL-Datenbank ermöglicht geometry . Die folgenden Funktionen akzeptieren die WKB-Eingabe zum Erstellen von Geometrien:

So erstellen Sie einen beliebigen Geometrieinstanztyp aus der WKB-Eingabe
STGeomFromWKB (Geometriedatentyp)

So erstellen Sie eine Geometriepunktinstanz aus der WKB-Eingabe
STPointFromWKB (Geodatentyp)

So erstellen Sie eine Geometrie-MultiPoint-Instanz aus der WKB-Eingabe
STMPointFromWKB (Geometrie-Datentyp)

So erstellen Sie eine Geometrie-LineString-Instanz aus der WKB-Eingabe
STLineFromWKB (Geometriedatentyp)

So erstellen Sie eine Geometrie-MultiLineString-Instanz aus der WKB-Eingabe
STMLineFromWKB (Geometriedatentyp)

So erstellen Sie eine Geometrie-Polygoninstanz aus der WKB-Eingabe
STPolyFromWKB (geometry Data Type)

So erstellen Sie eine Geometrie-MultiPolygon-Instanz aus der WKB-Eingabe
STMPolyFromWKB (Geometriedatentyp)

So konstruieren Sie eine Geometrie-GeometryCollection-Instanz aus WKB-Eingaben
STGeomCollFromWKB (Geometrie-Datentyp)

Erstellen einer Geometrieinstanz aus der GML-Texteingabe

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

So erstellen Sie einen beliebigen Typ von Geometrieinstanzen aus der GML-Eingabe
GeomFromGml (Geometriedatentyp)

Zurückgeben von Well-Known Text und Well-Known Binärdaten aus einer Geometrieinstanz

Mit den folgenden Methoden können Sie entweder das WKT- oder WKB-Format einer geometry Instanz zurückgeben:

So geben Sie die WKT-Darstellung einer Geometrieinstanz zurück
STAsText (Geometrie-Datentyp)

ToString (Geometriedatentyp)

So geben Sie die WKT-Darstellung einer Geometrieinstanz einschließlich aller Z- und M-Werte zurück
AsTextZM (Geometriedatentyp)

So geben Sie die WKB-Darstellung einer Geometrieinstanz zurück
STAsBinary (Geometriedatentyp)

So geben Sie eine GML-Darstellung einer Geometrieinstanz zurück
AsGml (Geometriedatentyp)

Abfragen der Eigenschaften und Verhaltensweisen von Geometrieinstanzen

Alle geometry Instanzen verfügen über eine Reihe von Eigenschaften, die über Methoden abgerufen werden können, die SQL Server bereitstellt. In den folgenden Themen werden die Eigenschaften und Verhaltensweisen von Geometrietypen und die Methoden zum Abfragen der einzelnen Typen definiert.

Gültigkeits-, Instanztyp- und GeometryCollection-Informationen

Nachdem eine geometry Instanz erstellt wurde, können Sie mithilfe der folgenden Methoden ermitteln, ob sie wohlgeformt ist, den Instanztyp zurückgeben oder, wenn es sich um eine Sammlungsinstanz handelt, eine bestimmte geometry Instanz zurückgeben.

So geben Sie den Instanztyp einer Geometrie zurück
STGeometryType (Geometrie-Datentyp)

So ermitteln Sie, ob eine Geometrie ein bestimmter Instanztyp ist
InstanceOf (Geometry-Datentyp)

So ermitteln Sie, ob eine Geometrieinstanz für den Instanztyp wohlgeformt ist
STIsValid (Geometriedatentyp)

So konvertieren Sie eine Geometrieinstanz in eine wohlgeformte Geometrieinstanz mit einem Instanztyp
MakeValid (Geometry-Datentyp)

So geben Sie die Anzahl der Geometrien in einer Geometrieauflistungsinstanz zurück
STNumGeometries (Geometriedatentyp)

Geben Sie eine bestimmte Geometrie innerhalb einer Instanz der Geometriesammlung zurück.
STGeometryN (Geometry Data Type)STGeometryN (Geometriedatentyp)

Anzahl der Punkte

Alle nicht-leeren geometry Instanzen setzen sich aus Punkten zusammen. Diese Punkte stellen die X- und Y-Koordinaten der Ebene dar, auf der die Geometrien gezeichnet werden. geometry bietet zahlreiche integrierte Methoden zum Abfragen der Punkte einer Instanz.

So geben Sie die Anzahl der Punkte zurück, die eine Instanz umfassen
STNumPoints (Geometrie-Datentyp)

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

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

So geben Sie den Startpunkt einer Instanz zurück
STStartPoint

So geben Sie den Endpunkt einer Instanz zurück
STEndpoint

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

So geben Sie die Y-Koordinate einer Punktinstanz zurück
STY

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

Abmessung

Eine nicht leere geometry Instanz kann 0-, 1- oder 2-dimensional sein. Null-dimensional geometries, wie Point und MultiPoint, haben keine Länge oder Fläche. Eindimensionale Objekte, wie zum Beispiel LineString, CircularString, CompoundCurve und MultiLineString, haben Länge. Zweidimensionale Instanzen, wie Polygon, CurvePolygon und MultiPolygon, haben Fläche und Länge. Leere Instanzen melden eine Dimension von -1, und ein GeometryCollection meldet eine Fläche, die von den Typen seines Inhalts 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 den Bereich einer Instanz zurück
STArea

Leer

Eine leeregeometry Instanz weist keine Punkte auf. Die Länge leerer LineString, CircularString, CompoundCurveund MultiLineString Instanzen ist Null. Der Bereich von leeren Polygon, CurvePolygonund MultiPolygon Instanzen ist 0.

So ermitteln Sie, ob eine Instanz leer ist
STIsEmpty.

Einfach

Damit eine geometry Instanz einfach ist, muss sie beide Anforderungen erfüllen:

  • Jede Abbildung der Instanz darf sich nicht selbst schneiden, mit Ausnahme der Endpunkte.

  • Keine zwei Figuren des Objekts können sich an einem Punkt überschneiden, der sich nicht in beiden Rändern befindet.

Hinweis

Leere Geometrien sind immer einfach.

So ermitteln Sie, ob eine Instanz einfach ist
STIsSimple.

Grenze, Innen und Außen

Das Innere einer geometry Instanz ist der von der Instanz belegte Raum, und das Äußere ist der Raum, der nicht belegt ist.

Die Grenze wird von der OGC wie folgt definiert:

  • Point und MultiPoint Instanzen haben keine Grenze.

  • LineString und MultiLineString Grenzen werden durch Start- und Endpunkte gebildet, wobei diejenigen entfernt werden, die eine gerade Anzahl von Vorkommen haben.

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 Grenze einer Polygon Oder MultiPolygon Instanz ist der Satz seiner 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 Grenze einer Instanz zurück
STBoundary

Hüllkurve

Der Umschlag einer geometry Instanz, auch als Begrenzungsfeld bezeichnet, ist das Achsenausrichtungsrechteck, das durch die minimalen und maximalen Koordinaten (X,Y) der Instanz gebildet wird.

Den Umschlag einer Instanz zurückgeben
STEnvelope

Schließung

Eine geschlossenegeometry Instanz ist eine Abbildung, deren Anfangs- und Endpunkte identisch sind. Polygon Instanzen werden als geschlossen betrachtet. Point Instanzen werden nicht geschlossen.

Ein Ring ist eine einfache, geschlossene LineString Instanz.

So ermitteln Sie, ob eine Instanz geschlossen ist
STIsClosed

So ermitteln 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 Innenringe in einem Polygon zurück
STNumInteriorRing

Um einen angegebenen Innenring eines Polygons zurückzugeben
STInteriorRingN

Räumliche Referenz-ID (SRID)

Die Räumliche Referenz-ID (SRID) ist ein Bezeichner, der angibt, in welchem Koordinatensystem die geometry Instanz dargestellt wird. Zwei Instanzen mit unterschiedlichen SRIDs sind nicht vergleichbar.

So legen Sie die SRID einer Instanz fest oder geben sie zurück
STSrid

Diese Eigenschaft kann geändert werden.

Bestimmen von Beziehungen zwischen Geometrieinstanzen

Der geometry Datentyp stellt viele integrierte Methoden bereit, die Sie verwenden können, um Beziehungen zwischen zwei geometry Instanzen zu bestimmen.

So ermitteln Sie, ob zwei Instanzen denselben Punktsatz umfassen
STEquals

So ermitteln Sie, ob zwei Instanzen getrennt sind
STDisjoint

Um festzustellen, ob sich zwei Instanzen überschneiden
STIntersects

Um festzustellen, ob zwei Instanzen in Berührung kommen
STTouches

So ermitteln Sie, ob zwei Instanzen sich überlappen
STOverlaps

Um festzustellen, ob sich zwei Instanzen überschneiden
STCrosses

So ermitteln Sie, ob sich eine Instanz in einer anderen befindet
STWithin

So ermitteln Sie, ob eine Instanz eine andere enthält
STContains

So ermitteln Sie, ob eine Instanz eine andere überlappt
STOverlaps

So ermitteln Sie, ob zwei Instanzen raumbezogen sind
STRelate

So bestimmen Sie den kürzesten Abstand zwischen Punkten in zwei Geometrien
STDistance

Geometrie-Instanzen verwenden standardmäßig SRID Null

Die standardmäßige SRID für geometry Instanzen in SQL Server ist 0. Bei geometry räumlichen Daten ist die spezifische SRID der räumlichen Instanz nicht erforderlich, um Berechnungen durchzuführen. Daher können Sich Instanzen im nicht definierten planaren Raum befinden. Um den nicht definierten Planarbereich in den Berechnungen von geometry Datentypmethoden anzugeben, verwendet das SQL Server-Datenbankmodul SRID 0.

Beispiele

Die folgenden beiden Beispiele zeigen, wie Sie Geometriedaten hinzufügen und abfragen.

  • Im ersten Beispiel wird eine Tabelle mit einer Identitätsspalte und einer geometry Spalte GeomCol1erstellt. Eine dritte Spalte wandelt die geometry Spalte in ihre Open Geospatial Consortium (OGC)-Well-Known Textdarstellung (WKT) um und nutzt die STAsText() Methode. Anschließend werden zwei Zeilen eingefügt: eine Zeile enthält eine LineString Instanz von geometry, und eine Zeile enthält 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 wird die STIntersection() Methode verwendet, um die Punkte zurückzugeben, an denen sich die beiden zuvor eingefügten geometry Instanzen 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();  
    

Siehe auch

Räumliche Daten (SQL Server)