Dela via


Spatiala typer – geometri (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av 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. Kan användas i beständiga och icke-bevarade beräknade kolumner.

Remarks

I SQL-databasen i Förhandsversionen av Microsoft Fabric stöds datatyper för geografi och geometri , men de kan inte speglas i Fabric OneLake.

Examples

A. Visar hur du 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. Returnerar skärningspunkten för 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 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();  

C. Använda 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  
)  

See Also

Spatial Data (SQL Server)