Freigeben über


Erstellen, Erstellen und Abfragengeometrieinstanzen

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance SQL Analysen-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric

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

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

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

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

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

Erstellen oder Erstellen einer neuen Geometrieinstanz

Erstellen einer neuen Geometrieinstanz 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.

So erstellen Sie einen Puffer um eine Geometrie
STBuffer (geometry-Datentyp)

BufferWithTolerance (geometry-Datentyp)

So erstellen Sie eine vereinfachte Version einer Geometrie
Reduce (geometry-Datentyp)

So erstellen Sie die konvexe Hülle einer Geometrie
STConvexHull (geometry-Datentyp)

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

So erstellen Sie eine Geometrie aus der Vereinigung zweier Geometrien
STUnion (geometry-Datentyp)

So erstellen Sie eine Geometrie aus den Punkten, an denen eine Geometrie eine andere nicht überlappt
STDifference (geometry-Datentyp)

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

So erstellen Sie eine beliebige Punktinstanz, die auf einer vorhandenen Geometrie liegt
STPointOnSurface (geometry-Datentyp)

Erstellen einer Geometrieinstanz aus der bekannten Texteingabe

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.

So erstellen Sie eine beliebige geometry-Instanz anhand einer WKT-Eingabe
STGeomFromText (geometry-Datentyp)

Parse (geometry-Datentyp)

So erstellen Sie eine Point-geometry-Instanz anhand einer WKT-Eingabe
STPointFromText (geometry-Datentyp)

So erstellen Sie eine MultiPoint-geometry-Instanz anhand einer WKT-Eingabe
STMPointFromText (geometry-Datentyp)

So erstellen Sie eine LineString-geometry-Instanz anhand einer WKT-Eingabe
STLineFromText (geometry-Datentyp)

So erstellen Sie eine MultiLineString-geometry-Instanz anhand einer WKT-Eingabe
STMLineFromText (geometry-Datentyp)

So erstellen Sie eine Polygon-geometry-Instanz anhand einer WKT-Eingabe
STPolyFromText (geometry-Datentyp)

So erstellen Sie eine MultiPolygon-geometry-Instanz anhand einer WKT-Eingabe
STMPolyFromText (geometry-Datentyp)

So erstellen Sie eine GeometryCollection-geometry-Instanz anhand einer WKT-Eingabe
STGeomCollFromText (geometry-Datentyp)

Erstellen einer Geometrieinstanz aus bekannten binären Eingaben

WKB ist ein binärformat, das vom Open Geospatial Consortium (OGC) angegeben wird, das den Austausch von Geometriedaten zwischen einer Clientanwendung und einer SQL-Datenbank zulässt. Die folgenden Funktionen akzeptieren die WKB-Eingabe zum Zweck der Erstellung von Geometrien:

So erstellen Sie einen beliebigen geometry-Instanztyp anhand einer WKB-Eingabe
STGeomFromWKB (geometry-Datentyp)

So erstellen Sie eine Point-geometry-Instanz anhand einer WKB-Eingabe
STPointFromWKB (geometry-Datentyp)

So erstellen Sie eine MultiPoint-geometry-Instanz anhand einer WKB-Eingabe
STMPointFromWKB (geometry-Datentyp)

So erstellen Sie eine LineString-geometry-Instanz anhand einer WKB-Eingabe
STLineFromWKB (geometry-Datentyp)

So erstellen Sie eine MultiLineString-geometry-Instanz anhand einer WKB-Eingabe
STMLineFromWKB (geometry-Datentyp)

So erstellen Sie eine Polygon-geometry-Instanz anhand einer WKB-Eingabe
STPolyFromWKB (geometry-Datentyp)

So erstellen Sie eine MultiPolygon-geometry-Instanz anhand einer WKB-Eingabe
STMPolyFromWKB (geometry-Datentyp)

So erstellen Sie eine GeometryCollection-geometry-Instanz anhand einer WKB-Eingabe
STGeomCollFromWKB (geometry-Datentyp)

Erstellen einer Geometrieinstanz aus der 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.

So erstellen Sie einen beliebigen geometry-Instanztyp anhand einer GML-Eingabe
GeomFromGml (geometry-Datentyp)

Zurückgeben bekannter Text und bekannter Binärdateien aus einer Geometrieinstanz

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

So geben Sie eine WKT-Darstellung einer geometry-Instanz zurück
STAsText (geometry-Datentyp)

ToString (geometry-Datentyp)

So geben Sie eine WKT-Darstellung einer geometry-Instanz einschließlich Z- und M-Werten zurück
AsTextZM (geometry-Datentyp)

So geben Sie eine WKB-Darstellung einer geometry-Instanz zurück
STAsBinary (geometry-Datentyp)

So geben Sie eine GML-Darstellung einer geometry-Instanz zurück
AsGml (geometry-Datentyp)

Abfragen der Eigenschaften und Verhaltensweisen von Geometrieinstanzen

Alle Geometrie-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ültigkeits-, 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.

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

So bestimmen Sie, ob eine Geometrie einen gegebenen Instanztyp aufweist
InstanceOf (geometry-Datentyp)

So bestimmen Sie, ob eine geometry-Instanz für ihren Instanztyp wohlgeformt ist
STIsValid (geometry-Datentyp)

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

So geben Sie die Anzahl von Geometrien in einer geometry-Auflistungsinstanz zurück
STNumGeometries (geometry-Datentyp)

So geben Sie eine bestimmte Geometrie in einer geometry-Auflistungsinstanz zurück
STGeometryN (Geometrie-Datentyp) STGeometryN (Geometrie-Datentyp)

Anzahl der Punkte

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 (geometry-Datentyp)

So geben Sie einen beliebigen Punkt zurück, der auf einer Instanz liegt
STPointOnSurface (geometry-Datentyp)

So geben Sie den Ausgangspunkt einer Instanz zurück
STStartPoint (geometry-Datentyp)

So geben Sie den Endpunkt einer Instanz zurück
STEndpoint (geometry-Datentyp)

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 (geometry-Datentyp)

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

Dimension

Eine nicht leere geometry -Instanz kann null-, ein- oder zweidimensional sein. Nulldimensionale Geometrien, wie z.B. Point und MultiPoint, haben weder Länge noch Fläche. Eindimensionale Objekte, wie z.B. LineString, CircularString, CompoundCurveund MultiLineString, haben Länge. Zweidimensionale Instanzen, z.B. Polygon, CurvePolygonund MultiPolygon, haben Fläche und Länge. 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 (geometry-Datentyp)

So geben Sie die Länge einer Instanz zurück
STLength (geometry-Datentyp)

So geben Sie die Fläche einer Instanz zurück
STArea (geometry-Datentyp)

Empty

Eine emptygeometry -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 (Geometry Data Type).

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.

Hinweis

Leere Geometrien sind stets einfach.

So bestimmen Sie, ob eine Instanz einfach ist
STIsSimple (Geometry Data Type).

Grenze, Innen und Außen

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.

DieBegrenzung wird vom OGC wie folgt definiert:

  • Point - und MultiPoint -Instanzen haben keine Begrenzung.

  • Die Begrenzung vonLineString - und MultiLineString boundaries are formed by the start points - und end points, removing those that occur an even number of times.

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 (geometry-Datentyp)

Umschlag

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

So geben Sie den Umschlag einer Instanz zurück
STEnvelope (geometry-Datentyp)

Abschluss

Eine geschlossenegeometry-Instanz ist eine Abbildung, deren Ausgangs- und Endpunkt identisch ist. AllePolygon -Instanzen gelten als geschlossen. AllePoint -Instanzen gelten als nicht geschlossen.

Ein Ring ist eine einfache, geschlossene LineString -Instanz.

So bestimmen Sie, ob eine Instanz abgeschlossen ist
STIsClosed (geometry-Datentyp)

So bestimmen Sie, ob eine Instanz ein Ring ist
STIsRing (geometry-Datentyp)

So geben Sie den äußeren Ring einer Polygoninstanz zurück
STExteriorRing (geometry-Datentyp)

So geben Sie die Anzahl der inneren Ringen in einer Polygoninstanz zurück
STNumInteriorRing (geometry-Datentyp)

So geben Sie einen gegebenen inneren Ring einer Polygoninstanz zurück
STInteriorRingN (geometry-Datentyp)

Räumliche Referenz-ID (SRID)

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 (geometry-Datentyp)

Hinweis

Diese Eigenschaft kann geändert werden.

Bestimmen von Beziehungen zwischen Geometrieinstanzen

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 (geometry-Datentyp)

So bestimmen Sie, ob zwei Instanzen disjunkt sind
STDisjoint (geometry-Datentyp)

So bestimmen Sie, ob sich zwei Instanzen überschneiden
STIntersects (geometry-Datentyp)

So bestimmen Sie, ob sich zwei Instanzen berühren
STTouches (geometry-Datentyp)

So bestimmen Sie, ob sich zwei Instanzen überlappen
STOverlaps (geometry-Datentyp)

So bestimmen Sie, ob sich zwei Instanzen überkreuzen
STCrosses (geometry-Datentyp)

So bestimmen Sie, ob eine Instanz sich innerhalb einer anderen befindet
STWithin (geometry-Datentyp)

So bestimmen Sie, ob eine Instanz eine andere enthält
STContains (geometry-Datentyp)

So bestimmen Sie, ob eine Instanz eine andere überlappt
STOverlaps (geometry-Datentyp)

So bestimmen Sie, ob zwei Instanzen räumlich verbunden sind
STRelate (geometry-Datentyp)

So bestimmen Sie die kürzeste Entfernung zwischen Punkten in zwei Geometrien
STDistance (geometry-Datentyp)

Geometrieinstanzen Standardmäßig auf null SRID

Die standardmäßige SRID für Geometrieinstanzen in SQL Server lautet 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. Um den nicht definierten planaren Raum in den Berechnungen der Geometrie-Datentypmethoden anzugeben, verwendet die SQL Server-Datenbank-Engine SRID0.

Hinweise

Geometrie- und Geografietypen können nicht als Tabellenspalten im SQL-Analyseendpunkt in Microsoft Fabric oder Warehouse in Microsoft Fabric verwendet werden.

Beispiele

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

Beispiel A.

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 Zeile enthält eine LineString -Instanz des Typs geometryund 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  

Beispiel B.

Im zweiten Beispiel werden mithilfe der STIntersection()-Methode die Punkte zurückgegeben, an denen die beiden zuvor eingegebenen geometry-Instanzen sich überschneiden.

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();