Por mais que não seja muito comum a utilização de dados geográficos dentro do SQL Server o tipo de dados GEOGRAPHY está disponível desde a versão 2008 no SQL Server.
Para quem ainda não utilizou este recurso vou mostrar um rápido exemplo desde a criação da tabela, inserção de dados e a utilização de uma função específica para calcular a distância entre dois pontos em linha reta.
Vamos primeiramente criar a tabela.
Observem que estamos criando um campo coords do tipo GEOGRAPHY aonde irão ficar armazenadas as coordenadas propriamente ditas. O campo place será uma coluna computada utilizando a função STAsText() para retornar as coordenadas armazenadas em coords em um formato legível.
CREATE TABLE [pocGeography] ( id BIGINT IDENTITY, name VARCHAR(1000), coords GEOGRAPHY, place AS coords.STAsText() );
Agora vamos para a inserção dos dados. Notem a utilização da função Point() que representa um ponto a partir das coordenadas [Latitude, Longitude] fornecidas e da função STGeomFromText() que transforma as coordenadas legíveis em um formato apto para armazenamento em um tipo de dados geográfico no SQL Server.
INSERT INTO [dbo].[pocGeography] ([name],[coords]) VALUES ('Sapiranga', geography::STGeomFromText('POINT(29.6353861 051.0069556)', 4326)); INSERT INTO [dbo].[pocGeography] ([name],[coords]) VALUES ('Porto Alegre', geography::STGeomFromText('POINT(30.0348417 051.2386778)', 4326));
Agora vamos utilizar a função STDistance() para calcular a distância entre dois pontos em linha reta.
DECLARE @src GEOGRAPHY; DECLARE @dst GEOGRAPHY; SET @src = (select coords from [dbo].[pocGeography] where id=2) SET @dst = (select coords from [dbo].[pocGeography] where id=1) --SELECT @src.STDistance(@dst)/1609.344 --Miles SELECT @src.STDistance(@dst)/1000 --Kilometers
Resultado:
Existem muitas outras funções, métodos e funcionalidades para trabalharmos com dados geográficos no SQL Server. Se quiserem conferir alguns métodos existentes deem uma olhada na documentação da MSDN no link abaixo:
https://msdn.microsoft.com/en-us/library/bb933802.aspx
É isso galera! Espero que tenham gostado!
Referências: