Tipos espaciais – geografia
Aplica-se a: SQL ServerBanco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
O tipo de dados espaciais de geografia, geography, é implementado como um tipo de dados CLR (Common Language Runtime) do .NET no SQL Server. Esse tipo representa dados em um sistema de coordenadas de terra redonda. O tipo de dados geography do SQL Server armazena dados elipsoidais (terra redonda), como coordenadas de latitude e longitude de GPS.
O SQL Server é compatível com um conjunto de métodos do tipo de dados espaciais de geography. Estão inclusos métodos de geografia 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 geografia 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 geografia.
Registrando o tipo de geografia
O tipo geography é predefinido e está disponível em cada banco de dados. É possível criar colunas de tabelas do tipo geography e operar em dados de geography da mesma maneira como outros tipos fornecidos pelo sistema são usados. Pode ser usado em colunas computadas persistidas e não persistidas.
Exemplos
a. Mostrando como adicionar e consultar dados de geografia
Os exemplos a seguir mostram como adicionar e consultar dados de geografia. O primeiro exemplo cria uma tabela com uma coluna de identidade e uma coluna de geography
, a GeogCol1
. Uma terceira coluna renderiza a coluna de geography
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 geography
e 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),
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. Retornando a interseção de duas instâncias de geografia
O exemplo a seguir usa o método STIntersection()
para retornar os pontos onde as duas instâncias geography
se cruzam.
DECLARE @geog1 geography;
DECLARE @geog2 geography;
DECLARE @result 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. Usando geografia em uma coluna computada
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
);