howto: punti di interesse per tom tom in php

Supponiamo di avere un database contenente gli indirizzi geografici dei clienti (es. "2V S.r.l" "via San Fermo, 41 22020 Cavallasca Como") [o delle fidanzate :-) ] : non sarebbe bellissimo selezionare le destinazioni a partire dal nome del cliente [ o della fidanzata ] anzichè stare a scrivere a mano l'indirizzo?

Allora vediamo come produrre una lista di punti di interesse PDI (piu conosciuti come POI [Point Of Interest]) per TomTom a partire da un database mediante una pagina php.

Leggo dal sito TomTom e anche da questo sito che la poi-list viene generata da un file di testo con questa sintassi: longitudine , latitudine , "Riferimento"

Es.
longitudine ,  latitudine ,    "riferimento"
------------------------------------------------------

9.0354380,  45.81277600, "2V S.r.l."
9.3000000 ,  4.00000000 , "Autogrill Alemagna"
57.4000000 , 3.90000000 , "Ristorante la cozza"

Il file così formattato viene poi dato in pasto ad un altro per software per ottenere i file .ov2 che viene poi caricato nel filesystem del TomTom.

Quindi, in primis, mi servono longitudine e latitudine per ciascun indirizzo che voglio inserire nella poi-list.
Ottenere la lista degli indirizzi è facile. Eseguo una query sulla tabella di mysql e ottengo in ritorno il recorset contenente "indirizzo" e "riferimento", ma poi come ottenere latitudine e longitudine?
Beh si puo fare a mano, magare seguendo il trucchetto indicato in questo sito che genera quanto illustrato in questo screenshot:

ma questa soluzione non è praticabile. :-)

Ci sono alcuni siti on line che offrono questo genere di servizio. Quelli che ho provato, google map compreso, hanno delle limitazioni / complicazioni. Yahoo invece è stato immediato.
Qui trovi la descrizione del servizio offerto da Yahoo chiamato Geocoding Web Service che è un servizio REST, ovvero una pagina interrogabile via http che da in ritorno un file xml. La cosa fantastica è che il file xml puo essere manipolato in N modi da diversi linguaggi tra cui php.
Trovo comodo usare la funzione serialize per trasformare il file xml di ritorno in un array con tutte le informazioni che mi servono.
Riporto un esempio del risultato di ritorno:

Array
(
    [ResultSet] => Array
        (
            [Result] => Array
                (
                    [precision] => street
                    [warning] => The Street name might have been changed
                    [Latitude] => 45.812776
                    [Longitude] => 9.035438
                    [Address] => via San Fermo
                    [City] => 22020 Cavallasca CO
                    [State] => Italy
                    [Zip] =>
                    [Country] => IT
                )
        )

)

lo si ottiene con questo codice:

<?php
$address= 'via+san+fermo,+41+22020+cavallasca+como'; 
$link = 'http://local.yahooapis.com/MapsService/V1/geocode?appid=YahooDemo--&street='.$address.'&output=php'; 
$phpserialized = file_get_contents($link); 
$phparray = unserialize($phpserialized); 
echo '<pre>'; 
print_r($phparray); 
echo '</pre>';
?>

A questo punto non resta che ciclare ogni item del nostro recordset ed effettuare una request a Yahoo nel modo visto sopra e scrivere i risultati in ritorno in un file di testo.

Dopo aver ottenuto la lista si produce il file ov2 con il binario MAKEOV2.EXE* documentato qui e scaricabile da qui e lo si copia direttamente nel TomTom tramite connessione usb.

Da questo momento possiamo raggiungere una qualsiasi delle locazioni indicate nel database semplicemente indicando il riferimento tra i punti di interesse e non l'indirizzo.

*Fantastico vero? Beh non per tutti: il file makeov2.exe è solo per windows e quindi non funziona sotto linux ... niente paura pinguini miei!! la soluzione è qui.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
6 + 6 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.