Tipos espaciais - geografia

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed Instancebase de dados SQL em Microsoft Fabric

O tipo de dados geográficos geográficos, geography, é implementado como um tipo de dados CLR (Common Language Runtime) do .NET no SQL Server. Este tipo representa dados em um sistema de coordenadas de Terra redonda. O tipo de dados de geografia do SQL Server armazena dados elípticos (terra redonda), como coordenadas de latitude e longitude do GPS.

Note

No banco de dados SQL de malha, as colunas de tipos espaciais podem ser usadas, mas não serão espelhadas para o Fabric OneLake.

O SQL Server dá suporte a um conjunto de métodos para o tipo de dados geográficos geográficos. Isso inclui métodos sobre geografia que são definidos pelo padrão Open Geospatial Consortium (OGC) e um conjunto de extensões da Microsoft para esse padrão.

A tolerância a erros para os métodos geográficos pode ser tão grande quanto 1.0e-7 * extensões. As extensões referem-se à distância máxima aproximada entre pontos do objeto geográfico .

Registar o tipo de geografia

O tipo de geografia é predefinido e está disponível em cada base de dados. Você pode criar colunas de tabela de tipo geografia e operar em dados geográficos da mesma maneira que usaria outros tipos fornecidos pelo sistema. O tipo pode ser usado em colunas computadas persistentes e não persistentes.

Conversion

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

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

A conversão entre geografia e todos os outros tipos de dados não é permitida. Isto inclui a conversão entre geografia e geometria. Para mover dados entre estes dois tipos, utilize-se os métodos Well-Known Binary (WKB) ou Well-Known Text (WKT), por exemplo STAsBinary() com STGeomFromWKB().

A conversão de um tipo de cadeia para geografia usa as mesmas regras que geography::Parse(). A cadeia tem de ser Well-Known Texto. O SRID do resultado é 4326.

A conversão entre geografia e binário ou varbinário utiliza o formato de serialização nativo SQL Server da geografia, 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 alvo ou o tipo binário for demasiado curto para o valor geográfico , ocorre um erro. O valor não é truncado.

Remarks

Na base de dados SQL no Microsoft Fabric, os tipos de dados geográficos e geométricos são suportados, mas não podem ser espelhados para o Fabric OneLake.

Examples

A. Mostrar como adicionar e consultar dados geográficos

Os exemplos a seguir mostram como adicionar e consultar dados geográficos. O primeiro exemplo cria uma tabela com uma coluna de identidade e uma geography coluna, GeogCol1. Uma terceira coluna converte a coluna geography na respetiva representação Open Geospatial Consortium (OGC) Well-Known Text (WKT) e utiliza o método STAsText(). Duas linhas são então inseridas: uma linha contém uma LineString instância de geography, e uma linha contém uma Polygon instância.

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    id INT IDENTITY (1, 1),
    GeogCol1 geography,
    GeogCol2 AS GeogCol1.STAsText()
);
GO

INSERT INTO SpatialTable
(
    GeogCol1
)
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656 )', 4326));

INSERT INTO SpatialTable
(
    GeogCol1
)
VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653 , -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326));
GO

B. Devolva a interseção de duas instâncias geográficas

O exemplo a seguir usa o STIntersection() método para retornar os pontos onde as duas instâncias inseridas geography anteriormente se cruzam.

DECLARE @geog1 AS geography;

DECLARE @geog2 AS geography;

DECLARE @result AS geography;

SELECT @geog1 = GeogCol1
FROM SpatialTable
WHERE id = 1;

SELECT @geog2 = GeogCol1
FROM SpatialTable
WHERE id = 2;

SELECT @result = @geog1.STIntersection(@geog2);

SELECT @result.STAsText();

C. Use geografia numa coluna calculada

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

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    locationId INT IDENTITY (1, 1),
    location geography,
    deliveryArea AS location.STBuffer(10) PERSISTED
);