Api - Calcolare la distanza tra due punti

In questa sezione sono trattati gli argomenti sulla programmazione relativa agli strumenti di Google, come ad esempio le Api etc...

Api - Calcolare la distanza tra due punti

Messaggioda rootx » gio set 08, 2011 6:10 pm

Vista la richiesta che ho ricevuto da Claudio, ho deciso di rispolverare qualche vecchio script che avevo in cantina. In questo caso la domanda che mi è stata fatta è la seguente: In quale varibile trovo il valore della distanza tra due punti?
Vi faccio alcune premesse, esistono molti modi per ottenerla, in base a ciò che vogliamo creare. Sicuramente una lettura della documentazione ci aiuterebbe, ma per chi sporadicamente userà le Api diciamo che possiamo usare questo script facilmente, ho creato una semplice pagina Html con all'interno lo script.
Documentazione http://code.google.com/intl/it-IT/apis/ ... .getMarker


Codice: Seleziona tutto
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
      <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>Nextechnics Google Api Calculate Distance</title>
        <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAARgj-H_Puy6zHmnhtW10zdhS7AeBILSJeQEEYAXY5Oi6_3FVORBQaHlTnzkY2dKVbxq5dnqWGzREVCQ" type="text/javascript"></script>
    <!-- According to the Google Maps API Terms of Service you are required display a Google map when using the Google Maps API. see: http://code.google.com/apis/maps/terms.html -->
        <script type="text/javascript">

        var geocoder, locinz, locfin;

       function initialize() {
          geocoder = new GClientGeocoder();
       }

       function setLocation() {
          geocoder.getLocations(document.forms[0].fromAddress.value, function (response) {
             if (!response || response.Status.code != 200)
             {
                alert("Luogo Partenza Errato");
             }
             else
             {
                locinz = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
                geocoder.getLocations(document.forms[0].toAddress.value, function (response) {
                   if (!response || response.Status.code != 200)
                   {
                      alert("Luogo Arrivo Errato");
                   }
                   else
                   {
                      locfin = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
                      checkDistance();
                   }
                });
             }
          });
       }

       function checkDistance()
       {
          try
          {
             var glatlocinz = new GLatLng(locinz.lat, locinz.lon);
             var glatlocfin = new GLatLng(locfin.lat, locfin.lon);
             var miledistance = glatlocinz.distanceFrom(glatlocfin, 3959).toFixed(1); // x miglia, fate attenzione a distanceFrom vedi documentazione
             var kmdistance = (miledistance * 1.609344).toFixed(1); // x Kilometri

             document.getElementById('results').innerHTML = '<strong>Partenza: </strong>' + locinz.address + '<br /><strong>Arrivo: </strong>' + locfin.address + '<br /><strong>Distance: </strong>' + kmdistance + ' kilometri';
          }
          catch (error)
          {
             alert(error);
          }
       }

        </script>
      </head>

      <body onload="initialize()">

        <form action="#" onsubmit="setLocation(); return false;">
          <p>
            <input type="text" name="fromAddress" value="Inserire Luogo Partenza" class="address_input" size="40" />
            <input type="text" name="toAddress" value="Inserire Luogo Arrivo" class="address_input" size="40" />
            <input type="submit" name="find" value="Search" />
          </p>
        </form>
        <p id="results"></p>

      </body>
    </html>



Aggiornamento 10/08/2011

Mi hanno fatto notare che in alcuni casi nella ricerca di alcune località si verifica l'errore 602, per ovviare a tale problema basta inserire oltre alla località il CAP ad esempio Pordenone 33170. Non ho approfondito le eventuali migliorie e raffinamenti possibili, immagino ve ne siano, quindi postate pure le vostre alternative se avete voglia di condividerle.



Francesco Gerratana
Avatar utente
rootx
Site Admin
 
Messaggi: 11
Iscritto il: dom lug 17, 2011 12:37 am

Torna a Google

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

cron