Google Maps in QlikView

来源:互联网 发布:小照域名授权源码2.9 编辑:程序博客网 时间:2024/06/04 19:36

在看了一篇Google Map 和 QlikView10 整合的文章,决定自己实践一下熟悉一下这个流程。由于原文是西班牙语,所以没有逐句翻译,只是明白大体流程后,将我自己做的流程写下来,流程如下:

 

1. 打开QlikView 10(下载地址) 通过 File->Edit Script将以下代码贴到原有代码的下方。点击File—>Reload,加载数据。

Js代码 复制代码
  1. SET DecimalSep='.';   
  2.   
  3. // Google Maps en QlikView   
  4. // Google Maps Key. Obten la tuya en http://code.google.com/apis/maps/signup.html  
  5. gmap_key = 'xx';   
  6. max_zoom_level = 4; //valor máximo = 17   
  7.   
  8. // Variables requeridas para calcular mapa  
  9. var_pi180=      '=pi()/180';   
  10. var_lat_offset= '0';   
  11.   
  12. var_mid_lat=    '=min(latitude)+(1+var_lat_offset)*((max(latitude)-min(latitude))/2)';   
  13. var_mid_long=   '=min(longitude)+(max(longitude)-min(longitude))/2';   
  14. 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,1),_zoom_level))';   
  15. var_maptype=    '=if(isnull(only(maptype)),fieldvalue( '&chr(39&'maptype'&chr(39)&', 1 ),maptype)';   
  16. map_size_x=         '350';   
  17. map_size_y=     '350';   
  18. var_mc2=        '=256*pow(2,$(var_zoom))';   
  19. var_mc1=        '=256*pow(2,($(var_zoom)-1))';   
  20. SET HidePrefix='_' ;   
  21.   
  22. // Campo Requerido para calcular el mejor nivel de zoom  
  23. _zoom_level:   
  24. Load RecNo( ) as _zoom_level autogenerate(max_zoom_level);   
  25.   
  26. maptype:   
  27. LOAD * INLINE [   
  28. maptype   
  29. roadmap   
  30. mobile   
  31. satellite   
  32. terrain   
  33. hybrid   
  34. ];   
  35.   
  36. Data:   
  37. LOAD * INLINE [   
  38. ciudad,poblacion,latitude,longitude   
  39. Arica,189692,-32.7648852,-71.1963079   
  40. Iquique,286105,-20.2440725,-70.1385651   
  41. Antofagasta,547933,-23.6239214,-70.4016127   
  42. Copiapó,272402,-27.3753215,-70.3285281   
  43. La Serena,6773,-29.9069352,-71.2470754   
  44. Valparaíso,1682005,-33.0504619,-71.6164515   
  45. Santiago,6607805,-33.4253598,-70.5664659   
  46. Rancagua,84912,-34.1620308,-70.7410124   
  47. Talca,975244,-35.4227130,-71.6565138   
  48. Concepción,1982649,-36.8148146,-73.0292574   
  49. Temuco,937259,-38.7270296,-72.5989468   
  50. Valdivia,373712,-39.8274322,-73.2512409   
  51. Puerto Montt,794529,-41.4543039,-72.9925047   
  52. Coihaique,100417,-45.5637560,-72.0646866   
  53. Punta Arenas,156502,-53.1478563,-70.9066254   
  54. ];  

 

 

 

2.在QlikView的Main Sheet 面板中右键 新建一个Chart 选择Scatter Chart。然后点击完成,这时这个Chart 还什么数据都没有,所以在Chart右键 属性切换到Dimension面板上,插入一个Dimension——-Ciudad,完成后点击应用。

 

 

3.切换到Expressions的设置面板,先勾选上左下角的Advanced Mode,切换到如下图的编辑模式。

要添加四个Expressions。分别如下:

  1. longitude

    • Definition: =avg( round (256*pow(2,($(var_zoom)-1)))+( longitude  *((256*pow(2,$(var_zoom)))/360)) )
    • backgroud color: =argb(180,round(550*poblacion/max(total poblacion)),0,80)
  2. latitude
    • Definition: =avg(((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())))))
  3. poblacion 
    Definition: poblacion
  4. ciudad
    Definition: ciudad

 前两个的定义值填入上述的公式,后面两个就填上两个字段名就好了。完成后点击应用。

 

 

4. 切换到定义Axes的界面,将下面的值填入相应的文本框中。

 

  • Escala Eje X
  • Min Estático: =((256*pow(2,($(var_zoom)-1)))+( var_mid_long *((256*pow(2,$(var_zoom)))/360)) -round(map_size_x/2))
  • Max Estático: =((256*pow(2,($(var_zoom)-1)))+( var_mid_long *((256*pow(2,$(var_zoom)))/360)) + round(map_size_x/2)-15)

     

  • Escala Eje Y
  • Min 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))
  • Max 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)

     

    5.最后一步很关键,切换到Colors面板 中面板的左中部有一个Frame Background,选中其中的一个Dynamic Image,填入以下的公式。完成后点击应用,这时就能看到效果了。Qlikview版本不同效果也有些不同。

    Js代码 复制代码
    1. ='http://maps.google.com/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='&gmap_key & '.jpg'   

    6.再可以添加些其他Object,最后效果图如下。

    原文地址:http://www.webmining.cl/2011/02/google-maps-en-qlikview/

  • 原创粉丝点击