Räumliche Typen – Geometrie (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

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

SQL Server unterstützt einen Satz von Methoden für den räumlichen geometry-Datentyp. Dazu gehören Methoden zur geometry, die im OGC-Standard (Open Geospatial Consortium) und in einer Gruppe von Microsoft-Erweiterungen dieses Standards definiert sind.

Die Fehlertoleranz für die geometry-Methoden kann bis zu 1,0e-7 * Blöcke groß sein. Die Ausdehnungen beziehen sich auf den ungefähren maximalen Abstand zwischen Punkten des Geometrieobjekts .

Registrieren Sie den Geometrietyp

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 Typ kann sowohl in persistierten als auch in nicht gespeicherten berechneten Spalten verwendet werden.

Umwandlung

Die Umwandlung von Geometrie zu Binär,Varbinär, Char, Varchar, NCchar und Nvarchar muss explizit erfolgen. Verwenden Sie CAST oder CONVERT.

Die Umwandlung von binär,varbinär, char, varchar, nchar und nvarchar in Geometrie kann implizit oder explizit sein.

Die Umwandlung zwischen Geometrie und allen anderen Datentypen ist nicht erlaubt. Dazu gehört auch die Umwandlung zwischen Geometrie und Geografie. Um Daten zwischen diesen beiden Typen zu verschieben, verwenden Sie die Methoden Well-Known Binary (WKB) oder Well-Known Text (WKT), zum Beispiel STAsBinary() mit STGeomFromWKB().

Die Umwandlung von einem Zeichenkettentyp in Geometrie verwendet die gleichen Regeln wie geometry::Parse(). Der String muss Well-Known Text sein. Die SRID des Ergebnisses ist 0.

Die Umwandlung zwischen Geometrie und Binärform oder Varbinär verwendet das SQL Server native Serialisierungsformat der Geometrie, nicht Well-Known Binär. Ein Well-Known Binärwert verursacht einen Fehler. Um in oder von Well-Known Binärcode umzuwandeln, verwenden STAsBinary() Sie und STGeomFromWKB().

Ist die Zielkette oder der Binärtyp für den Geometriewert zu kurz, tritt ein Fehler auf. Der Wert wird nicht verkürzt.

Remarks

In SQL-Datenbanken in Microsoft Fabric werden Geografie- und Geometrie-Datentypen unterstützt, können aber nicht auf das Fabric OneLake gespiegelt werden.

Examples

A. Zeigen Sie, wie man Geometriedaten hinzufügt und abfragt

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 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

B. Geben Sie die Schnittmenge zweier geometrischer Instanzen zurück

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

DECLARE @geom1 AS geometry;
DECLARE @geom2 AS geometry;
DECLARE @result AS 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();

C. Geometrie in einer berechneten Spalte verwenden

Im folgenden Beispiel wird eine Tabelle mit einer persistierten berechneten Spalte mit einem geometry-Typ erstellt.

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    locationId INT IDENTITY (1, 1),
    location geometry,
    deliveryArea AS location.STBuffer(10) PERSISTED
);