Tipos espaciais - geometria (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

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 geometry .

Registre 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. O tipo pode ser usado em colunas computadas persistentes e não persistentes.

Conversion

A conversão da geometria para binário, varbinário, char, varchar, nchar e nvarchar deve ser explícita. Use CAST ou CONVERT.

A conversão de binário, varbinário, char, varchar, nchar e nvarchar para geometria pode ser implícita ou explícita.

Conversão entre geometria e todos os outros tipos de dados não é permitida. Isso inclui a conversão entre geometria e geografia. Para mover dados entre esses dois tipos, use os métodos Well-Known Binário (WKB) ou Texto Bem Conhecidoo (WKT), por exemplo STAsBinary() , com STGeomFromWKB().

A conversão de um tipo de string para geometria usa as mesmas regras que geometry::Parse(). A sequência deve ser Texto Bem Conhecidoo. O SRID do resultado é 0.

A conversão entre geometria e binário ou varbinário usa o formato nativo de serialização SQL Server geometria, não Well-Known binário. Um valor binário Well-Known causa um erro. Para converter para ou a partir de Well-Known Binário, use STAsBinary() e STGeomFromWKB().

Se a cadeia de alvo ou o tipo binário for muito curto para o valor geométrico , ocorre um erro. O valor não é truncado.

Remarks

No banco de dados SQL no Microsoft Fabric, tipos de dados de geografia e geometria são suportados, mas não podem ser espelhados no Fabric OneLake.

Examples

A. Mostrar como adicionar e consultar dados de geometria

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 (Texto Bem Conhecido) 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. Devolva 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 AS geometry;
DECLARE @geom2 AS geometry;
DECLARE @result AS 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. Use geometria em uma coluna calculada

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