Compartilhar via


Introdução ao tipo de dados de geografia

O tipo de dados de geografia, geography, é implementado como um tipo de dado 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 de geography do SQL Server armazena dados elipsoidais (globo), como coordenadas de latitude e longitude de GPS.

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.

Exemplos

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

O segundo exemplo 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();