Created
July 21, 2020 00:04
-
-
Save kingjmaningo/970e1efadb8815586c64615729cb2c37 to your computer and use it in GitHub Desktop.
Get distance between two locations with 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
<?php | |
/** | |
* @function getDistance() | |
* Calculates the distance between two address | |
* | |
* @params | |
* $addressFrom - Starting point | |
* $addressTo - End point | |
* $unit - Unit type | |
* | |
* @author CodexWorld | |
* @url https://www.codexworld.com | |
* | |
*/ | |
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