Utilizando Geometry Datatype do SQL Server 2008 R2–Feliz Natal

Fala galera, sei que já passou quase uma semana no natal mas ainda vale. Eu estava resolvendo algumas coisas da empresa e não deu para postar isso a tempo… mas vamos lá.

Que tal fazer uma arvore de natal com o SQL Server 2008 R2 utilizando o DataType Geometry. Sim, é possível.

Pra nivelar o conhecimento de todos, o Datatype Geometry é um tipo de dados novo, incluso na versão 2008 do SQL Server. Esse datatype permite que se trabalhe com algumas figuras geométricas, tais como um Circulo (Point), Polígono (Polygon) ou Linhas (Line). Ele é um datatype baseado em CLR, isso significa que por trás das várias funcionalidades prontas que pode se trabalhar no SQL Server, é .Net que está fazendo o trabalho :). Resumidamente é isso.

Vamos começar por partes, adicionando a copa da nossa árvore, para isso, vamos precisar de alguns triangulos. No meu exemplo utilizei 4 triangulos. Veja o código abaixo:

DECLARE @Arvore1 GEOMETRY = ‘POLYGON ((25 -20, 0 10, -25 -20, 25 -20))’

DECLARE @Arvore2 GEOMETRY = ‘POLYGON ((20 -10, 0 15, -20 -10, 20 -10))’

DECLARE @Arvore3 GEOMETRY = ‘POLYGON ((15 0, 0 20, -15 00, 15 0))’

DECLARE @Arvore4 GEOMETRY = ‘POLYGON ((10 10, 0 25, -10 10, 10 10))’

 

Essa é a forma de declarar e criar poligonos. Reparem que o primeiro e o ultimo ponto de cada uma das posições do polígono são as mesmas. Se você começar o polígono em um ponto e terminar em outro, vai dar um erro no seu código. Agora que já tem os polígonos da sua copa da árvore, vamos visualizar todos juntos.

Se você fizer uma consulta como essa abaixo, terá um resultado como esse abaixo:

 

image

 

Não está se parecendo muito com uma árvore, então o que podemos fazer é juntar todos os polígonos que criamos e fazer um polígono único, que ai sim, terá uma forma mais apresentavel. Para isso, será utilizado uma função pronta deste datatype. Veja o código abaixo e qual é o resultado apresentado:

 

image

Agora sim, bem mais apresentavel. O segredo foi utilizar o método STUnion do datatype. Ele é um método que unifica dois dados do tipo geometry. O que eu fiz foi criar 3 variáveis novas para receber esses polígonos unificados. Por fim, eu mostrei o ultimo polígono, que já era a junção de todos os outros.

Bom, seguindo a tradição natalina, faltam algumas bolinhas de natal na nossa árvore. Podemos inserir algumas bolinhas com o tipo Point. Veja o código abaixo a criação de algumas bolinhas de natal.

DECLARE  @Bola1 GEOMETRY, @Bola2 GEOMETRY

       , @Bola3 GEOMETRY, @Bola4 GEOMETRY

 

SET @Bola1 = GEOMETRY::Point(10,10,0).STBuffer(2)

SET @Bola2 = GEOMETRY::Point(15,0,0).STBuffer(2)

SET @Bola3 = GEOMETRY::Point(20,-10,0).STBuffer(2)

SET @Bola4 = GEOMETRY::Point(25,-20,0).STBuffer(2)

Aqui está o código de apenas 4 bolinhas, mas no código que utilizei pra fazer a minha arvore de natal eu fiz com 14.

Quando eu mostrei pra minha esposa que eu tinha feito uma arvore no SQL Server, ela veio ver e a primeira coisa que disse foi: Cadê a estrela no topo. Eu, pra não ficar com minha imagem de homem da casa manchada, disse a ela que ainda estava faltando algumas coisas, e logo em seguida fiz a estrela.

Reparem que novamente utilizei o poligono, porque o que eu preciso é de uma estrela de 5 pontas. Veja o código:

DECLARE @Estrela GEOMETRY = ‘POLYGON ((-5 25, 5 25, -5 20, 0 30, 5 20, -5 25))’

 

Depois da estrela só coloquei o caule da árvore e já pude finalizar o código. Veja o código do caule:

DECLARE @Caule GEOMETRY = ‘POLYGON ((-4 -20, 4 -20, 4 -35, -4 -35, -4 -20))’

 

A arvore finalizada fica assim:

image

Se você quiser baixar o código que utilizei pra fazer essa árvore de natal, é só clicar aqui.

Sobre Diego Nogare 350 Artigos
Diego Nogare é Gerente Técnico de Engenharia de Machine Learning no Itaú-Unibanco. Também é professor em programas de pós graduação no Mackenzie e na FIAP, em São Paulo. Foi nomeado como Microsoft MVP por 11 anos seguidos, e hoje faz parte do programa Microsoft Regional Director.