So here’s a quick couple snippets of code that will allow you to retrieve the coordinates of two locations using Google Maps API — no API key necessary.
This first function will return the coordinates of specific address (I find pretty much anything works, whether it’s a full address with street number, or just a postal code, or simply a city name) as an array of coordinates:
function getCoordinates($address) {
$url = "http://maps.google.com/maps/geo?q=" . urlencode($address)
. "&output=json";
$result = file_get_contents($url);
$result = json_decode($result, 1);
if (isset($result['Placemark'])) {
list($lat, $long) = $result['Placemark'][0]['Point']['coordinates'];
} else {
$lat = $long = false;
}
return array($lat, $long);
}
and the following function will accept the lat/long coordinates of two separate points and return their distance (not road/traveling distance, but straight-shot distance) in KM:
function calculateDistance($lat1, $long1, $lat2, $long2) {
$R = 6371; // earth's mean radius in km
$dLat = deg2rad($lat2-$lat1);
$dLon = deg2rad($long2-$long1);
$lat1 = deg2rad($lat1);
$lat2 = deg2rad($lat2);
$a = sin($dLat/2) * sin($dLat/2) +
cos($lat1) * cos($lat2) *
sin($dLon/2) * sin($dLon/2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
$d = $R * $c;
// return distance in KM
return $d;
}
Now it certainly may be worthwhile to cache coordinates for a given location, depending on your usage, because retrieving the coordinates from Google for a large quantity of addresses at once can take some time.