Trabalhando com dados geográficos no SQL Server

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:

Screen Shot 2016-06-18 at 4.44.00 AM

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:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s