Ir para Pesquisa
 
Ir para o conteúdo principal

Blog do MIC BH

MIC BH
Sobre o MIC BH
Serviços
Pesquisa
Programas Apoiados
Como Participar
Eventos
Contato
Microsoft SOL

Outros Blogs
Não há itens nesta lista.
MIC BH > Blog do MIC BH
Tutorial - SQL Server 2008: Dados espaciais & Web

Introdução

Objetivo

Este tutorial possui como objetivo permitir a real integração entre os componentes de dados espaciais providos pela ferramenta Microsoft SQL Server 2008, com páginas da Web de forma dinâmica.

Para completar o tutorial, é necessário que haja um conhecimento prévio das seguintes áreas:

  • ASP.NET
  • SQL SERVER 2008
  • T-SQL
  • AJAX

Não sendo necessário entretanto, conhecimentos avançados dos mesmos, pois o tutorial irá prover códigos fontes completos para melhor assimilação.

Este tutorial tem por objetivo representar um dos modos de exibição dos dados, não representando porém, a única ou melhor opção para atingir este propósito.

Componentes necessários

Para execução do tutorial, alguns componentes Microsoft e externos serão necessários, segue abaixo os mesmos:

  • Microsoft SQL Server 2008
  • Microsoft Visual Studio 2008
  • SharpMap v0.9 ou superior
  • Base de dados espaciais*

É recomendado que se utilize a última versão de cada um dos componentes, incluindo suas devidas atualizações (Services Pack).

* Qualquer base de dados pode ser utilizada para realização do tutorial, entretanto, recomenda-se a utilização da mesma base de dados que pode ser encontrada aqui.

Descrição dos componentes

Cada componente descrito no tópico anterior possuí uma parte fundamental no desenvolvimento do tutorial, para melhor entender isso, segue abaixo uma breve descrição de cada um deles.

Microsoft SQL Server 2008

A versão 2008 do SQL Server introduziu um novo conceito ainda não presente nativamente nas versões anteriores, o conceito de dados espaciais. Com base neste novo conceito, o nosso tutorial utiliza esta ferramenta para definição, criação e armazenamento das bases de dados espaciais que serão utilizadas para exibição.

Microsoft Visual Studio 2008

A parte Web do tutorial será desempenhada por esta ferramenta, criaremos páginas ASP.NET, Handlers, e classes em C# com o objetivo de exibir corretamente os dados espaciais armazenados.

SharpMap

Responsável pela integração entre uma fonte de dados (SQL, ShapeFile, Descritiva) e a página da Web ASP.NET. No nosso tutorial, vai ser o responsável por receber uma datasource do SQL Server 2008, e exibi-la em uma página criada pelo Visual Studio 2008.

Definindo a base de dados

A definição da base de dados encontrada no tutorial segue o seguinte diagrama:

Diagrama Conceitual

Entretanto, conforme mencionado na parte de componentes, a base de dados inteira e populada pode ser baixada diretamente aqui.

Para importar a base, abra o SQL Server -> Clique com o botão direito em Databases -> Restore Database..-> Nomeie a base de dados -> Escolha a opção From Device.. -> Selecione o caminho da base .

Terminado o processo de importação ou criação, temos uma base de dados que possui vários campos geométricos (ou espaciais) os quais serão o foco do desenvolvimento posteriormente. 

Calculando os dados necessários

O SharpMap necessita de alguns dados para correta exibição do mapa, contando ao todos 5 campos. São eles:

  • Envelope_MinX
  • Envelope_MaxX
  • Envelope_MinY
  • Envelope_MaxY
  • GeometryWKB

Os quatro primeiros campos, representam as extremidades da região geométrica de cada entrada da tabela que contém dados espaciais. O último dado GeometryWKB nada mais é do que a representação binária do polígono.

Tais valores podem ser calculados utilizando funções próprias do SQL Server 2008. As funções utilizadas serão:

·          STEnvelope()

·          STPointN()

·          STAsBinary()

Para calcular os valores das extremidades de cada polígono, primeiro geramos um quadrilátero que engloba o polígono original, para isso será utilizada a função STEnvelope(). Feito isso, extraímos deste quadrilátero as 2 coordenadas que representam as suas extremidades. Com isso teriamos:

  • poligono.STEnvelope().STPointN(1) = pontos X e Y inferiores do polígono;
  • poligono.STEnvelope().STPointN(3) = pontos X e Y superiores do polígono;

Por fim, para extrairmos os pontos X e Y citados acima, utilizamos a função STX que retorna a coordenada X de um ponto, e STY que retorna a coordenada Y. Com isso, podemos calcular todos os campos necessários conforme descrito abaixo:

  • poligono.STEnvelope().STPointN(1).STX = Envelope_MinX
  • poligono.STEnvelope().STPointN(1).STY = Envelope_MinY
  • poligono.STEnvelope().STPointN(3).STX = Envelope_MaxX
  • poligono.STEnvelope().STPointN(3).STY = Envelope_MaxY
  • poligono.STAsBinary() = GeometryWKB

A última função STAsBinary() converte o polígono em dados binários que serão lidos pelo SharpMap.  

Definindo Views com os dados necessários

No tópico anterior calculamos todos os valores necessários para cada polígono. Temos duas opções a partir de agora, gravar estes dados fisicamente no banco de dados ou definirmos Views que conterão estes dados. No nosso tutorial, utilizamos views com o objetivo de não poluir o nosso banco de dados original e economizar espaço de armazenamento.

No exemplo abaixo, definimos a tabela de município para criação da View correspondente. Lembrando que o nome dos campos tem que seguir o mesmo do exemplo abaixo:

CREATE VIEW [dbo].[VW_MUNICIPIO] as

SELECT codMunicipio as codigo,nome_Municipio as nome,

poligono.STEnvelope().STPointN(1).STX as Envelope_MinX,

poligono.STEnvelope().STPointN(1).STY as Envelope_MinY,

poligono.STEnvelope().STPointN(3).STX as Envelope_MaxX,

poligono.STEnvelope().STPointN(3).STY as Envelope_MaxY,

poligono.STAsBinary() as GeometryWKB

FROM TB_MUNICIPIO

Esta View possui todos os dados necessários (e alguns extras como código, nome) para correta exibição do mapa pelo componente SharpMap.

Criando um novo projeto

A partir deste momento, utilizaremos o Visual Studio 2008 onde criaremos um projeto Web que possuirá as classes de controle e de exibição dos dados geométricos.

Para iniciar um novo projeto, abra o Visual Studio, clique em File -> New Website -> ASP.NET Website -> Language - Visual C# -> Selecione a pasta raiz -> Clique OK.

Feito isso, possuimos um website com os arquivos Default.aspx, Default.aspx.cs, e web.config. Sendo que os 2 primeiros serão utilizados para exibição, e o segundo contem informações cruciais para o site como as referências utilizadas pelo mesmo. 

Importação dos componentes

Conforme citado anteriormente, teremos 3 componentes principais que necessitam ser integrados, sendo que o Visual Studio e o SQL Server já são integrados por padrão não necessitando realizar nenhuma intervenção.

Será necessário a integração manual do componente SharpMap. Para realizar tal, utilizaremos os arquivos binários já compilados disponibilizados pelos desenvolvedores do componente em forma de DLL's que pode ser obtido aqui.

De posse dos arquivos binários, para realizar a importação, clique com o botão direito no seu projeto (em negrito) -> Add Reference -> Browse -> Selecione os arquivos SharpMap.dll e SharpMapUI.dll. Os mesmos e outros 2 arquivos XML serão adicionados a pasta Bin do seu projeto.

Para adicionar o componente na toolbox do Visual Studio, clique com o botão direito em um espaço vazio da toolbox -> Choose Itens -> Browse -> Selecione o arquivo SharpMapUI.dll.    

Classes de controle

Agora que já possuímos a estrutura do projeto, vamos começar a adicionar as classes de controle. Tais classes serão responsáveis pela criação e manutenção da exibição do mapa em uma interface Web. No nosso projeto, temos duas classes com este objetivo:

  • MapHandler.ashx - Responsável por atualizar em tempo real (AJAX) o mapa;
  • MapLoader.cs - Responsável por criar o mapa inicial;

Adicione as duas classes acima ao seu projeto, clicando com o botão direito na raiz do projeto (em negrito) -> Add Existing Item.. -> Selecione as classes. Feito isso as duas classes já estão importadas ao seu projeto.

Ambas classes já estão devidamente comentadas, de forma que para entender seu funcionamento basta analisar seu código fonte e seus comentários. Lembrando que as classes podem ser modificadas de acordo com o objetivo do usuário. 

Pagina de exibição

No tópico anterior adicionamos as classes responsáveis por criar e manusear o mapa, nos restando apenas exibi-lo no nosso WebSite. Para isso, conforme mencionado anteriormente, utilizaremos a nossa página Default.aspx, criada automaticamente ao iniciar o projeto.

Na toolbox do Visual Studio, procure o componente AjaxMapControl. Se não conseguir encontrar, repita o passo Importação de componentes. Arrase o componente para o corpo da sua página e defina o tamanho a seu critério. Escolha o nome para o componente (padrão ajaxMap1), no exemplo o nome foi: ajaxMap.

Abra o codebehind (Default.aspx.cs), e dentro da função Page_Load, adicione as linhas abaixo, execute o projeto e verifique o resultado.


//Inicializa o mapa com tamanho padrão

ajaxMap.Map = MapLoader.carregarMapa(new System.Drawing.Size(10, 10));

if (!Page.IsPostBack && !Page.IsCallback)

{

//Carrega o mapa com as opes de zoom, e localizao inicial

ajaxMap.Map.Center = new SharpMap.Geometries.Point(-44.193, -18.350);

ajaxMap.FadeSpeed = 10;

ajaxMap.ZoomSpeed = 10;

ajaxMap.Map.Zoom = 20;

}

ajaxMap.ResponseFormat = "maphandler.ashx?MAP=Padrao&Width=[WIDTH]&Height=[HEIGHT]&Zoom=[ZOOM]&X=[X]&Y=[Y];"

 

Exemplos

Exemplo - Tutorial     

O código fonte do projeto que foi desenvolvido ao longo deste tutorial pode ser encontrado nesta seção.

Lembrando que para o correto funcionamento do mesmo, é necessário importar a base de dados disponibilizada no início do tutorial em um SQL Server. A classe mapLoader.cs contem os dados de conexão com o SQL Server, contendo informações como localização, usuário e senha que devem ser alterados de acordo com o ambiente de execução do projeto.

Exemplo - SharpMap

O componente SharpMap possui um tutorial rico em informações, que é disponibilizado gratuitamente pelos desenvolvedores.

A diferença principal é fato de que não utiliza fontes de dados SQL, e sim arquivos ShapeFile, que são incluídos no tutorial. Este tutorial foi retirado do site principal dos desenvolvedores onde também pode ser encontrado na versão VB.NET.

Download do tutorial

Os arquivos necessários para executar este tutorial se encontram disponíveis aqui.

Referências

SharpMap - CodePlex
SharpMapV2 - GoogleCode
SQL Server 2008 - MSDN
Geometria T-SQL - MSDN

Tutorial criado por Kleber e Milton.

 Links Administrativos

 
Centro de Inovação Microsoft - Belo  Horizonte - PUC Minas
Rua Walter Ianni, 255 Bloco E – Salas 101 e 102 São Gabriel Belo Horizonte / MG CEP: 31980-110 31 3439-5217
Contato: micbh@pucminas.br