Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Mostrar mapa de Google Maps sin Extensiones

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



0 Replies