Depois de importado o(s) arquivo(s) GPX (XML) pelo SSIS, na Parte 2, será feita uma alteração no projeto, para a inclusão de uma coluna do tipo Geography.
O SQL Server permite trabalhar com tipos de dados espaciais Geometry e Geography, desde a versão 2008.
Usar Geometry ou Geography, vai depender do tipo de dados que o arquivo GPX (XML) está utilizando.
O arquivo GPX (XML) utilizado pelo Strava, gera um conjunto de dados relacionados com pontos em um mapa, devido a isso, o tipo de dado a ser usado nesse caso, será Geography.
Adicionando Tipos de Dados Geográficos no Projeto
Os dados do(s) arquivo(s) GPX (XML), que estão sendo importados do Strava, já possuem Latitude e Longitude, e será preciso adicionar uma coluna extra do tipo geography.
Como adicionar a coluna Geography??
- Delete o Fluxo de dados

- Botão direito do mouse -> delete


- No SSIS Toolbox, acesse a aba Common
- Arraste a Task Script Component para a tela de fluxo de dados (Data Flow), e selecione o tipo Transformation


- Faça a ligação da Task Import Arq XML, com a Task Add Column Geography.

- Selecione o output


- Dê dois cliques na Task Add Column Geography e faça as configurações necessárias, para a inclusão da coluna.

- Em Input Columns, selecione apenas as colunas Lat e Lon.

- Em Inputs and Outputs, selecione Output Columns -> Add Columns, e adicione a coluna location do tipo geography.

- A coluna location vai ser configurada com o Data Type: image[DT_Image].


- É preciso adicionar uma referência ao conjunto CLR que contém a definição para o tipo de coluna geography: Microsoft.SqlServer.Types, passando o caminho da DLL(caminho do sql server) , para ser referenciado.
- C:\Program Files\Microsoft SQL Server\120\Shared

Como fazer essa referência?
- Dê dois cliques na Task Add Column Geography – > Edit Script


- Procurar pelo browse o caminho da DLL citada acima.

- Clique em ok, e a referência criada já aparece na Solution Explorer

Após criada a referencia, é necessário alterar o script para adicionar a coluna geography a cada linha.
- Adicionar no campo #region Namespaces:
- using Microsoft.SqlServer.Types;
- using System.IO;
- using System.Data.SqlTypes;

Altere o script da seguinte forma:
- Adicione no método public class ScripMain: UserComponent:
{private MemoryStream ms;
private BinaryWriter bw;}

- Adicione no public override void PreExecute{}
- ms = new MemoryStream(10000);
- bw = new BinaryWriter(ms);

- Adicione no metodo public override void Input0_ProcessInput(Input0Buffer Row)
// Create a SqlGeography object representing the given data
SqlGeography g = SqlGeography.Point((double)Row.lat, (double)Row.lon, 4326);
// Serialize to a memory stream
ms.SetLength(0);
g.Write(bw);
bw.Flush();
// Copy data from memory stream to output column with DT_IMAGE format
Row.location.AddBlobData(ms.GetBuffer(), (int)ms.Length);

Download do script alterado.script
Depois de alterado, salve o script e feche.
Ao voltar no Data Flow a Task Add Column Geography já aparece com a conexão ok.

O próximo passo é fazer a conexão da Task Import Arq XML, com a adição da coluna geography na tabela destino Table GPX_Data.

- Obs: Pode alterar a tabela criada GPX na parte 2, incluindo a coluna location do tipo geography, ou criar uma nova tabela GPX_Data, conforme abaixo.
(Foi deletada a coluna GPX). - Dê dois cliques na Task Table GPX_Data e configure-a.

- Selecione new, para criar uma nova tabela já com a coluna location adicionada, e troque o tipo da mesma de varbinary(max) para geography.

- Clique em OK, vá em mappings e faça o mapeamento das colunas: origem com destino. Clique em OK.

- Abra o SSMS, selecione o banco no qual foi criada a tabela acima e execute o comando abaixo:
- SELECT *FROM GPX_Data
- A tabela veio sem registros, pois ainda não foi feita a importação dos dados.

Ao dar o select na tabela acima criada com a coluna location, aparece abaixo uma aba chamada resultados espaciais.

- Depois de todo o processo feito, é hora de executar o pacote, ou seja, de fazer a importação dos dados do arquivo origem GPX (XML) para a tabela do SQL Server (GPX_Data).
- Com o mouse direito, de dois cliques em cima de SSIS Packages -> Execute Package

Ao executar o pacote, se toda a configuração para a importação do arquivo de origem foi feita corretamente, o SSIS irá fazer a importação para a tabela destino!

- A importação dos dados foi realizada com sucesso!!
- Abra o SSMS, dê um select na tabela e visualize os dados importados.

No Monitoramento das atividades Físicas com o Power BI – Parte 4 – , iremos fornecer os dados de localização real do país, através do Shapfile Brasil, para cada um dos pontos existentes no arquivo GPX (XML).