Partilhar via


Tipos espaciais – geometria (Transact-SQL)

Aplica-se a: SQL ServerBanco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

O tipo de dados espaciais planares, geometria, é implementado como um tipo de dados do CLR (Common Language Runtime) no SQL Server. Esse tipo representa dados em um sistema de coordenadas euclidiano (plano).

O SQL Server é compatível com um conjunto de métodos do tipo de dados espaciais de geometria. Esses métodos incluem aqueles baseados em geometria que são definidos pelo padrão OGC (Open Geospatial Consortium) e um conjunto de extensões da Microsoft para esse padrão.

A tolerância de erro para os métodos de geometria pode chegar até as extensões de 1.0e-7 *. As extensões referem-se à distância máxima aproximada entre os pontos do objeto de geometria.

Registrando o tipo de geometria

O tipo geometry é predefinido e está disponível em cada banco de dados. É possível criar colunas de tabelas do tipo geometry e operar com dados geometry da mesma maneira como outros tipos CLR são usados. Pode ser usado em colunas computadas persistidas e não persistidas.

Exemplos

a. Mostrando como adicionar e consultar dados geométricos

Os dois exemplos a seguir mostram como adicionar e consultar dados geométricos. O primeiro exemplo cria uma tabela com uma coluna de identidade e uma coluna de geometry, a GeomCol1. Uma terceira coluna renderiza a coluna de 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 geometrye uma linha que contém uma instância de 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. Retornando a interseção de duas instâncias de geometria

O segundo exemplo usa o método STIntersection() para retornar os pontos onde as duas instâncias de geometry inseridas anteriormente 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();  

C. Usando geometria em uma coluna computada

O exemplo a seguir cria uma tabela com uma coluna computada persistente usando um tipo de geometria.

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  
)  

Consulte Também

Dados espaciais (SQL Server)