Introdução aos tipos de dados de geometria e geografia no SQL Server 2008

A dica de hoje tem o objetivo de apresentar como os tipos de dados geométricos foram introduzidos no SQL Server 2008, qual sua finalidade e possíveis formas de uso.

Dados de geométricos: O tipo de dados espacial planar, geometry, é implementado como um tipo de dados CLR (Common Language Runtime) no SQL Server. Esse tipo representa dados em um sistema de coordenadas euclidiano (plano).

Registrando o tipo de geometria

O tipo geometry é predefinido e está disponível em cada banco de dados. É possível criar colunas de tabelas do tipo geometry e operar em dados de geometry da mesma maneira como outros tipos CLR são usados.

Exemplos

Os dois exemplos a seguir mostram como adicionar e consultar dados de geometria. O primeiro exemplo cria uma tabela com uma coluna de identidade e uma coluna de geometry GeomCol1. Uma terceira coluna renderiza a coluna de geometry 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 geometry 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),
    GeomCol1 geometry, 
    GeomCol2 AS GeomCol1.STAsText() );
GO

INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));

INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
GO

O segundo exemplo usa o método STIntersection() para retornar os pontos onde as duas instâncias geometry se cruzam.

   
DECLARE @geom1 geometry;
DECLARE @geom2 geometry;
DECLARE @result geometry;

SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1;
SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2;
SELECT @result = @geom1.STIntersection(@geom2);
SELECT @result.STAsText();

Projetando e implementando armazenamento espacial

Dados espaciais representam informações sobre o local físico e a forma de objetos geométricos. Esses objetos podem ser locais de pontos ou objetos mais complexos como países, estradas ou lagos.

O SQL Server oferece suporte a dois tipos de dados espaciais: geometry e geography. Os dois tipos de dados são implementados como tipos de dados CLR (Common Language Runtime) do .NET no SQL Server.

O tipo de dados de geometry (planar) que tem suporte do SQL Server está de acordo com os Recursos Simples do Open Geospatial Consortium (OGC) para o SQL Specification versão 1.1.0.

Dados de geográficos:

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 geography 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 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();

Bom pessoal, é isso, continuaremos nas próximas dicas, apresentando mais informações, exemplos e demonstrando de forma teórica e prática como podemos utilizar estes tipos de dados, bem como, seus demais recursos.

Vou ficando por aqui, agradeço a sua visita.

Até mais.

Este post foi publicado em Dicas em por .

Sobre Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Mestre em Ciências Ambientes na linha de pesquisa em Geoprocessamento e Modelagem Matemática pela Universidade Estadual Paulista "Júlio de Mesquita Filho". Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP – Faculdade de Informática e Administração Paulista de São Paulo. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação pela Uninove – Campus São Roque. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1994 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator – Administrador de Banco de Dados – SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, entre outros recursos. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping, etc. Trabalhei entre 2011 e 2017 como Administrador de Banco de Dados e Coordenador de TI no FIT – Instituto de Tecnologia da Flextronics, atualmente exerço a função de Professor Universitário na FATEC São Roque. CTO da Galvão Tecnologia, consultoria especializada em Gestão de TI, Administração de Servidores Windows Server, Bancos de Dados Microsoft SQL Server e Virtualização. Possuo titulação Oficial Microsoft MVP e reconhecimentos: MCC, MSTC, MIE e MTAC.