geometry (Transact-SQL)

Il tipo di dati spaziale planare geometry viene implementato come tipo di dati Common Language Runtime (CLR) in SQL Server. Questo tipo rappresenta i dati in un sistema di coordinate euclideo (piano).

In SQL Server 2008 è supportato un set di metodi per il tipo di dati spaziali geometry. Questi metodi includono metodi sul tipo geometry definiti dallo standard OGC (Open Geospatial Consortium) e un set di estensioni Microsoft a tale standard.

Per ulteriori informazioni sul metodi relativi ai tipi di dati spaziali geometry, vedere Guida di riferimento ai metodi per il tipo di dati 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 verrebbero utilizzati gli altri tipi CLR.

Esempi

Nei due esempi seguenti viene illustrato come aggiungere ed eseguire query sui tipi di dati 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 relativa rappresentazione Well-Known Text (WKT) OCG (Open Geospatial Consortium) e utilizza il metodo STAsText(). Vengono quindi inserite due righe: una contiene un'istanza LineString di geometry e la seconda contiene 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

Nel secondo esempio viene utilizzato il metodo STIntersection() per restituire i punti dove le due istanze geometry prima inserite si intersecano.

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