geometria (Transact-SQL)

O tipo de dados espacial planar, geometry, é implementado como um tipo de dados CLR (Common Language Runtime) no SQL Server. Esse tipo representa dados em um sistema de coordenadas euclidiano (plano).

O SQL Server 2008 suporta um conjunto de métodos para o tipo de dados espacial geometry. Esses métodos incluem aqueles baseados em geometry que são definidos pelo padrão OGC (Open Geospatial Consortium) e um conjunto de extensões da Microsoft para esse padrão.

Para obter mais informações sobre métodos do tipo de dados espacial geometry, consulte Referência de método de tipo de dados de geometria.

Registrando o tipo de geometria

O tipo geometry é predefinido e está disponível em todos os bancos de dados. É possível criar colunas de tabelas do tipo geometry e operar em dados de geometry da mesma maneira como outros tipos CLR são usados.

Exemplos

Os dois exemplos a seguir mostram como adicionar e consultar dados de geometria. O primeiro exemplo cria uma tabela com uma coluna de identidade e uma coluna geometryGeomCol1. Uma terceira coluna renderiza a coluna geometry em sua representação WKT (Well-Known Text) do Open Geospatial Consortium (OGC) e usa o método STAsText(). Em seguida, duas linhas são inseridas: uma linha que contém uma instância LineString de geometry e uma linha que contém uma instância 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

O segundo exemplo usa o método STIntersection() para retornar os pontos onde as duas instâncias geometry se cruzam.

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