Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Google Maps en Qlikview

Buenas Tardes.

Ya tengo la aplicacion QV toda desarrollada, pero quiero mostrar el TOTAL_VENTAS por PAIS con Google maps, pero no he podido llevar a acabo esto.

Alguien que me pueda ayudar con esto.

Muchas Gracias

1 Solution

Accepted Solutions
Not applicable
Author

Buenos días Handry,

Es posible mostrar mapas en la aplicación QV sin necesidad de hacer uso de extensiones. Se puede trabajar directamente contra el API de Google Maps. A continuación detallo el escenario y los pasos a seguir para llevarlo a cabo. He incluido una aplicación con el ejemplo que espero que te sirva de ayuda.

Escenario: Pintaremos puntos en el mapa en base a una serie de longitudes y latitudes. El tamaño del símbolo incrementará o decrementará en función del valor de un indicador. También se modifica el color del símbolo en base a su correlación con el resto de símbolos mostrados.

Pasos a seguir:


1.- Copiar el script necesario para que funcione el mapa.

//Es necesario modificar el separador decimal para trabajar correctamente con los mapas
SET DecimalSep='.';

// Google Maps en QlikView
gmap_key = 'xx';
max_zoom_level = 17; //valor máximo = 17
// Variables requeridas para calcular mapa
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,1),_zoom_level))';
var_maptype= '=if(isnull(only(maptype)),fieldvalue( '&chr(39)&'maptype'&chr(39)&', 1 ),maptype)';
map_size_x=     '500';
map_size_y=     '500';

SET HidePrefix='_' ;

// Campo Requerido para calcular el mejor nivel de zoom
_zoom_level:
Load RecNo( ) as _zoom_level autogenerate(max_zoom_level);

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

 

2.- Crear un nuevo Gráfico de Dispersión.

     2.1. General: Seleccionar Gráfico de Dispersión.

     2.2. Dimensiones: Seleccionamos la dimensión que queremos colocar en el mapa. En este caso, Ubicación.

     2.3. Expresiones: El orden de las expresiones es representativo.

          2.3.1. La primera expresión es la que indica la posición del eje x en la que se dibujará el símbolo.

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

Hay que modificar la propiedad Color de Fondo de esta expresión. El objetivo es

        • La ubicación con mayores ventas aparece en Verde.
        • La ubicación con menores ventas aparece en Rojo.
        • Las ubicaciones con ventas intermedias aparecen en el color degradado correspondiente entre Verde y Rojo en base a las ubicaciones con mayores y menores ventas.

Color de Fondo =colormix1((sum(importe) - v_min) / (v_max - v_min), argb(180, 255, 0, 0), argb(180, 0, 255, 0))

          2.3.2. La segunda expresión es la que indica la posición del eje y en la que se dibujará el símbolo.

Latitud =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())))))

          2.3.3. La tercera expresión es la que indica el tamaño del símbolo.

Ventas =sum(importe)

          2.3.4. Ponemos una cuarta expresión porque queremos que al colocar el ratón sobre uno de los símbolos se nos muestre el valor de las ventas en un popup.

Popup_Ventas = ubicacion & Chr(10) & 'Ventas = ' & sum(importe)

     2.4. Presentación: Eliminar Etiquetas Emergentes (no queremos ver los datos de Longitud y Latitud en el popup).

     2.5. Ejes:

          2.5.1. Eje x: Eliminar Forzar a 0 y seleccionar Ocultar eje.

          2.5.2.  Escala x Min Estático=((256*pow(2,($(var_zoom)-1)))+( var_mid_long *((256*pow(2,$(var_zoom)))/360)) -round(map_size_x/2))

          2.5.3.  Escala x Max Estático=((256*pow(2,($(var_zoom)-1)))+( var_mid_long *((256*pow(2,$(var_zoom)))/360)) + round(map_size_x/2))

          2.5.4. Eje y: Eliminar Forzar a 0 y seleccionar Ocultar eje.

          2.5.5. Escala 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))

          2.5.6. Escala y 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))

     2.6.     Colores: Imagen dinámica

='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'



View solution in original post

4 Replies
Not applicable
Author

De manera nativa Qlikview no permite poder realizar este tipo de operaciones, para ello tendrás que recurrir a extensiones especificas de mapping. GeoQlik es posiblemente  la mas popular aunque no es la única.

En la comunity podrás encontrar diversas soluciones para llevar a cabo este tipo de representaciones.

Not applicable
Author

Buenos días Handry,

Es posible mostrar mapas en la aplicación QV sin necesidad de hacer uso de extensiones. Se puede trabajar directamente contra el API de Google Maps. A continuación detallo el escenario y los pasos a seguir para llevarlo a cabo. He incluido una aplicación con el ejemplo que espero que te sirva de ayuda.

Escenario: Pintaremos puntos en el mapa en base a una serie de longitudes y latitudes. El tamaño del símbolo incrementará o decrementará en función del valor de un indicador. También se modifica el color del símbolo en base a su correlación con el resto de símbolos mostrados.

Pasos a seguir:


1.- Copiar el script necesario para que funcione el mapa.

//Es necesario modificar el separador decimal para trabajar correctamente con los mapas
SET DecimalSep='.';

// Google Maps en QlikView
gmap_key = 'xx';
max_zoom_level = 17; //valor máximo = 17
// Variables requeridas para calcular mapa
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,1),_zoom_level))';
var_maptype= '=if(isnull(only(maptype)),fieldvalue( '&chr(39)&'maptype'&chr(39)&', 1 ),maptype)';
map_size_x=     '500';
map_size_y=     '500';

SET HidePrefix='_' ;

// Campo Requerido para calcular el mejor nivel de zoom
_zoom_level:
Load RecNo( ) as _zoom_level autogenerate(max_zoom_level);

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

 

2.- Crear un nuevo Gráfico de Dispersión.

     2.1. General: Seleccionar Gráfico de Dispersión.

     2.2. Dimensiones: Seleccionamos la dimensión que queremos colocar en el mapa. En este caso, Ubicación.

     2.3. Expresiones: El orden de las expresiones es representativo.

          2.3.1. La primera expresión es la que indica la posición del eje x en la que se dibujará el símbolo.

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

Hay que modificar la propiedad Color de Fondo de esta expresión. El objetivo es

        • La ubicación con mayores ventas aparece en Verde.
        • La ubicación con menores ventas aparece en Rojo.
        • Las ubicaciones con ventas intermedias aparecen en el color degradado correspondiente entre Verde y Rojo en base a las ubicaciones con mayores y menores ventas.

Color de Fondo =colormix1((sum(importe) - v_min) / (v_max - v_min), argb(180, 255, 0, 0), argb(180, 0, 255, 0))

          2.3.2. La segunda expresión es la que indica la posición del eje y en la que se dibujará el símbolo.

Latitud =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())))))

          2.3.3. La tercera expresión es la que indica el tamaño del símbolo.

Ventas =sum(importe)

          2.3.4. Ponemos una cuarta expresión porque queremos que al colocar el ratón sobre uno de los símbolos se nos muestre el valor de las ventas en un popup.

Popup_Ventas = ubicacion & Chr(10) & 'Ventas = ' & sum(importe)

     2.4. Presentación: Eliminar Etiquetas Emergentes (no queremos ver los datos de Longitud y Latitud en el popup).

     2.5. Ejes:

          2.5.1. Eje x: Eliminar Forzar a 0 y seleccionar Ocultar eje.

          2.5.2.  Escala x Min Estático=((256*pow(2,($(var_zoom)-1)))+( var_mid_long *((256*pow(2,$(var_zoom)))/360)) -round(map_size_x/2))

          2.5.3.  Escala x Max Estático=((256*pow(2,($(var_zoom)-1)))+( var_mid_long *((256*pow(2,$(var_zoom)))/360)) + round(map_size_x/2))

          2.5.4. Eje y: Eliminar Forzar a 0 y seleccionar Ocultar eje.

          2.5.5. Escala 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))

          2.5.6. Escala y 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))

     2.6.     Colores: Imagen dinámica

='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'



Not applicable
Author

Es una buena solución, pensaba que ser refería a alguna solución mas ad hoc, como el caso del conector para ESRI ARC GIS, o el propio GEOQLIK, con la posibilidad de mostrar polígonos sobre un mapa, no solo puntos.

Not applicable
Author

También tienes otras opciones utilizando extensiones tanto basadas en GoogleMaps, como en SVG: