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&v=2&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