Feb 212012
 

Possiamo creare cartine geografiche e colorare dinamicamente un paese sulla mappa facendoci restituire come output un’immagine.
La soluzione passa attraverso google chart e una chiamata particolare:
<img src=”https://chart.googleapis.com/chart?cht=map:auto=140,140,120,120&chs=300×300&chld=KE&chco=000000|FF0000″ alt=””>

tutto qui, quasi troppo facile!
Esaminiamo i parametri della chiamata e quindi prendiamo in esame la query string:
cht=map : è obbligatorio e specifica che verrà rstituita una mappa (auto è un’opzione che serve per zoom e centratura della mappa);
chs=300×300 : anche questo parametro è obbligatorio e serve per dichiarare le dimensioni dell’immagine
chld=KE : il paese da colorare, se sono più di uno vanno separati dal simbolo | (ricordarsi di usare la codifica standard per individuare i paesi)
chco=000000|FF0000 : i colori da usare per i paesi non selezionati e per quelli selezionati

L’esempio completo

Feb 202012
 

E’ possibile colorare dinamicamente una nazione su una cartina senza ricorrere alla tradizionale soluzione in flash?
La risposta è sì e ci sono due opzioni: la prima passa attraverso google chart e svg, maentre la seconda, sempre tramite google chart, presente l’output sotto forma di immagine.

Vediamo la prima opzione, come sempre occorr collegare la libreria e chiamare la funzione vera e proprai all’onload:

<script type=’text/javascript’ src=’https://www.google.com/jsapi’></script>
<script type=’text/javascript’>
google.load(‘visualization’, ’1′, {‘packages’: ['geochart']});
google.setOnLoadCallback(drawRegionsMap);

Nella funzione come prima cosa impostiamo la label:


var data = new google.visualization.DataTable();
data.addColumn(‘string’, ‘Country’);
data.addColumn(‘number’, ‘Articoli’);

e successivamente il paese da visualizzare, attenzione a utilizzare la nomeclatura standard ISO-3166-1


data.addRows([['Peru', 1]]);

potermmo già concludere il nostro lavoro con le seguenti istruzioni


var chart = new google.visualization.GeoChart(document.getElementById(‘chart_div’));
chart.draw(data, options);

che permettono di disegnare la cartina, tuttavia è opprtuno settare alcune opzioni:


var options = {
colorAxis: {colors: ['FF0000']},
displayMode: ‘regions’,
region: ’005′,
width:’300′,
height:’225′,
legend:’none’,
datalessRegionColor:’000000′,
resolution:’countries’
};

dove colorAxis è il colore del paese da evidenziare, displayMode serve per impostare il livello di zoom, region serve per definire la regione da visualizzare (sempre secondo le codifiche standard), quindi larghezza e altezza del nostro oggetto, se vogliamo o meno visualizzare la legenda e per concludere risoluzione e colore delle regioni senza dati.

Vedi l’esempio competo.

Feb 122012
 

Google chart può essere utilizzato per creare mappe del mondo, di continenti o regioni e colorare con diffrenti tonalità aree geografiche ben precise. Proveremo ora a descrivere una mappa dove verranno visualizzate le 10 economie più forti nel 2006, il grafico mostrerà colorati i nostri paesi e con una tonalità dal più scuro al più chiaro in relazione ai valori inseriti.

Il primo step è il collegamento alla libreria:

<script type=’text/javascript’ src=’https://www.google.com/jsapi’></script>

successivamente accediamo al package di nostro interesse e impostiamo il callbak al caricamento:

google.load(‘visualization’, ’1′, {‘packages’: ['geomap']});
google.setOnLoadCallback(drawMap);

Nella funzione vera e propria creiamo il nostro oggetto:

var data = new google.visualization.DataTable();

Impostiamo le label:

data.addColumn(‘string’, ‘Paese’);
data.addColumn(‘number’, ‘PIL, miliardi di $, 2006′);

e aggiungiamo i dati veri e propri:

data.addRows(10);
data.setValue(0, 0, ‘United States’);
data.setValue(0, 1, 13164);
data.setValue(1, 0, ‘Japan’);
data.setValue(1, 1, 4368);

una coppia per ciascun paese, dove i 3 parametri di setValue sono rispettivamente l’indice della riga, l’indice della colonna e il valore.
Nel nostro caso non useremo opzioni particolari:

var options = {};
options['dataMode'] = ‘regions’;

e quindi possiamo agganciare l’elemento della pagina e produrre la mappa:

var container = document.getElementById(‘mappa’);
var geomap = new google.visualization.GeoMap(container);
geomap.draw(data, options);

Vai all’esempio

Nov 112011
 

Per calcolare un itinerario e visualizzarlo sulla nostra Google Maps sarà necessario lavorare con i services messi a disposizione da Google. Dopo aver inserito la nostra mappa ed averla centrata possiamo procedere con le personalizzazioni necessarie: la prima di queste prevede l’inserimento nell’html della pagina di un secondo box, oltre a quello che ospita la mappa, dove inseriremo le “istruzioni di viaggio”:


<div id=”miamappa” style=” float:left; width:70%; height:650px;”></div>
<div id=”istruzioni” style=” float:left; width:30%; height:650px;”></div>

Nello scirpt innanzitutto modifichiamo il collegamento alla libreria specificando la lingua della risposta:


<script type=”text/javascript” src=”http://maps.googleapis.com/maps/api/js?sensor=false&language=it”></script>

Nella parte di script vera e propria definiamo due variabili:


var directionDisplay;
var directionsService = new google.maps.DirectionsService();

directionsService ci servirà per chiamare il servizio, mentre directionDisplay servirà per visualizzare le informazioni.

Ora la funazione che calcola il percorso:


function calcRoute() {
var start = ‘Milano’;
var end = ‘Varese, Italia’;
var request = {
origin:start,
destination:end,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
}

Le variabili start e end servono per stabilire i punti di partenza e arrivo, chiaramente possono esere recuperati da form, database, etc

Per il TravelMode possiamo scegliere fra driving e walking (in usa anche BICYCLING).

Le ultime istruzioni sono l’esecuzione della chiamata.

Per completare la pagina dobbiamo inizializzare la nostra mappa:


function inizializza() {
directionsDisplay = new google.maps.DirectionsRenderer();
var milano = new google.maps.LatLng(45.463681, 9.188171);
var mapOptions = {
zoom: 10,
center: milano,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
map =  new google.maps.Map(

document.getElementById(“miamappa”),

mapOptions);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById(“istruzioni”));
calcRoute();
}

dove si deve renderizzare il percorso e nelle ultime due istruzioni scrivere il percorso nel box di destra e disegnarlo sulla mappa.

Ecco l’esempio completo.

Nov 102011
 

Come creare delle aree circolari su una mappa, per esempio per mostrare dei cerchi in proporzione con la popolazione residente in una città?

A partire dalla Google Maps costruiremo un array contenente il centro del cerchio e un  valore che servirà a determinare il raggio, nel nostra esempio la popolazione, anche se i dati non sono reali.

Un elemento dell’array sarà dunque fatto in questo modo:


citymap['milano'] = {

center: new google.maps.LatLng(45.463681, 9.188171),

population: 1334077};

e così via per tutte le aree

La seconda parte è la creazione del cerchio dove all’interno di un ciclo che fa scorrere il nostro array:


for (var city in citymap) {
var populationOptions = {
strokeColor: “#FF0000″,
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: “#FF0000″,
fillOpacity: 0.35,
map: map,
center: citymap[city].center,
radius: citymap[city].population / 50
};
cityCircle = new google.maps.Circle(populationOptions);
}

definiamo colore, opacità e via via tutti i parametri che servono.

L’esempio completo

Nov 092011
 

Dove sono? E’ possibile visualizzare un marker che mi indica dove mitrovo su una mappa.

Dipende in realtà da quale browser sto usando e dalla modalità di accesso alla rete.

In questo momento (novembre 2011) la localizzazione che si base su html5 funzionerà su chrome, firefox, safari. Grande assente ie. E questo ovviamente allo stato attuale limita fortemente l’uso, se però la nostra applicazione è per un supporto mobile questo problema non si pone e oltretutto è ragionevole pensare di essere posizionati con la precisione del gps eliminando i margini di errori legati all’accesso a internet: chi proverà l’esempio si accorgerà che se accede con un normale accesso alla rete con ip dinamico ci sarà un margine di errore magari anche significativo, questo dipende da dove viene identificato l’ip.

Per il codice vedere la sorgente dell’esempio

Nov 072011
 

Proviamo ad aggiungere alla nostra solita Google Maps alcune coordina te e congiungerle fra di loro con una linea, come esempio immagineremo di disegnare sulla mappa di Milano un tratto della metropolitana gialle (linea 3).

Abbiamo due preprequisiti da soddisfare: avere a disposizione la Google Maps, e in secondo luogo avere le coordinate di tutti i punti dove vogliamo far passare la nostra linea.

Per tanto come prima cosa creeremo un array con tuttel le posizioni che ci interessano:


var lineagialla = [
new google.maps.LatLng(45.492405,9.192531), //zara
new google.maps.LatLng(45.489502,9.200706), //sondrio
new google.maps.LatLng(45.485124,9.203035), //centrale
new google.maps.LatLng(45.479031,9.197123), //repubblica
new google.maps.LatLng(45.475427,9.194232), //turati
new google.maps.LatLng(45.470202,9.192483), //montenapoleone
new google.maps.LatLng(45.464461,9.189221), //duomo
new google.maps.LatLng(45.460748,9.188079), //missori
new google.maps.LatLng(45.456428,9.194999), //crocetta
new google.maps.LatLng(45.451781,9.202863), //portaromana
new google.maps.LatLng(45.446809,9.210395), //lodi
new google.maps.LatLng(45.442406,9.218581)  //brenta
];

In secondo luogo andremo a congiungere questi punti con le seguenti istruzioni:


var metro3 = new google.maps.Polyline({
path: lineagialla,
strokeColor: “#FFFF00″,
strokeOpacity: 1.0,
strokeWeight: 4
});

metro3.setMap(map);

Dove path sarà il nostro array contenente le coordinate, strokeColor il colore della linea e poi definiamo l’opacità e lo spessore.

A questo punto non resta che aggiungere l’informazione alla mappa.

Ecco l’esempio

Nov 062011
 

Un problema molto frequente è che spesso vogliamo inserire un marker a partire da un indirizzo e non dalle sue coordinate che quindi dovranno essere calcolate in modo automatico.

L’oggetto che si occupa della traduzione in coordinate del nostro indirizzo si chiama geocoder e lo inizializziamo nella funzione che crea la mappa:


geocoder = new google.maps.Geocoder();

Successivamente, a partire da un indirizzo, chiameremo una funzione che si occuperà di tradurre l’indirizzo in coordinate e piazzare una marker nelle coordinate individuate:


function codeAddress() {
 var address = document.getElementById(“address”).value;
 geocoder.geocode( { ‘address’: address}, function(results, status) {
 if (status == google.maps.GeocoderStatus.OK) {
 map.setCenter(results[0].geometry.location);
 var marker = new google.maps.Marker({
 map: map,
 position: results[0].geometry.location
 });
 }
 else {alert(“Geocode non ha trovato la posizione per il seguente motivo: ” + status);}
 });
 }

La prima istruzione assegna alla variabile address l’indirizzo che in questo caso viene preso da un campo di input.

Successivamente richiediamo le coordinate; se l’operazione va a buon fine, cioè geocoderstatus è ok, le coordinate vengono restituite nell’array results (results[0].geometry.location)

in modo da centrare la mappa sulle nuove coordinate e aggiungere il marker. Se si verifica un errore comparirà un alert, volendo possiamo eliminare l’istruzione contenuta nell’else.

L’esempio completo

Nov 042011
 

Quando andiamo ad aggiungere più marker ad uan Google Maps potremmo avere l’esigenza di personalizzare l’iconcina segnaposto.

Dobbiamo quindi arricchire il codice di inserimento del marker con l’istruzione relativa all’icona da utilizzare:


var image=”icon/icona_01.png”

e in secondo luogo, alla definizione del marker andiamo ad aggiungere l’istruzione relativa all’icona:


var marker = new google.maps.Marker(
{position: x,title:”Primo Marker”,icon:image}
);

L’esempio propone una mappa con due marker diversi: vai

Nov 032011
 

Per aggiungere una descrizione ad un marker presente nella Google Maps dovremo decidere l’evento che permetterà la visualizzazione della descrizione, in genere è il click sul marker e ovviamente il testo da visualizzare. Quindi il codice javascript della nostra mappa dovrà essere personalizzato in questo modo:


var mieinfo = new google.maps.InfoWindow(
{content: “Mi trovo esttamente<br /><strong>qui</strong>”}
);

google.maps.event.addListener(
marker,
‘click’,
function() {mieinfo.open(map,marker);}
);

In pratica la variabile mieinfo serve per stabilire il testo che andremo a visualizzare;

mentre nella seconda riga aggiungiamo l’evento click al nostro marker.

L’esempio completo