Skip to content

Instantly share code, notes, and snippets.

@jeffsmonteiro
Created December 26, 2019 19:44
Show Gist options
  • Save jeffsmonteiro/517e8f62eba170010a584006b9d4dc8c to your computer and use it in GitHub Desktop.
Save jeffsmonteiro/517e8f62eba170010a584006b9d4dc8c to your computer and use it in GitHub Desktop.
Calculates the distance between two address using PHP and Google Maps
/**
* @function getDistance()
* Calculates the distance between two address
*
* @params
* $addressFrom - Starting point
* $addressTo - End point
* $unit - Unit type
*
*/
function getDistance($addressFrom, $addressTo, $unit = ''){
// Google API key
$apiKey = 'Your_Google_API_Key';
// Change address format
$formattedAddrFrom = str_replace(' ', '+', $addressFrom);
$formattedAddrTo = str_replace(' ', '+', $addressTo);
// Geocoding API request with start address
$geocodeFrom = file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address='.$formattedAddrFrom.'&sensor=false&key='.$apiKey);
$outputFrom = json_decode($geocodeFrom);
if(!empty($outputFrom->error_message)){
return $outputFrom->error_message;
}
// Geocoding API request with end address
$geocodeTo = file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address='.$formattedAddrTo.'&sensor=false&key='.$apiKey);
$outputTo = json_decode($geocodeTo);
if(!empty($outputTo->error_message)){
return $outputTo->error_message;
}
// Get latitude and longitude from the geodata
$latitudeFrom = $outputFrom->results[0]->geometry->location->lat;
$longitudeFrom = $outputFrom->results[0]->geometry->location->lng;
$latitudeTo = $outputTo->results[0]->geometry->location->lat;
$longitudeTo = $outputTo->results[0]->geometry->location->lng;
// Calculate distance between latitude and longitude
$theta = $longitudeFrom - $longitudeTo;
$dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($latitudeTo)) + cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
// Convert unit and return distance
$unit = strtoupper($unit);
if($unit == "K"){
return round($miles * 1.609344, 2).' km';
}elseif($unit == "M"){
return round($miles * 1609.344, 2).' meters';
}else{
return round($miles, 2).' miles';
}
}
// Call the getDistance() function and pass two addresses between from which you want to calculate distance.
$addressFrom = 'Insert start address';
$addressTo = 'Insert end address';
// Get distance in km
$distance = getDistance($addressFrom, $addressTo, "K");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment