Gestione delle mappe geografiche in QlikView

Pagina creata da Emma Zanotti
 
CONTINUA A LEGGERE
Gestione delle mappe geografiche in QlikView
Ermanno Goletto
Microsoft MVP Directory Services - MCSE - MCITP - MCSA

                                    Gestione delle mappe geografiche in QlikView

Introduzione
QlikView è un software di business analysis che consente di eseguire rapidamente analisi e reporting anche in
modalità self-services. Oltre a funzionalità ETL, QlikView offre anche la possibilità di avere a disposizione una suite di
controlli grafici, al momento però non esiste un controllo nativo specificatamente pensato per la visualizzazione dei
dati su di una mappa geografica.

In ogni caso è comunque possibile gestire all’interno di QlikView analisi su mappe geografiche, ma occorre gestire
due problematiche: il rilevamento delle coordinate geografiche delle località e il rendering della mappa geografica.

E’ possibile sfruttare all’interno di QlikView servizi online, come quelli offerti di Google e OpenStreetMap, sia per
ricavare le coordinate geografiche, che per ottenere le mappe. Per quanto riguarda la gestione del rilevamento delle
coordinate geografiche, l’utilizzo di servizi online può allungare i tempi di elaborazione in quanto ogni rilevamento
coincide con una chiamata al servizio. Di conseguenza è preferibile, se possibile, avere già a disposizione le
coordinate geografiche ed evitare che sia QlikView a doversi occupare del rilevamento.

Argomenti
     Ricavare latitudine e longitudine tramite Google Geocoding API (V3) ..................................................................... 2
     Ricavare latitudine e longitudine tramite OpenStreetMap Nominatim service ....................................................... 3
     Visualizzazione di mappe tramite l’utilizzo dell’estensione free QlikView Qlik Map ............................................... 5
     Visualizzazione di mappe tramite una Google Static Maps V2 ................................................................................. 7
        Passi per la creazione di un grafico a dispersione con una mappa di sfondo su cui visualizzare i dati ................ 8
     Visualizzazione di mappe tramite una Open StreetMap Static Map ...................................................................... 14
     Conclusioni .............................................................................................................................................................. 14

Luglio 2013                                                                                                                                                      Pagine 14
Gestione delle mappe geografiche in QlikView
Gestione delle mappe geografiche in QlikView                                                              Sysadmin.it

Ricavare latitudine e longitudine tramite Google Geocoding API (V3)
E’ possibile ricavare latitudine e longitudine tramite le Google Geocoding API a partire da un indirizzo usando una
chiamata ai web services di Google del tipo:

http://maps.googleapis.com/maps/api/geocode/xml?address=Torino&sensor=false

L’indirizzo può avere il seguente formato:

Indirizzo, N° Civico, Città, CAP Provincia (esempio Via Roma, 55, Nichelino, 10042 TO)

Tali Web Services consentono di eseguire 2.500 chiamate al giorno e sono utilizzabili alle seguenti condizioni (per
maggiori informazioni si veda Maps API Terms of Service License Restrictions):

Use of the Google Geocoding API is subject to a query limit of 2,500 requests per day. (User of Google Maps API for
Business may perform up to 100,000 requests per day.) This limit is enforced to prevent abuse and/or repurposing of
the Geocoding API, and this limit may be changed in the future without notice. Additionally, we enforce a request
rate limit to prevent abuse of the service. If you exceed the 24-hour limit or otherwise abuse the service, the
Geocoding API may stop working for you temporarily. If you continue to exceed this limit, your access to the
Geocoding API may be blocked.

Note: the Geocoding API may only be used in conjunction with a Google map; geocoding results without displaying
them on a map is prohibited

Nell’ipotesi di avere un file Excel Data.xlsx con un Foglio1, contente le informazioni delle quantità di prodotto
venduto per cliente e città, è possibile usare le Google Geocoding API per costruire in QlikView una tabella Geocode
con le informazioni di latitudine e longitudine.

                                                                                                        Pagina 2 di 14
Gestione delle mappe geografiche in QlikView
Gestione delle mappe geografiche in QlikView                                                                    Sysadmin.it

LOAD Customer,
     City,
     Quantity
FROM
Data.xlsx
(ooxml, embedded labels, table is Foglio1);

let NoOfRow =NoOfRows('Foglio1');

for i=0 to $(NoOfRow)-1
       let vCustomer=peek('Customer',$(i),'Foglio1');
       let vCity=peek('City',$(i),'Foglio1');

       Geocode:
       LOAD '$(vCustomer)' as Customer,
              '$(vCity)' as City,
              Num#([result/geometry/location/lng],'#.#############', '.' , ',' ) as Longitude,
              Num#([result/geometry/location/lat],'#.#############', '.' , ',' ) as Latitude,
              Num#([result/geometry/location/lng]) & ',' & Num#([result/geometry/location/lat])
as coordinates
       FROM [http://maps.googleapis.com/maps/api/geocode/xml?address=$(vCity)&sensor=false]
(XmlSimple, Table is [GeocodeResponse]);
next;

Ricavare latitudine e longitudine tramite OpenStreetMap Nominatim service
In alternativa ai servizi di localizzazione offerti da Google è’ possibile ricavare latitudine e longitudine tramite il
servizio Nominatim offerto d OpenStreetMap usando una chiamata di questo tipo:

http://nominatim.openstreetmap.org/search?format=xml&q=Torino&limit=1

Riferendoci sempre all’ipotesi di avere un file Excel Data.xlsx con un Foglio1, contenente le informazioni delle
quantità di prodotto venduto per cliente e città, è possibile costruire in QlikView una tabella Nominatim con le
informazioni di latitudine e longitudine.

LOAD Customer,
     City,
     Quantity
FROM
Data.xlsx
(ooxml, embedded labels, table is Foglio1);

let NoOfRow =NoOfRows('Foglio1');

for i=0 to $(NoOfRow)-1
       let vCustomer=peek('Customer',$(i),'Foglio1');
       let vCity=peek('City',$(i),'Foglio1');

       Nominatim:
       LOAD '$(vCustomer)' as Customer,
              '$(vCity)' as City,
              Num#([place/lon],'#.#############', '.' , ',' ) as Longitude,
              Num#([place/lat],'#.#############', '.' , ',' ) as Latitude,
              Num#([place/lon]) & ',' & Num#([place/lat]) as coordinates
       FROM [http://nominatim.openstreetmap.org/search?format=xml&q=$(vCity)&limit=1] (XmlSimple,
Table is [searchresults]);
next;
                                                                                                              Pagina 3 di 14
Gestione delle mappe geografiche in QlikView
Gestione delle mappe geografiche in QlikView                                                          Sysadmin.it

OpenStreetMap Nominatim ha le limitazioni d’utilizzo descritte al seguente Nominatim usage policy in cui viene
specificato che è possibile eseguire una richiesta al secondo:

No heavy uses (an absolute maximum of 1 request/s).

MapQuest ha reso disponibile una versione del Nominatim Search Service in Beta senza limitazioni che consente di
ricavare latitudine e longitudine a partire da un indirizzo usando una chiamata di questo tipo:

http://open.mapquestapi.com/nominatim/v1/search.php?format=xml&q=Torino&limit=1

LOAD Customer,
     City,
     Quantity
FROM
Data.xlsx
(ooxml, embedded labels, table is Foglio1);

let NoOfRow =NoOfRows('Foglio1');

for i=0 to $(NoOfRow)-1
       let vCustomer=peek('Customer',$(i),'Foglio1');
       let vCity=peek('City',$(i),'Foglio1');

       MapQuestNominatim:
       LOAD '$(vCustomer)' as Customer,
       '$(vCity)' as City,
              Num#([place/lon],'#.#############', '.' , ',' ) as Longitude,
              Num#([place/lat],'#.#############', '.' , ',' ) as Latitude,
              Num#([place/lon]) & ',' & Num#([place/lat]) as coordinates
       FROM [http://open.mapquestapi.com/nominatim/v1/search.php?format=xml&q=$(vCity)&limit=1]
(XmlSimple, Table is [searchresults]);
next;

                                                                                                     Pagina 4 di 14
Gestione delle mappe geografiche in QlikView                                                               Sysadmin.it

Visualizzazione di mappe tramite l’utilizzo dell’estensione free QlikView Qlik Map
Per quanto riguarda il rendering delle mappe in Qlik View è’ possibile utilizzare l’estensione gratuita QlikView Qlik
Map disponibile al seguente http://market.qlikview.com/qlikview-qlik-map.html basata su OpenStreetMap.

Attualmente è disponibile la versione 1.00 dell’estensione che supporta le seguenti versioni di QlikView Version:
10.0, 11.0, 11.0 SR1, 11.0 SR2, 11.2

Nelle note di rilascio viene indicato che tale estensione sarà inclusa nella versione 12 di QlikView (che dovrebbe
essere resa disponibile probabilmente entro la fine del 2013):

Will mapping be available in QlikView 12?

At the least, this extension and the SVG reader extension will be converted and updated to work with QlikView 12. In
the future, we will strive to make simple and basic mapping easier while continuing to look to our partners for
complex and heavy geospatial visualizations.

Per l’installazione dell’estensione è sufficiente eseguire un doppio click sul file qlikmap.qar, in questo modo
verranno copiati nel profilo dell’utente i file necessari all’interno della directory:

Windows XP:
%userprofile%\Impostazioni locali\Dati applicazioni\QlikTech\QlikView\Extensions\Objects\qlikmap

Windows 7 e Windows 8:
%localappdata%\QlikTech\QlikView\Extensions\Objects\qlikmap

Per poter utilizzare l’estensione è necessario abilitare la WebViev tramite il menù Visualizza:

                                                                                                          Pagina 5 di 14
Gestione delle mappe geografiche in QlikView                                                               Sysadmin.it

Dopo aver abilitato la WebView sarà possibile aggiungere gli oggetti Qlik Map tramite un click destro sul foglio:

La modalità WebView abilta il client AJAX modificando quindi il rendering, questo implica che alcune funzioni
potrebbero variare leggermente nei diversi client, mentre altre (per es. la modifica dei report e i comandi di menu
Taglia, Copia e Incolla, collegamenti rapidi CTRL+X, CTRL+C e CTRL+V) non sono disponibili.

A questo punto occorre configurare l’oggetto impostando almeno le seguenti proprietà:

       Region Dimension: questa dimensione dovrebbe contenere la descrizione
       Cordinates: questa dimesione deve contenere le coordinate nel formato longitudine,latitudine
       Measurement: questa dimensione deve contenere il valore dell’entità che si vuole visualizzare sulla mappa

Talvolta il controllo ha qualche problema di resfresh che si risolve chiudendo e riaprendo il file Qlik View, ma occorre
tenere conto che questa è una versione Draft.

                                                                                                          Pagina 6 di 14
Gestione delle mappe geografiche in QlikView                                                               Sysadmin.it

Visualizzazione di mappe tramite una Google Static Maps V2
Per gestire la visualizzazione di analisi su mappe è possibile utilizzare le Google Static Maps API che permettono di
eseguire in modo gratuito 25.000 richieste di mappe statiche al giorno.

Per utilizzare le mappe creare un foglio Google Maps che conterrà le variabili necessarie all’utilizzo delle mappe nello
script d’importazione:

// Variabili di configurazione
max_zoom_level = 17; //maximum value 17

// Variabili per il calcolo della mappa
// (non è necessario apportare modifiche)
map_size_x=       '640';
map_size_y=      '400';
var_pi180=           '=pi()/180';
var_lat_offset=      '0';
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)) )
Gestione delle mappe geografiche in QlikView                                                    Sysadmin.it

Passi per la creazione di un grafico a dispersione con una mappa di sfondo su cui visualizzare i dati
Passo1: aggiungere un Grafico a dispersione.

Passo2: selezionare la dimensione desiderata (per esempio il nome del cliente).

                                                                                               Pagina 8 di 14
Gestione delle mappe geografiche in QlikView                                                                Sysadmin.it

Passo3: Impostare la Modalità avanzata per gestire le Espressioni.

Passo 4: Aggiungere le seguenti tre espressioni rispettivamente per l’asse X, l’asse Y, la dimensione della bolla e il
testo aggiuntivo da inserire nel popup.

Etichetta: Longitude
Definizione: round (256*pow(2,($(var_zoom)-1)))+(Longitude*((256*pow(2,$(var_zoom)))/360)) //Asse X

Etichetta: Latitude
Definizione: ((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())))) //Asse Y

Etichetta: Quantity
Definizione: Sum(Quantity) //Dimensione bolla

Etichetta: City
Definizione: City //Pop-up text

                                                                                                           Pagina 9 di 14
Gestione delle mappe geografiche in QlikView                                                               Sysadmin.it

Passo 5: Impostare la visualizzazione del testo come Popup sull’Espressione da usare come testo di pop up

Passo 6: Impostare le opzione del Grafico per la visualizzazione delle sole informazioni utili, tenendo conto che la
finalità sarà quella di avere i dati su di una mappa.

                                                                                                        Pagina 10 di 14
Gestione delle mappe geografiche in QlikView                                                               Sysadmin.it

Passo 7: Impostare le opzioni di visualizzazione degli Assi e in particolare impostare i valori massimi e minimi per
consentire il corretto resize della mappa.

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

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

Min Asse Y: 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 Asse Y: 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)

                                                                                                         Pagina 11 di 14
Gestione delle mappe geografiche in QlikView                                                Sysadmin.it

Passo 8: Impostare come immagine di background del grafico una mappa statica di Google.

='http://maps.googleapis.com/maps/api/staticmap?center='
&
Replace(var_mid_lat,',','.')
&
','
&
Replace(var_mid_long,',','.')
&
'&zoom='
&
'$(var_zoom)'
&
'&maptype='
&
var_maptype
&
'&size='
&
map_size_x
&
'x'
&
map_size_y
&
'&sensor=false'

                                                                                          Pagina 12 di 14
Gestione delle mappe geografiche in QlikView                                                        Sysadmin.it

Passo 9: Se necessario inserire una Casella di Elenco per la scelta del tipo di mappa che visualizza il campo
maptypedescription e uno Slider per modificare lo Zoom per la variabile var_zoom (con minimo=1, massimo=17 e
Passo statico 1)

                                                                                                 Pagina 13 di 14
Gestione delle mappe geografiche in QlikView                                                               Sysadmin.it

Visualizzazione di mappe tramite una Open StreetMap Static Map
Anche OpenStreetMap offre la possibilità di ottenere mappe statiche (l’estensione QlikView Map si basa su
OpenStreetMap) grazie ad alcuni servizi online. Quelli disponibili sono descritti nel seguente Static map images e al
momento sono:

       staticMapLite
       MapQuest/Open Static Maps API
       MapBox Static API

Con riferimento all’esempio visto per l’utilizzo di una di mappa statica basata su Google Static Maps V2, per utilizzare
invece una mappa statica basata su OSM Static maps API v0.3 è sufficiente nel Passo 8 impostare il seguente link per
ottenere l’immagine di background del grafico:

='http://pafciu17.dev.openstreetmap.org/?module=map&lat='
&
Replace(var_mid_lat,',','.')
&
'&lon='
&
Replace(var_mid_long,',','.')
&
'&zoom='
&
'$(var_zoom)'
&
'&width='
&
map_size_x
&
'&height='
&
map_size_y
&
'&type=mapnik'
&
'&imgType=png'

Tramite questa espressione si otterrà dal servizio OSM Static maps API v0.3 una mappa statica di tipo mapnik in
formato PNG. In modo analogo possono essere ottenute mappe statiche anche dagli altri servizi disponibili di
OpenStreetMap.

Volendo è possibile gestire in modo dinamico anche il parametro type (come fatto per Google Static Maps V2)
andando ad modificare la definizione della Tabella maptype.

Conclusioni
La gestione delle mappe geografiche in Qlik View risulta tutto sommato abbastanza semplice, la soluzione basata
sull’estensione QlikView Qlik Map permette, differenza dell’approccio mediante mappa statica, di avere
un’interazione più dinamica con la mappa. Il vantaggio della soluzione basata sull’utilizzo di una mappa statica evita
il deploy dell’estensione sui client e l’utilizzo della modalità WebView.

Per ulteriori informazioni si veda la White Paper How QlikTech uses QlikView – Google Maps (Best Practices for
integrating Google Maps into Applications).

                                                                                                        Pagina 14 di 14
Puoi anche leggere