Você está na página 1de 18

SQL Server 2008 oferece vrios aprimoramentos, incluindo novos tipos de dados, novas instrues T-SQL e alteraes incrementais

em suporte Microsoft .NET Framework, suporte a XML e o recurso de agente de servios. De longe, a alterao de maior e mais interessante para desenvolvedores o suporte do SQL Server 2008 para dados espaciais uma poderosa adio caixa de ferramentas do programador do SQL Server. Nesta coluna, vou apresente uma viso geral breve dos dados espaciais e ilustrar algumas utilizaes interessantes. Dados espaciais so definidos como dados que so representados por imagens 2D ou 3D. SQL Server 2008 suporta imagens 2D e 3D pode ser adicionado em uma verso futura. Dados espaciais podem ser subdivididos em dados geomtricos (dados que podem usar clculos que envolvam geometria Euclidian) e dados geogrficos (dados que identifica locais geogrficos e limites na Terra).

Usando o tipo de dados Geografia


Vamos comear com um aplicativo simples de dados espaciais, que pode ser til para processamento sistemas (OLTP) que envolvem clientes de mais tradicional transaes online. Dados espaciais til no caso porque cada cliente tem um endereo. Voc geralmente pensar endereos como rua, cidade, estado, pas e CEP, mas um endereo um ponto na Terra e tambm pode ser representado como um par de latitude/longitude. Tecnicamente, um endereo pode compem uma parcela de Terra que pode ser representada como um polgono, mas vamos continuar em um nico ponto nesse caso, apenas para manter a simplicidade. Saber onde um cliente reside como latitude/longitude permite que voc responder perguntas como:

Quais so as ramificaes de bancrio mais prximos trs para um cliente especfico? Que vendedor fica mais prximo ao cliente? Como muitos clientes da sua empresa tem em um raio de 10 metros de, por exemplo, Seattle, Washington?

Como muitos clientes live mais de 2 quilmetros de seu local de filial mais prximo?

O processo de converter um endereo em um par de latitude/longitude chamado endereo geocodificao. Inmeros servios on-line (incluindo MapPoint, Virtual Earth e Google Terra) fornecendo geocodificao como um servio. Para converter um endereo nos EUA para um ponto, voc pode encapsular uma chamada para a geocodificao MapPoint Web Services em uma funo do SQLCLR.

Isso mostrado no exemplo de cdigo . Mas onde voc deve armazenar a latitude/longitude dentro de seu banco de dados do SQL Server?

SQL Server 2008 vem com os dois tipos de dados necessrios para armazenar dados espaciais: geometria e Geografia. Os dois tipos de dados so implementados usando a arquitetura .NET para tipos definidos pelo usurio, que significa que eles podem ter propriedades e mtodos. Vamos continuar com o tipo de dados de Geografia agora porque isso mapeia mais de perto para o problema.

Voc pode definir uma instncia de um tipo de Geografia com uma simples SQL declarao de varivel (DECLARE @g Geografia) ou como uma coluna em uma tabela, e voc pode inicializar este tipo de dados em uma variedade de formas. Para um tipo de Geografia representando uma instncia de um ponto, a maneira mais simples usar o mtodo esttico STPointFromText do tipo Geografia. O mtodo STPointFromText requer no apenas uma representao textual de um ponto de formato de texto conhecidos do Consortium Geospatial abrir (WKT) ou seja, POINT(x,y) mas tambm um identificador de referncia espacial (SRID). O SRID identifica o sistema de referncia espacial usado para um mapeamento round-Terra ou Terra simples e, por enquanto, suficiente saber que o geocoder MapPoint Web service usa coordenadas GPS que correspondem s SRID 4326. Isso representa o 1984 de sistema Geodetic World (WGS 84). Para localizar todos os os SRIDs que oferea suporte ao SQL Server 2008, basta consultar o sys.spatial_reference_systems de tabela de metadados.

Portanto, seu cdigo para inicializar a Geografia do endereo poderia esta aparncia:

DECLARE @addr nvarchar(256) = 'Some sample address, City, State, Zip'; DECLARE @addr_as_xy nvarchar(30); DECLARE @g geography; SET @addr_as_xy = dbo.Geocoder(@addr); SET @g = geography::STPointFromText(@addr_as_xy, 4326);
Observe que como geografia implementada como um tipo de dados baseados no .NET, h alguns pontos interessantes mencionar sobre o cdigo. Em primeiro lugar, STPointFromText um mtodo esttico, para que ela deve ser chamada com a sintaxe datatype::method. Alm disso, os nomes de mtodo de tipos de dados baseados no .NET so distino entre maisculas e minsculas assim, STPointFromText deve usar maisculas e minsculas exata.

H uma coisa mais importante a destacar: a funo geocoder deve ser codificada para retornar o local como "Grficos" em vez de latitude/longitude. Abrir Consortium Geospatial define seu WKB e binrio conhecido (WKB) formata como usar x, y pares de coordenadas. Portanto, o que est sendo no passado para STPointFromText Se deve ser usaria

POINT(Longitude/Latitude),

POINT(Latitude/Longitude).

voc

latitude/longitude em vez disso, SQL Server ser constri instncias de Geografia usando linguagem geogrfico de marcao (GML), um vocabulrio XML que usa latitude/longitude. Ou, se voc tiver um ponto, h um mtodo esttico especial no tipo de dados de geometria que usa trs parmetros: SRID, latitude e longitude.

Agora que voc tiver geocoded suas informaes de cliente, voc pode tambm ir em frente e geocode seu banco ramificar locais (ou outras informaes de escritrio filial, informaes de depsito ou nada relacionados ao local) e seus locais de vendedor, assim. Suponha que voc terminar com tabelas chamadas de cliente, vendedor e ramificao. Cada um deles deve ter uma coluna (vamos cham-lo geog para manter a simplicidade) de Geografia do tipo que indica o local.

Voc pode usar essas informaes para responder s perguntas mencionadas anteriormente. Para isso, voc precisar usar mtodos no tipo de dados Geografia. O mtodo para calcular a distncia entre dois objetos de geografia no surpreendentemente, , chamado STDistance. Os mtodos que pode ser usados para responder pergunta terceira (quantos clientes existem dentro de um raio de 10 metros de Seattle) seria STBuffer e STIntersects. SQL Server tambm tem um mtodo que usado para calcular um buffer mais aproximado chamado BufferWithTolerance (ele um pouco mais rpido do que calcular um buffer exato).

Para responder a primeira pergunta, voc usaria uma consulta semelhante a esta:

SELECT TOP(3) b.name, c.geog.STDistance(b.geog)/1000 [Distance in km] FROM customer c, branch b WHERE c.customerid = '12345' -- this query looks at customer 12345 ORDER BY c.geog.STDistance(b.geog)
A consulta para calcular o vendedor mais prximo deve ser feita em aproximadamente da mesma maneira. Quanto as pessoas que moram dentro de um raio de 10 metros de Seattle? Para esta consulta, voc deve colocar um buffer ao redor dos limites de cidade de Seattle (representado por um polgono dos limites de cidade ou um ponto que voc designa como luzes da cidade de Seattle) e selecione todos os pontos (clientes) que fazem a interseo desse buffer. Representados no cdigo, isso :

-- or declare POINT for "downtown Seattle" -- 1609.344 meters per mile DECLARE @Seattle geography = 'POLYGON(....)'; SELECT c.customerid FROM

customer c WHERE c.geog.STIntersects(@Seattle.STBuffer(10 * 1609.344));


Esses exemplos ilustram pontos mais interessantes sobre como voc interage com instncias do tipo Geografia. Quando voc usa STBuffer, por exemplo, que um mtodo de instncia no tipo de dados de Geografia, voc usar a sintaxe instance.method em vez da sintaxe de type::method que voc poderia usar para mtodos estticos como STPointFromText. Alm disso, observe que, quando voc estiver calculando a distncia entre dois localidades ou determinar se uma instncia de Geografia cruza outra, voc usar a sintaxe Instance1.method(Instance2).

Para responder a pergunta sobre o nmero de clientes que moram mais de dois quilmetros partir da ramificao banco mais prximo, voc deve poder agregar as localidades de todas as ramificaes de banco, com um buffer de dois quilmetros ao redor de cada uma delas e ento olhe para os clientes que no fazem a interseo com esse conjunto de localidades. O tipo de dados de geografia tem um mtodo chamado STUnion, mas ele especificado como um mtodo em uma instncia de Geografia que retorna a unio entre essa instncia e outra instncia.

Isso no a agregao de baseada em conjunto que tinha em mente. Felizmente, o SQL Server 2005 introduziu agregados definidos pelo usurio que podem ser gravados no cdigo do .NET, e voc pode usar um aqui para obter uma unio agregada de um conjunto de valores. Sem entrar muito em aspectos especficos da codificao agregados definidos pelo usurio, eles exigem quatro inicializaes de mtodo: inicializao (inicializao de resposta), encerrar (resposta retorno), Accumulate (chamado para cada linha) e direta (chamado ao mesclar o processamento de vrios threads).

Agregada, o mtodo Accumulate pode simplesmente unir a geografia de linha atual com a geografia resposta sempre que ele chamado. Na verdade, voc no precisa escrever esta agregao mesmo; ele faz parte do Projeto de ferramentas espacial do SQL Server no CodePlex . Este agregado ainda permitir que voc passar em um buffer para cada linha,

que resolve o problema de buffer de dois metros. A consulta, em seguida, pode ser escrita assim:

SELECT COUNT(*) FROM customer c WHERE c.geog.STIntersects( SELECT dbo.GeographyUnionAggregate(b.geog,2*1609.344) FROM branch b)=0
Como voc pode ver, esses exemplos, endereos de geocodificao e armazen-las junto com de formulrio o escritrio de postagem do endereo podem trazer valor comercial para um aplicativo.

ndices espaciais
Depois que sua empresa recebe maior, calcular a distncia entre cada cliente e cada vendedor ou cada cliente e cada filial de banco pode se tornar muito lenta. Suporte a dados espacial do SQL Server 2008 inclui indexao espacial. Os ndices espaciais so ndices de Brvore comuns que devem fazer consultas espaciais executado mais rapidamente, assim como os ndices relacionais no SQL Server fazem consultas relacionais executado mais rapidamente. Mapear dados espaciais bidimensionais para uma rvore B unidimensional realizada por meio de tessellation; que , dividir a rea de backup em subreas pequenas e registrar as subreas que se cruzam cada instncia espacial. Para o tipo de dados a geografia, isso significa que dividir o mundo inteiro em hemispheres e Projetando cada hemisphere em um plano. Cada instncia de Geografia, em seguida, aborda uma ou mais subsees (lado a lado) desse plano; o ndice espacial deve conter uma linha para cada lado que abrange uma instncia. Para o tipo de clculo, porque voc est especificando seu prprio sistema de

coordenadas rectangular, voc pode especificar os limites (caixa delimitadora) que aborda o ndice espacial. H um nmero de regras que determinam como espaciais instncias que interceptam lado a lado mapeado para linhas em um ndice espacial, e voc pode definir bem como o sistema de grade sero ser para o ndice espacial em vrios nveis. Para obter mais informaes sobre as especificaes de ndices espaciais, Manuais online do SQL Server a melhor referncia. Para retornar para o sistema cliente, voc pode definir um ndice espacial na coluna geog na sua tabela de clientes com a seguinte linguagem de definio de dados (DDL):

Copiar Cdigo

CREATE SPATIAL INDEX cust_geog_idx ON dbo.customer(geog) GRIDS =(LEVEL1=HIGH,LEVEL2=HIGH,LEVEL3=HIGH,LEVEL4=HIGH));


Definindo este ndice com uma grade granularidade alta seria melhor para seu ndice porque cada endereo de cliente um ponto, que s apareceria em um quadrado, ao contrrio de linhas ou polgonos, que podem se cruzam muitas peas. Voc deve observar que ndices espaciais so usados somente com certos mtodos espaciais. Atualmente, eles so usados com os seguinte predicados Geografia:

Copiar Cdigo

instance1.STIntersects(instance2) = 1 instance1.STEquals(instance2) = 1 instance1.STDistance(instance2) < number instance1.STDistance(instance2) <= number


Quando voc est lidando com geometria em vez de Geografia, o ndice espacial tambm funciona com o STContains, STOverlaps, STTouches e STWithin mtodos, mas somente quando estiver verificando 1 (verdadeiro). Com base na maneira como os ndices espaciais

trabalha, voc realmente deseja rephrase sua consulta espacial sobre "clientes que moram mais de dois quilmetros de uma ramificao bancria" para contar os clientes que STIntersects retorna True e subtrair esse nmero do nmero total de clientes.

Visualizadores
Observe que nos exemplos alguns que trabalhou por meio de at o momento, seria realmente til ver os dados espaciais em um formulrio diferente de linhas e colunas. Na verdade, talvez voc tenha notado que selecionando o tipo de dados espacial prprio retorna sua representao binria. Usando o mtodo ToString ou o mtodo de STAsText retorna o formato WKB. Que um pouco melhor, mas ele ainda no lhe qualquer idia sobre localizaes geogrficas, a menos que voc pode projeto pares de Latitude/Longitude para um mapa de cabea. Dados espaciais precisam quase sempre um visualizador grfico para torn-lo mais teis e quando voc est falando sobre dados geogrficos, esse visualizador normalmente deve incluir um mapa. SQL Server Management Studio 2008 inclui um visualizador simples sob a forma de uma guia espacial resultados na janela de resultados da consulta. Este visualizador funciona com uma Geografia ou coluna de clculo na consulta resulta e plota os tipos de dados espaciais em uma grade. Se vrias colunas espaciais aparecer no resultado da consulta, voc pode escolher a visualizar. A coluna para ser exibida deve estar no formato binrio do SQL Server; usando ToString() ou STAsText() no funciona com o visualizador. Para um tipo de dados a geografia, voc mesmo obter opes de mapa projees como Mercator ou Equirectangular, mas os dados no sobrepostos em um mapa por padro. Um barata e fcil maneira sobrepor um mapa se voc tiver uma tabela que contm dados da estrutura de tpicos do mapa fazer uma UNION ALL entre o conjunto de linhas e um conjunto de linhas que contm a Geografia do mapa. a Figura 1 mostra pontos que representa um conjunto de mais de 700 cidades do banco de dados Mondial no Visualizador do SQL Server Management Studio. A consulta do SQL Server que gerou a ele foi:

Copiar Cdigo

SELECT geog, name

FROM Mondial.dbo.city WHERE geog IS NOT NULL

Figura 1 um conjunto de linhas de pontos da tabela Mondial banco de dados Cidade


Uma opo ainda melhor usar um visualizador comercial ou shareware que fornece a sobreposio de mapa por padro, como mostrado na Figura 2 . Voc observar que na guia resultados espacial no SQL Server Management Studio mostra um conjunto de registros de mais de 700 pontos com uma sobreposio de mapa. A consulta do SQL Server que produziu-tem esta aparncia:

Copiar Cdigo

SELECT geog, name FROM Mondial.dbo.city WHERE geog IS NOT NULL UNION ALL SELECT geog, cntry_name FROM SpatialSamples.dbo.cntry00

A Figura 2 de um conjunto de linhas de pontos com um mapa de sobreposio


Um visualizador que voc pode usar Geoquery 2008 programa de Craig Dunn. Este um visualizador livre para resultados de consulta do SQL Server 2008 que inclua as projees de mapa e tambm permite que voc escolha a espessura de cor e linha de seus objetos de dados espacial. Voc tambm poderia escrever cdigo para exibir os dados no Microsoft Virtual Earth ou Terra Google, mas que est fora do escopo desta coluna.

O tipo de dados Geometry


Vamos voltar para o outro tipo de dados espacial que eu utilizada no rapidamente, o tipo de dados geometria e Explique onde voc poderia usar geometria em oposio a geografia. O tipo de dados de geometria representa um avio simples com x e y coordenadas, em oposio a geografia que representa latitude e longitude, angles do centro para a superfcie da Terra (coordenadas ellipsoidal). O tipo de dados de geometria pode ser usado para problemas que no precisa levar forma a Terra em considerao, relativamente pequenos superfcies planos, como layouts de escritrio cbica ou depsitos. Quando voc est tentando localizar escritrio retangular um colega de trabalho em baia Terra, no importa a curvatura da Terra, portanto, usando o tipo de dados de geometria e clculos lineares sero suficiente. Quando voc est lidando com a geometria, voc definir a unidade de medida e

o ponto de origem (permitir que 0,0 ser o canto inferior esquerdo de seu depsito, por exemplo). Embora, s vezes, voc pode usar o tipo de clculo para espacial locais a Terra, o processo um pouco mais complicado. Como h um nmero de diferentes maneiras de mapear a Terra para um sistema de coordenadas, e como elas afetam mtodos de clculo como STArea e STDistance, suas instncias de dados espacial precisar especificar um SRID. Se voc estiver usando geometria ou geografia, um SRID necessria. Para o tipo de dados de geometria, se voc tiver obrigadas o sistema de coordenadas e a unidade de medida voc (por exemplo, quando o mapeamento de um layout de escritrio), voc escolheria SRID 0, que especifica um sistema de referncia espacial desconhecido ou local. SRID 0 o padro para o tipo de dados de geometria no SQL Server. Para geografia, importante que voc escolher uma dos SRIDs que SQL Server capaz de usar. SRID 4326 o padro e o que usado por sistemas GPS. Os mtodos geogrficos embutidos no SQL Server podem usam qualquer um dos sistemas de referncia espacial 390 que so enumerados na tabela de metadados do sistema, sys.spatial_reference_systems. Esses sistemas de referncia espacial provenientes o De europeu Petroleum pesquisa grupo (EPSG) registro de parmetro geodetic. No existe EPSG suas funes foram absorver para o grupo de pesquisa Petroleum Europa. Voc pode supor que uma associao de leo e gs produtores seria deseja ter certeza que tenham as posies mais precisas na Terra quando eles v Explorando. Cada SRID no apenas nomes de uma unidade de medida (a maioria dos uso metros), mas tambm incluem uma seqncia de caracteres que especifica uma referncia (conjunto de pontos de referncia na Terra), geoid, sistema de coordenadas e mapear projeo. Para obter mais informaes sobre sistemas de coordenada, voc deve leia do Isaac Kunen white paper" Introduo aos sistemas de Coordinate espacial: mapeamentos simples para um planeta redondo ." Como clculo do SQL Server Geografia tipo de dados sensvel ao SRID que usado, a tentativa de usar mtodos espaciais (por exemplo, distncia e Intersects) entre instncias de tipos espaciais que no tm o mesmo SRID retornar o valor NULL. Falarei mais sobre a converso entre SRIDs posteriormente.

Visualizao espacial
Abordei alguns aplicativos mais bvios para dados espaciais e o fato de que muitas delas use visualizadores para fornecer uma exibio grfica dos dados. Suponha que, em vez de simplesmente usar um mapa dos pases do mundo ou os estados nos EUA, queria visualizar meus dados por Projetando-lo em relao a limites de regio ou correlacion-lo com Distritos congressional ou com dados censitrias? Neste caso, eu poderia ter que adquirir o que eu chamo de "dados de referncia espacial". Dados de referncia espacial podem ser baixados do sites pblicos ou comprados de empresas como Instituto de pesquisa de sistemas ambientais (ESRI) . Observe que a disponibilidade de dados de livre referncia espacial pblica amplamente varia dependendo do local personalizado. Nos EUA, a maior parte os dados que j falamos sobre o, como limites de regio e dados censitrias, mais livremente disponveis do que em muitos outros pases. Portanto, voc j passou fora seu site da Web pblica Favoritos, por exemplo o DOS EUA Do censitrias Bureau Tiger site e arquivos de referncia geogrfica baixados. Mas os arquivos esto no formato ESRI Shapefile, no do SQL Server colunas de Geografia nas tabelas. Como importar esses arquivos para o SQL Server? E muitos arquivos disponveis publicamente usam SRID 4269, no o 4326 SRID seu geocoder emitida. Como voc converter entre SRIDs diferentes para que todos os seus mtodos espaciais no retornar NULL? O problema que precise ser resolvido aqui a mais de um problema de extrao transformao-carga (ETL) que um problema de converso simples. Deseja colocar junto dados no-espaciais como censitrias faixa de nmeros ou valores de populao. E, embora voc poderia (em teoria) transformar os dados entre SRIDs dinamicamente, isso poderia diminuir suas consultas consideravelmente. Isso definitivamente um problema ETL. SQL Server 2008, na verdade, no enviar nada na caixa para ajud-lo aqui. H programas como ferramenta de Shape2SQL do Morten Nielsen que carrega Shapefiles em tabelas do SQL Server. Mas Shapefiles no o somente tipo de espacial do arquivo de terceiros e voc pode desejar executar transformaes entre SRIDs ou outras transformaes mais especializadas. H uma variedade de produtos de terceiros comerciais para especializados em transformaes de dados espacial e em massa carregar. Eles incluem FME SAFE software para o SQL Server, o Extender espacial da coleo para SQL Server e, claro, linha do ESRI de produtos do sistema (GIS) de informaes geogrficas. Elas podem mover dados para SQL

Server ou mover dados do SQL Server para um GIS completa. Com xito usei o produto de software SAFE chamado FME para SQL Server, que inclui uma biblioteca de transformaes, oferece suporte ao quase todos formato de dados espacial e ainda fornece uma srie de componentes para o sistema de ETL do SQL Server: SQL Server Integration Services.

O SQL Server biblioteca dados espaciais


O formato que voc ir escolher usar para mover dados e saia do SQL Server ser dependem necessidades especficas de sua organizao e tambm nas necessidades de seu aplicativo especfico. Tipos de dados do SQL Server intrinsecamente do suporte a formatos WKB e WKT, bem como formato de idioma (GML) de marcao geogrfica. SQL Server expe os tipos de geometria e Geografia e os mtodos associados em uma biblioteca baseados no .NET chamado Microsoft.SqlServer.Types.dll. No s esta biblioteca fornecido com o SQL Server, mas como ele baseado no .NET, voc pode baix-la como parte do SQL Server 2008 Feature Pack e mover os clculos e transformaes para a camada intermediria ou cliente, se necessrio. Tenha em mente que apenas um lado do servidor fornece espaciais ndices para otimizar as consultas de dados espacial. SQL Server, na verdade, est armazenando instncias de classes .NET SqlGeometry e SqlGeography; as classes e os mtodos so intrnsecos para a biblioteca. Voc pode usar mtodos espaciais em consultas do SQL Server ou encapsular as operaes em T-SQL ou procedimentos armazenado do SQLCLR, funes definidas pelo usurio e disparadores. Voc pode estender a funcionalidade bsica usando SqlGeometry e SqlGeography como membros em tipos de definido pelo usurio do .NET e agregados definidos pelo usurio, como o GeographyUnionAggregate que usei anteriormente. A biblioteca de dados espacial tambm inclui um construtor de API que pode ser usada para otimizar o carregamento e de transformaes personalizadas e agregaes. Isso consiste em um SqlGeometryBuilder SqlGeographyBuilder e coletor interfaces (IGeometrySink e IGeographySink) que voc pode usar a construo de otimizado de instncias de dados espacial. Voc implementar uma das interfaces coletor, que permite que voc comear ou terminar nmeros, adicionar linhas e definir o SRID apropriado. Depois dos dados no lugar, voc simplesmente chamar o mtodo popular criem as instncias que voc configurou.

Projetando e implementando armazenamento espacial Dados espaciais representam informaes sobre o local fsico e a forma de objetos geomtricos. Esses objetos podem ser locais de pontos ou objetos mais complexos como pases, estradas ou lagos. O SQL Server oferece suporte a dois tipos de dados espaciais: geometry e geography. Os dois tipos de dados so 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 verso 1.1.0. Dados de geomtricos: 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 disponvel em cada banco de dados. possvel criar colunas de tabelas do tipo geometry e operar em dados de geometry da mesma maneira como outros tipos CLR so 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 representao WKT (Well-Known Text) do Open Geospatial Consortium (OGC) e usa o mtodo STAsText(). Em seguida, duas linhas so inseridas: uma linha que contm uma instncia LineString de geometry e uma linha que contm uma instncia 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 mtodo STIntersection() para retornar os pontos onde as duas instncias 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(); Dados de geogrficos:

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 disponvel em cada banco de dados. possvel criar colunas de tabelas do tipo geography e operar em dados de geography da mesma maneira como outros tipos fornecidos pelo sistema so 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 representao WKT (Well-Known Text) do Open Geospatial Consortium (OGC) e usa o mtodo STAsText(). Em seguida, duas linhas so inseridas: uma linha que contm uma instncia LineString de geography e uma linha que contm uma instncia 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 mtodo STIntersection() para retornar os pontos onde as duas instncias 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();

Lembre-se de que qualquer tipo de dados que voc poder capturar com um sistema GPS pode ser importado e pode ser usado com o restante do seus dados de banco de dados. Com recursos GPS se tornando mais comum em telefones, cmeras, automobiles e outros dispositivos e aparelhos e com muitos sistemas de informao agora contendo dados de endereo, a possibilidade de integrar dados GPS interessantes recursos aqueles que realmente atender s necessidades do usurio realmente ilimitado. Portanto, fique atento para alguns desenvolvimentos interessantes. Bom pessoal, isso, continuaremos nas prximas dicas, apresentando mais informaes, exemplos e demonstrando de forma terica e prtica como podemos utilizar estes tipos de dados, bem como, seus demais recursos. Vou ficando por aqui, agradeo a sua visita. At mais.