[Desenvolvimento] Qlikview e Google Maps (Atualizado 2013)

Foi publicado recentemente aqui no blog sobre o problema do Google Maps quando é feito a migração para o Qlikview 10, mas acredito que muitas pessoas ainda não sabem como integrar o Google Maps ao Qlikview, então vamos aprender como fazer isso.

Esse é um processo um pouco avançado, uma pessoa que está iniciando no Qlikview pode encontrar dificuldades em criar este exemplo, mas procurei descrevê-lo da maneira mais simples possível e com muitas imagens para facilitar a compreensão.

A primeira coisa que precisamos saber é: O Google Maps trabalha com latitudes e longitudes, então você precisa ter esses dados para conseguir montar o seu QVW.

Por exemplo: você possui uma lista de cliente é quer analisá-los de acordo com a região onde cada um está. Então você precisa da Latitude e Longitude para informar onde estão seus clientes.

Então vamos começar criando o nosso QVW.
Crie um novo QVW e salve-o.

Vou colocar um script de exemplo,você pode colocar as informações de seus Clientes, lembre-se, é necessária a Latitude e Longitude no seu script. (Meu script é um exemplo simples).

Script Google Maps

LOAD * INLINE [
ID, Cidade, Região, latitude, longitude, Valor
1, São Paulo, Republica, “-23,54198”, “-46,63503”, 10
2, São Paulo, Vila Guilherme, “-23,50198”, “-46,60503”, 10
];

Agora vamos tratar do Google Maps.

Recomendo criar uma nova aba no seu Script chamada Google Maps.
Copie o Script abaixo para o seu Script.

// Google Maps in QlikView
// Google Maps Key
// get a key here http://code.google.com/apis/maps/signup.html
gmap_key = ‘xx’;
max_zoom_level = 17;
//maximum value 17
// Variables required for calculating map
// No need to change these
var_pi180= ‘=pi()/180’;
var_lat_offset= ‘0’;
var_mc2= ‘=256*pow(2,$(var_zoom))’;
var_mc1= ‘=256*pow(2,($(var_zoom)-1))’;
var_mid_lat= ‘=min(latitude)+(1+var_lat_offset)*((max(latitude)-min(latitude))/2)’;
var_mid_long= ‘=min(longitude)+(max(longitude)-min(longitude))/2’;
var_zoom= ‘=max(aggr(if(max( round(256*pow(2,(_zoom_level -1)))+( longitude *((256*pow(2,_zoom_level ))/360)) )-min( round(256*pow(2,(_zoom_level -1)))+( longitude *((256*pow(2,_zoom_level ))/360)) ) <map_size_x AND max((256*pow(2,(_zoom_level-1)))+((0.5*log((1+(sin((latitude)*pi()/180)))/(1-(sin((latitude)*pi()/180)))))*((-256*pow(2,_zoom_level))/(2*pi()))))-min((256*pow(2,(_zoom_level-1)))+((0.5*log((1+(sin((latitude)*pi()/180)))/(1-(sin((latitude)*pi()/180)))))*((-256*pow(2,_zoom_level))/(2*pi()))))<map_size_y,_zoom_level,null()),_zoom_level))’;

var_maptype= ‘=if(isnull(only(maptype)),fieldvalue( ‘&chr(39)&’maptype’&chr(39)&’, 1 ),maptype)’;

//Você pode mudar esses valores
map_size_x= ‘640’;
map_size_y= ‘400’;

SET HidePrefix=’_’ ;
// Field required for calcualting best zoom level
_zoom_level:

Load RecNo( ) as _zoom_level autogenerate(max_zoom_level);
//Map Type define qual tipo de mapa será exibido no gráfico.

maptype:
LOAD * INLINE [
maptype
roadmap
mobile
satellite
terrain
hybrid
];

Pronto.

Com Script concluído faça o Reload do Documento.
Agora vamos criar o gráfico com o mapa do Google de fundo.
Crie um novo objeto de gráfico e escolha o Gráfico de Dispersão.

Escolha o gráfico de Dispersão

Escolha a sua dimensão.

Escolha a dimensão

Agora vamos criar as expressões, é agora que vamos precisar das latitudes e longitudes pois são elas que vão definir as posições das bolinhas no gráfico.

Entre na aba Expressões.

Expressões

Longitude:

=sum( round (256*pow(2,($(var_zoom)-1)))+( longitude *((256*pow(2,$(var_zoom)))/360)) )

Latitude:

=sum( ((256*pow(2,($(var_zoom)-1)))+((0.5*log((1+(sin((latitude)*pi()/180)))/(1-(sin((latitude)*pi()/180)))))*((-256*pow(2,$(var_zoom)))/(2*pi())))))

Valor (define o tamanho da bolinha no gráfico):
=sum( Valor )

Agora vamos classificar as bolinhas no gráfico.

Acesse a aba Classificar.

Classificar

Em “Classificar por” escolha expressão e coloque a expressão que você colocou na expressão “Valor”.

Vamos criar os limites do gráfico.
Acesse a aba “Eixos”.

Configurações dos eixos

No Eixo X:

Mínimo estático:

(256*pow(2,($(var_zoom)-1)))+( var_mid_long *((256*pow(2,$(var_zoom)))/360)) -round(map_size_x/2)

Maximo estático:

( (256*pow(2,($(var_zoom)-1)))+( var_mid_long *((256*pow(2,$(var_zoom)))/360)) + round(map_size_x/2)-15)

No Eixo Y:

Mínimo estático:

((256*pow(2,($(var_zoom)-1)))+((0.5*log((1+(sin(var_mid_lat*pi()/180)))/(1-(sin(var_mid_lat*pi()/180)))))*((-256*pow(2,$(var_zoom)))/(2*pi())))+round(map_size_y/2))

Maximo estático:

((256*pow(2,($(var_zoom)-1)))+((0.5*log((1+(sin(var_mid_lat*pi()/180)))/(1-(sin(var_mid_lat*pi()/180)))))*((-256*pow(2,$(var_zoom)))/(2*pi())))-round(map_size_y/2)+15)

Nos dois eixos desmarque a opção Forçar 0.
Nos dois eixos marque a opção Ocultar Eixos.

 

Atualização !
O Google fez uma alteração em sua API e por isso os mapas configurados antes de 2013 não estão funcionando.
A expressão abaixo foi corrigida para esta nova API do Google Maps.

 

Agora vamos definir a imagem do Google como plano de fundo no gráfico.

Acesse a aba “Cores”.

Imagem dinâmica

Em “Fundo da Moldura” selecione a opção “Imagem Dinâmica” e coloque a seguinte expressão (Atualizado 2013):

=’http://maps.google.com/maps/api/staticmap?center=’
&
num(var_mid_lat, ‘##############’, ‘.’, ‘,’ )
&
‘,’
&
num(var_mid_long, ‘##############’, ‘.’, ‘,’ )
&
‘&zoom=$(var_zoom)’
&
‘&maptype=’&var_maptype
&
‘&size=’&map_size_x&’x’&map_size_y
&
‘&key=’& ‘AIzaSyAABZIVacmXaH_m5XNM2PzcJo3uDr12Rzk’ & ‘&sensor=false’

Agora vamos configurar o tamanho da nossa tabela

Vá até a aba titulo e coloque as informações de altura e largura.

Nosso Script o padrão é 640×400 você pode mudar essa configuração alterando as linhas abaixo no seu script:

map_size_x= ‘640’;
map_size_y= ‘400’;

Configurações de altura e largura

Pronto, essas são as configurações necessárias para integrar o Google Maps ao Qlikview.

Clique em OK e o mapa do Google com os dados de seus clientes devem aparecer no gráfico como na imagem abaixo.

Qlikview w Google Maps

Gostaria de pedir um grande favor para as pessoas que estão lendo este post e estão fazendo os procedimentos descritos nele.
Façam comentários sobre a dificuldade, dúvidas, problemas, se funcionou de primeira, enfim informem o que aconteceu para que eu possa ajudá-los e melhorar os artigos do Blog.