I'm trying to establish a function which calculates the distance in between two locations by geocoding them via your geocode api.
The Link itself, when pasted in the browser seems to be working fine, but using phps function file_get_contents it returns failed to open stream and returns timeout.
Here the code:
function getDistance($addressFrom, $addressTo, $unit = ''){
// Google API key
$apiKey = 'gc5HYKu9JFdc0gkb5X8i0C7m6iFxsvt3';
// Change address format
$formattedAddrFrom = str_replace(' ', '+', $addressFrom);
$formattedAddrTo = str_replace(' ', '+', $addressTo);
// Geocoding API request with start address
$geocodeFrom = file_get_contents('http://www.mapquestapi.com/geocoding/v1/address?location='.$formattedAddrFrom.'&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('http://www.mapquestapi.com/geocoding/v1/address?location='.$formattedAddrTo.'&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]->locations[0]->latLng->lat;
$longitudeFrom = $outputFrom->results[0]->locations[0]->latLng->lng;
$latitudeTo = $outputTo->results[0]->locations[0]->latLng->lat;
$longitudeTo = $outputTo->results[0]->locations[0]->latLng->lng;
EDIT - Full code:
<?php
/**
* @function getDistance()
* Calculates the distance between two address
*
* @params
* $addressFrom - Starting point
* $addressTo - End point
* $unit - Unit type
*
* @param $addressFrom
* @param $addressTo
* @param string $unit
* @return string
*
* @author CodexWorld
* @url https://www.codexworld.com
*/
function getDistance($addressFrom, $addressTo, $unit = ''){
// Google API key
$apiKey = 'gc5HYKu9JFdc0gkb5X8i0C7m6iFxsvt3';
// Change address format
$formattedAddrFrom = urlencode($addressFrom);
$formattedAddrTo = urlencode($addressTo);
// Geocoding API request with start address
$geocodeFrom = file_get_contents('http://www.mapquestapi.com/geocoding/v1/address?location='.$formattedAddrFrom.'&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('http://www.mapquestapi.com/geocoding/v1/address?location='.$formattedAddrTo.'&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]->locations[0]->latLng->lat;
$longitudeFrom = $outputFrom->results[0]->locations[0]->latLng->lng;
$latitudeTo = $outputTo->results[0]->locations[0]->latLng->lat;
$longitudeTo = $outputTo->results[0]->locations[0]->latLng->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';
}
}
$addressFrom = "Am Felde 52, 22765 Hamburg, Germany";
$addressTo = "Beltgens Garten 25, 20537 Hamburg, Germany";
$distance = getDistance($addressFrom, $addressTo, "K");
echo $distance;
And the errors:
Warning: file_get_contents(http://www.mapquestapi.com/geocoding/v1/address?location=Am+Felde+52+227...): failed to open stream
...
Fatal error: Maximum execution time of 120 seconds exceeded in C:\xampp\htdocs...
I'm relatively new to this topic, the snippet is by codexworld.com.
Can anyone see the issue? Any help would be highly appreciated
Regards,
kuba44