Aggirare le limitazioni delle API di Google Maps per il calcolo dei percorsi

Google Maps API

Torno a scrivere sul mio blog per trattare un argomento a mio giudizio interessante, anche se un po’ specifico.
Per conto di un cliente mi sto occupando delle API di Google Maps, in particolare l’ultima versione, ossia la V3.
Premetto, per chi non conoscesse l’argomento, che dalla versione 2 c’è stato un grande passo avanti, con ottime nuove funzionalità e tanti metodi che fanno risparmiare un sacco di tempo… D’altronde stiamo parlando di Big G!

Lo script che pubblico in questa pagina serve per rimediare al problema delle limitazioni poste da Google su ogni singola richiesta di calcolo di un percorso. Il cliente in questione deve visualizzare sulla mappa il tragitto tra due punti, passando però per un numero indefinito di punti intermedi.

Per fare questo Google rende disponibili le directions API impostando però il limite di 2500 richieste giornaliere e 8 punti intermedi per richiesta. L’idea è semplice, ottimizzare le richieste includendo al massimo 8 punti intermedi, settando però, dalla seconda richiesta in avanti, il punto di partenza uguale al punto finale della richiesta precedente.

Vediamo il codice javascript:

    var map = null;
    var markers = new Array();
    var coordinates = new Array();
    var directionsDisplay = new Array();
    var directionsService = new google.maps.DirectionsService();
    function placeMarker(lat, lng){
        var markerPos = new google.maps.LatLng(lat, lng);
        var marker = new google.maps.Marker({
            position: markerPos,
            map: map,
            draggable: true,
            animation: google.maps.Animation.DROP
        });
        markers.push(marker);
    }

    function removeRoutes(){
        for(var i = 0; i < directionsDisplay.length; i++){
            directionsDisplay[i].setMap(null);
        }
        directionsDisplay = new Array();
    }

    function drawRoute(begin, end, waypts){
        var request = {
            origin: begin,
            destination: end,
            waypoints: waypts,
            optimizeWaypoints: true,
            travelMode: google.maps.TravelMode.DRIVING
        };
        directionsService.route(request, function(response, status) {
            if (status === google.maps.DirectionsStatus.OK) {
                var dirDisp = new google.maps.DirectionsRenderer({suppressMarkers: true});
                dirDisp.setMap(map);
                dirDisp.setDirections(response);
                directionsDisplay.push(dirDisp);
            }
        });
    }

    function calculateRoutes(){
        removeRoutes();
        var begin = new google.maps.LatLng(coordinates[0][0], coordinates[0][1]);
        var end = null;
        var waypts = new Array();
        var wCount = 0;
        var REQUEST_WAYPOINTS_LIMIT = 8;
        var i;
        for(i = 1; i < (coordinates.length-1); i++){
            if(wCount === REQUEST_WAYPOINTS_LIMIT){
                i++;
                end = new google.maps.LatLng(coordinates[i][0], coordinates[i][1]);
                drawRoute(begin, end, waypts);
                begin = end;
                wCount = 0;
                waypts = new Array();
            }
            waypts.push({
                location: new google.maps.LatLng(coordinates[i][0], coordinates[i][1]),
                stopover: true
            });
            wCount++;
        }
        if(waypts.length > 0){
            end = new google.maps.LatLng(coordinates[coordinates.length-1][0], coordinates[coordinates.length-1][1]);
            drawRoute(begin, end, waypts);
        }
        for(var i = 0; i < coordinates.length; i++){
            placeMarker(coordinates[i][0], coordinates[i][1]);
        }
    }

Nel codice qui sopra come potete vedere ho un array di coordinate che contiene i vari punti da rappresentare sulla mappa, e il percorso deve essere calcolato partendo dalla prima coordinata presente in array per arrivare all’ultima cella dell’array, passando per tutte le altre.

Ho dato per scontato che la mappa sia già stata inizializzata e che la variabile map contenga l’oggetto google.maps.Map.

Un’ulteriore miglioria già fatta (che tratterò in un futuro articolo) sarà quella di colorare e numerare i marker dinamicamente e di adattare automaticamente lo zoom della mappa ai markers attivi sulla mappa visualizzata.

Inserire pulsanti “sociali” nel proprio sito

Facebook Like e Google Buzz
Per celebrare le (quasi) 1000 visite mensili del blog e ringraziarvi ho deciso di implementare una nuova funzionalità.

Da oggi potete condividere gli articoli del blog che vi piacciono su facebook o buzz, cliccando sulle icone nel riquadro grigio al fondo dei post.

Per quanto riguarda facebook, l’inserimento del plugin prevede l’utilizzo delle Facebook javascript SDK. Per prima cosa si deve registrare il proprio sito come applicazione, in modo da ottenere un “application id”. Una volta fatto ciò potete aggiungere in fondo alla vostra pagina il codice javascript per caricare le sdk:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({appId: 'your app id', status: true, cookie: true,
             xfbml: true});
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>

Ora potete aggiungere il tag FBML che caricherà il pulsante “mi piace”:

<fb:like href="URL da segnalare" layout="button_count"></fb:like>

Potete personalizzare il tipo di pulsante tramite il tag “layout”:

  • “standard” per avere il pulsante con la frase a fianco
  • “button_count” per avere il pulsante con il contatore dei “like”
  • “box_count” per avere il pulsante e il contatore su due righe diverse

e tramite il tag “colorscheme”:

  • “light” per lo schema di colori default
  • “dark” per lo schema di colori grigio scuro

Nel tag href dovete inserire l’url che volete sia segnalata quando qualcuno clicca sul pulsante.

Per quanto riguarda Google buzz invece, non è necessario registrare nessuna applicazione, si dovrà solamente includere il codice javascript per le Google Buzz SDK in fondo alla pagina:

<script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script>

e il codice del pulsante per condividere il link

<a href="http://www.google.com/buzz/post"
  class="google-buzz-button" title="Google Buzz"
  data-message="Here’s Buzz!"
  data-url="http://www.google.com/buzz"
  data-locale="it"
  data-button-style="normal-count"></a>

È anche possibile personalizzare il pulsante modificando il tag “data-url” inserendo l’url alla pagina che si vuole segnalare, e il tag “data-button-style” con le seguenti voci:

  • normal-count
  • small-count
  • normal-button
  • small-button
  • link

Sincronizzare Google Calendar con iCal su Mac e iPhone

iCal e Google Calendar

Bentornati a tutti dalle vacanze, oggi ritorno con un articolo dedicato ai macachi come me.

Avete bisogno di tener traccia dei vostri appuntamenti, eventi, ricorrenze? Be’ esistono i calendari elettronici, oppure le agendine elettroniche, oppure le agende cartacee…. oppure Google Calendar

Ieri sera, parlavo con Denny (che devo ringraziare per l’input di questa mattina, SENZA di lui non sarei riuscito a scoprire questa sciccheria… :-P ) e mi ha detto che usava un’estensione di thunderbird per tenere traccia di tutti gli appuntamenti, eventi ecc… Siccome anche io, a lavoro, uso la stessa estensione per thunderbird, gli ho spiegato secondo me cosa non funzionava di quel sistema e cioè che gli eventi creati rimanevano sul pc e non c’era nessun metodo per ricevere avvisi via mail o meglio ancora sms. Avevo infatti provato Google Calendar e notato che aveva la splendida funzionalità di impostare gli avvisi via sms.

Stamattina perciò dopo esserci ritrovati su gtalk abbiamo cercato qualche sistema per sincronizzare i calendari software con il servizio di google, scoprendo che quasi tutti i calendari supportando lo standard calDav.

Vi spiego ora come sincronizzare iCal, il software per il calendario su mac, con Google Calendar:

  • nella barra dei menu, selezionare iCal->Preferenze
  • selezionare il tab “Account” e poi premere “+” per aggiungere un nuovo account.
  • come “Tipo account” dovreste già avere “Google”, se non ci fosse selezionate la voce “calDav”
  • a questo punto vi basterà inserire l’indirizzo del server google (google.com), la vostra mail completa che usate per accedere ai servizi di google e la relativa password

Ora quando creerete un nuovo evento su iCal, questo verrà automaticamente sincronizzato on-line.

La stessa cosa può essere fatta su iPhone:

  • per prima cosa collegatevi all’indirizzo https://www.google.com/calendar/iphoneselect e confermate di voler usare il calendario di google dal vostro iPhone.
  • ora andate nelle impostazioni e selezionate la voce “Mail, contatti, calendari”
  • selezionate la voce “aggiungi account” e scegliete “altro”
  • qui troverete la voce “aggiungi account calDav”
  • inserite di nuovo le informazioni relative al vostro login e al server google (google.com)

Ora avrete iCal sul vostro mac e sul vostro iPhone che salverà le informazioni su google Calendar e in qualsiasi momento potrete accedere ai vostri appuntamenti, eventi e ricorrenze

Ancora grazie a Denny per il supporto, nonostante sia dichiaratamente anti-apple :-P

Google ti aiuta anche a trovare lavoro…

Sei disoccupato o non riesci a trovare il lavoro dei tuoi sogni? Vuoi a tutti costi tentare di essere assunto nel posto di lavoro che sogni da anni? Google può essere l’unico elemento che ti serve per realizzare i tuoi desideri! ;-)

Un trentenne americano, stanco di inviare curriculum a tutte le aziende pubblicitarie di New York senza ricevere risposta, si è inventato un modo tutto suo per arrivare direttamente al direttore creativo, saltando a piè pari tutti i vari uffici di risorse umane e reclutamento. Come ha fatto?

Ha investito 6 dollari ed ha acquistato il Top Spot di Google (il primo risultato delle ricerche di Google, quello in giallo per intenderci) dei nomi di alcuni dei più famosi direttori creativi di studi pubblicitari newyorkesi, inserendo questa frase:

Googleggiare con il tuo nome è davvero divertente, ma anche assumermi è altrettanto divertente

Ovviamente, visto che siamo qui a parlarne, questa nuova trovata pubblicitaria ha avuto successo e poco dopo Alec Brownstein ha ricevuto le chiamate che aspettava. Ha pagato il Top Spot per 5 nomi, e ha ricevuto 4 telefonate per proposte di colloqui. Di queste 4, 2 sono diventate offerte di lavoro e lui ha finalmente ottenuto il lavoro che voleva presso lo studio di New York della Y&R una multinazionale specializzata in pubblicità.

La trovata geniale è stata aiutata anche dal narcisismo delle persone, ma in fondo chi di voi non ha mai provato a googleggiarsi? ;-P

Sottotitoli automatici per i filmati di YouTube!

Signori, questa a mio parere è una grande feature. Molti diranno: “I sottotitoli? e a cosa servono?”. Ora spiego l’origine di questa mia euforia.

Vi rendete conto che ora quando guarderemo un video su Youtube, che sia in inglese, russo, cinese o aramaico potremmo leggere che cosa stanno dicendo i protagonisti del video? Non vi convince vero? E allora ve lo dico: vi rendete conto che i sottotitoli non li scrive nessuno per voi, ma sono creati automaticamente da un algoritmo di riconoscimento vocale?

Al momento la funzione è disponibile solo per la lingua inglese, ma gli ingegneri di youtube stanno lavorando per rendere disponibile la feature in 50 lingue. Cioè in automatico voi potrete “switchare” dal sottotitolo in inglese a quello in italiano, francese, spagnolo ecc ecc. Uno spettacolo direi!

E per finire se i sottotitoli che il sw crea non sono di vostro gradimento allora potrete scaricarli, correggerli e reinviarli a youtube… Secondo me questa nuova funzionalità è una figata! (ah?! dite che si era già capito?) :-P
[ad]

Le olimpiadi invernali di Vancouver su Google

È stata aggiornata da poco l’homepage di Google Italia con il link-sponsor alla nuova funzionalità offerta dal colosso del web. Il link permette agli utenti di Google Maps di catapultarsi sulle piste che saranno teatro delle olimpiadi invernali e che verrano inaugurate questo venerdì a Vancouver, in Canada. Google ha realizzato le riprese in pieno stile street view delle piste di tutte le specialità presenti ai prossimi giochi invernali, in modo che gli utenti si possano virtualmente fiondare nella fredda città canadese.

Da buoni perfezionisti, quelli di Big G hanno montato l’ormai celebre strumento utilizzato per scattare le fotografie da usare in street view, sopra una motoslitta e si sono fatti un bel giretto sui campi di gara.

Per non farsi mancare nulla hanno anche personalizzato l’omino che l’utente può posare sulla mappa, con uno sciatore, che ovviamente punta sci e bastoncini nella direzione indicata dal mouse!

Oltre a tutto ciò sono stati creati dei gadget personalizzati che chiunque può condividere su facebook, twitter o sul proprio sito web, per monitorare le gare del giorno, la situazione medaglie e tanto altre curiosità. Trovate tutto a questo indirizzo: http://google.com/games10

Buon divertimento, e un in bocca al lupo ai nostri azzurri!
[ad]

YouTube sperimenta HTML 5!

Proprio chi aveva fatto di Flash il suo cavallo di battaglia, chi aveva contribuito a renderlo più leggero e più adatto alle proprie esigenze, appena ha avuto una via di fuga per le mani, non ha saputo resistere…

Sto parlando (come si era già capito) del famoso sito di video sharing YouTube che in queste ore ha annunciato l’inizio dei test pubblici per sperimentare l’HTML 5, ovvero il nuovo standard in cui si possono includere direttamente nel codice html, video e audio che non necessitano dell’ausilio di plugin per essere riprodotti.

Se volete sperimentare anche voi questa novità, non dovete far altro che collegarvi a http://www.youtube.com/html5 e seguire i pochi e semplici passi. Requisito fondamentale è avere uno dei browser specificati (safari 4, google chrome, internet explorer con chrome frame o il fresco fresco firefox 3.6) che siano in grado di riprodurre il formato multimediale h.264.

Google da sempre si dà da fare per migliorare i suoi prodotti in termini di rapidità e fruibilità senza dimenticare il consumo energetico, e proprio questo formato permette di migliorare queste 3 caratteristiche. Certo siamo ancora all’inizio e ci vorrà ancora un po’ di tempo prima che html 5 diventi lo standard davvero standard (eh?! dai si è capito no?! :-\ ), ma con questo passo secondo me si fa un bel salto in avanti con buoni risultati… Personalmente da buon utente ubuntu (=non ho mai potuto navigare decentemente su un sito che facesso uso intensivo di flash, ad eccezione dei soliti pochi intimi) sarei davvero soddisfatto, nonchè favorevole a questo passaggio. E voi? Che ne dite?
[ad]

Google presenta il suo cellulare: ecco a voi il Nexus One

Il tanto atteso googlefonino alla fine è arrivato. Ieri Google ha svelato ufficialmente il suo prodotto che la proietterà nel mondo della telefonia cellulare. Il prodotto è stato realizzato in collaborazione con l’ormai affermato partner HTC e viene presentato come web-phone, ovvero come il cellulare adatto per la navigazione ovunque ci si trovi.

Queste sono le sue caratteristiche:

Dimensioni e peso

Altezza
119mm
Larghezza
59.8mm
Profondità
11.5mm
Peso
130g con batteria
100g senza batteria

Display

3.7 pollici (diagonale) widescreen WVGA AMOLED touchscreen

800 x 480 pixels

100,000:1 di contrasto

1ms frequenza di risposta

Camera & Flash

5 megapixels

Autofocus da 6cm all’infinito

2X digital zoom

LED flash

Gli utenti possono includere la location della foto grazie all’AGPS incluso

Video catturati a 720×480 pixels con 20 frames per secondo o superiore, in relazione alle condizioni di luce

Cellulare & Wireless

UMTS Band 1/4/8 (2100/AWS/900)

HSDPA 7.2Mbps

HSUPA 2Mbps

GSM/EDGE (850, 900, 1800, 1900 MHz)

Wi-Fi (802.11b/g/n)

Bluetooth 2.1 + EDR

A2DP stereo Bluetooth

Batteria & Autonomia

Batteria rimuovibile da 1400 mAH

Ricarica a 480mA via USB, a 980mA via caricatore addizionale

In chiamata
Più di 10h su 2G
Più di 7h su 3G
Standby
Più di 290h su 2G, Più di 250h su 3G
Internet
Più di 5h su 3G
Più di 6.5h su Wi-Fi
Video playback
Più di 7h
Audio playback
Più di 20h

Processore

Qualcomm QSD 8250 1 GHz

Sistema operativo

Android Mobile Technology Platform 2.1 (Eclair)

Capacità

512MB Flash

512MB RAM

4GB Micro SD Card (Espandibile fino a 32 GB)

Location

Ricevitore Global Positioning System Assistito (AGPS)

Cell tower and Wi-Fi positioning

Digital compass

Accelerometer

Per tutte le altre specifiche potete fare riferimento alla pagina dedicata su google: http://www.google.com/phone/static/en_US-nexusone_tech_specs.html

In queste prime ore si mormora già che il googlefonino potrebbe arrivare in primavera in Italia, con vodafone.
Per tutte le altre info potete andare su www.google.com/phone

[ad]

Google chrome beta per linux e mac!

Ebbene sì ragazzi è arrivata!

Proprio in questi minuti è stata anche inviata la mail a chi si era iscritto per ricevere un avviso quando fosse stata pronta la versione di Google Chrome per linux.

Che dire, io aveva già installato la versione unstable da tempo, e di tanto in tanto la provavo, ultimamente gli aggiornamenti si erano fatti più frequenti, e così il team di google ci ha regalato la beta del suo browser in anticipo rispetto al Natale.

Adesso sia gli utenti linux, sia i macachi hanno a disposizione un nuovo browser…

Collegandovi a questa pagina, verrà riconosciuto il vostro SO e potreste scaricare la versione adatta a voi ;)

Questo invece è il link al post ufficiale sul chrome-blog ;-)
[ad]

Un software di navigazione gratuito?

Indovinate un po’ chi lo sta preparando? Non ve lo dico neppure

Gustatevi il video:

La notizia è già uscita da un po’ però mi sembra abbastanza importante sottolinearla. Soprattutto visto che fino ad oggi ci sono fior fior di software e dispositivi di navigazione dedicati e ovviamente a pagamento. Google invece sta dotando alcuni dei suoi telefoni con Android con questo software di navigazione.

Ovviamente quando c’è qualcosa che funziona bene, non lo si tocca e proprio per questo il software di navigazione di Big G si basa su google maps.

Al momento questa chicca è in fase di sperimentazione solo negli stati uniti e solo su alcuni telefoni, ma secondo me Tom Tom, Garmin e(…chi? Ovi Maps? ma va laaaaa’!) compagnia bella possono iniziare a preoccuparsi, non pensate?
[ad]