Tipi spaziali - geometry (Transact-SQL)
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure database SQL in Microsoft Fabric
Il tipo di dati spaziali planari geometry è implementato come tipo di dati CLR (Common Language Runtime) in SQL Server. Questo tipo rappresenta i dati in un sistema di coordinate euclideo (piano).
In SQL Server è supportato un set di metodi per il tipo di dati spaziali geometry. Questi metodi includono metodi su geometry definiti dallo standard OGC (Open Geospatial Consortium) e da un set di estensioni Microsoft di tale standard.
La tolleranza agli errori dei metodi geometry può arrivare fino a 1,0e-7 * extent. Il termine extent indica la distanza massima approssimativa tra i punti dell'oggetto geometry.
Registrazione del tipo geometry
Il tipo geometry è predefinito e disponibile in ogni database. È possibile creare colonne di tabella di tipo geometry e operare sui dati geometry nello stesso modo in cui si utilizzano gli altri tipi CLR. Questo tipo può essere utilizzato in colonne calcolate persistenti e non persistenti.
Osservazioni:
Nel database SQL in Microsoft Fabric sono supportati tipi di dati geography e geometry , ma non è possibile eseguire il mirroring di Fabric OneLake.
Esempi
R. Informazioni su come aggiungere ed eseguire una query su dati geometry
Nei due esempi seguenti viene illustrato come aggiungere ed eseguire query su dati di tipo geometry. Nel primo esempio viene creata una tabella con una colonna Identity e una colonna geometry
, ovvero GeomCol1
. Una terza colonna effettua il rendering della colonna geometry
nella rappresentazione Well-Known Text (WKT) OGC (Open Geospatial Consortium) e utilizza il metodo STAsText()
. Vengono quindi inserite due righe: in una riga è contenuta un'istanza LineString
di geometry
e in una seconda è contenuta un'istanza Polygon
.
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. Restituzione dell'intersezione di due istanze geometry
Nel secondo esempio viene utilizzato il metodo STIntersection()
per restituire i punti in cui si intersecano le due istanze geometry
inserite in precedenza.
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. Utilizzo del tipo geometry in una colonna calcolata
Nell'esempio seguente viene creata una tabella con una colonna calcolata persistente usando un tipo geometry.
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
)