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.