Created
December 26, 2019 19:44
-
-
Save jeffsmonteiro/517e8f62eba170010a584006b9d4dc8c to your computer and use it in GitHub Desktop.
Calculates the distance between two address using PHP and Google Maps
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @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