Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Planar spatial datatyp, geometri, implementeras som en CLR-datatyp (Common Language Runtime) i SQL Server. Den här typen representerar data i ett eukliderat (platt) koordinatsystem.
SQL Server stöder en uppsättning metoder för den rumsliga datatypen geometri . Dessa metoder omfattar metoder för geometri som definieras av OGC-standarden (Open Geospatial Consortium) och en uppsättning Microsoft-tillägg till den standarden.
Feltoleransen för geometrimetoderna kan vara så stor som 1,0e-7 * omfattningar. Omfattningarna refererar till det ungefärliga maximala avståndet mellan punkter i geometriobjektet .
Registrera geometritypen
Geometritypen är fördefinierad och tillgänglig i varje databas. Du kan skapa tabellkolumner av typen geometri och arbeta med geometridata på samma sätt som du använder andra CLR-typer. Typen kan användas i både bevarade och icke-persisterade beräknade kolumner.
Conversion
Konvertering från geometri till binär, varbinär, char, varchar, nchar och nvarchar måste vara explicit. Använd CAST eller CONVERT.
Konvertering från binär, varbinär, char, varchar, nchar och nvarchar till geometri kan vara implicit eller explicit.
Konvertering mellan geometri och alla andra datatyper är inte tillåten. Detta inkluderar omvandling mellan geometri och geografi. För att flytta data mellan dessa två typer, använd metoderna Well-Known Binary (WKB) eller Well-Known Text (WKT), till exempel STAsBinary() med STGeomFromWKB().
Konvertering från strängtyp till geometri använder samma regler som geometry::Parse(). Strängen måste vara Well-Known Text. SRID för resultatet är 0.
Konvertering mellan geometri och binär eller varbinär använder det SQL Server inbyggda serielformatet för geometri, inte Well-Known binär. Ett Well-Known Binärvärde orsakar ett fel. För att konvertera till eller från Well-Known binär, använd STAsBinary() och STGeomFromWKB().
Om målsträngen eller binära typen är för kort för geometrivärdet uppstår ett fel. Värdet är inte förkortat.
Remarks
I SQL-databasen i Microsoft Fabric stöds geografi- och geometridatatyper men kan inte speglas till Fabric OneLake.
Examples
A. Visa hur man lägger till och frågar geometridata
Följande två exempel visar hur du lägger till och frågar geometridata. I det första exemplet skapas en tabell med en identitetskolumn och en geometry kolumn, GeomCol1. En tredje kolumn renderar geometry kolumnen i dess WKT-återgivning (Open Geospatial Consortium) (OGC) Well-Known Text (WKT) och använder STAsText() metoden. Två rader infogas sedan: en rad innehåller en LineString instans av geometryoch en rad innehåller en Polygon instans.
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. Returnera snittet mellan två geometriinstanser
I det STIntersection() andra exemplet används metoden för att returnera de punkter där de två tidigare infogade geometry instanserna korsar varandra.
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. Använd geometri i en beräknad kolumn
I följande exempel skapas en tabell med en bevarad beräknad kolumn med hjälp av en geometrityp .
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
);