[英]PHP: Distance between 2 addresses with Google Maps?
我正在嘗試使用以下PHP腳本通過Google Maps API來獲取兩個位置之間的距離,這顯然是可行的(它們托管的測試url可以在下面添加),但是當我使用它們在我自己的服務器上提供的代碼時,似乎什么也沒做...順便說一句,PHP可以正常工作,並且似乎沒有做任何有趣的事情,而這需要我打開ini文件。
我不確定這是什么問題...整天都在發生。
有任何想法嗎? 也許是我的.ini?
我不確定我在這里缺少什么。 我正在使用共享主機,但這不會有所不同。 從技術上來說,它應該保持原樣,這就是我在這里的任何原因-我需要一些見識。
帶有源代碼的網站: http : //www.codexworld.com/distance-between-two-addresses-google-maps-api-php/#comment-24117
他們的現場演示: http : //demos.codexworld.com/distance-between-two-addresses-google-maps-api-php/
我完整的測試代碼:
<?php
/**
*
* Author: CodexWorld
* Function Name: getDistance()
* $addressFrom => From address.
* $addressTo => To address.
* $unit => Unit type.
*
**/
function getDistance($addressFrom, $addressTo, $unit){
//Change address format
$formattedAddrFrom = str_replace(' ','+',$addressFrom);
$formattedAddrTo = str_replace(' ','+',$addressTo);
//Send request and receive json data
$geocodeFrom = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrFrom.'&sensor=false');
$outputFrom = json_decode($geocodeFrom);
$geocodeTo = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrTo.'&sensor=false');
$outputTo = json_decode($geocodeTo);
//Get latitude and longitude from geo data
$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 from 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;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344).' km';
} else if ($unit == "N") {
return ($miles * 0.8684).' nm';
} else {
return $miles.' mi';
}
}
if (!empty($_POST['addrFrom']) && !empty($_POST['addrTo'])) {
$addressFrom = htmlspecialchars($_POST['addrFrom']);
$addressTo = htmlspecialchars($_POST['addrTo']);
$distance = getDistance($addressFrom, $addressTo, "K");
$success = true;
}
?>
<!DOCTYPE html>
<html>
<head></head>
<body>
<form method="post">
<p class="distance"><span>Distance:<?php if ($success == true) { echo ' ' . $distance; } ?></span> </p>
<p><label>Address From</label><input type="text" name="addrFrom" value=""></p>
<p><label>Address To</label><input type="text" name="addrTo" value=""></p>
<p><input type="submit" name="submit" value="Calculate Distance"></p>
</form>
</body>
</html>
試試看-稍微修改了您的操作方式..:
<?php
/**
* Author: CodexWorld
* Function Name: getDistance()
* $addressFrom => From address.
* $addressTo => To address.
* $unit => Unit type.
*
**/
function getDistance($addressFrom, $addressTo, $unit){
//Change address format
$formattedAddrFrom = str_replace(' ','+',$addressFrom);
$formattedAddrTo = str_replace(' ','+',$addressTo);
//Send request and receive json data
$geocodeFrom = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrFrom.'&sensor=false');
$outputFrom = json_decode($geocodeFrom);
$geocodeTo = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrTo.'&sensor=false');
$outputTo = json_decode($geocodeTo);
//Get latitude and longitude from geo data
$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 from 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;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344).' km';
} else if ($unit == "N") {
return ($miles * 0.8684).' nm';
} else {
return $miles.' mi';
}
}
if (isset($_POST['submit'])) {
$addressFrom = htmlspecialchars($_POST['addrFrom']);
$addressTo = htmlspecialchars($_POST['addrTo']);
$distance = getDistance($addressFrom, $addressTo, "K");
echo $distance;
}
?>
<!DOCTYPE html>
<html>
<head></head>
<body>
<form method="post">
<p><label>Address From</label><input type="text" name="addrFrom" value=""></p>
<p><label>Address To</label><input type="text" name="addrTo" value=""></p>
<p><input type="submit" name="submit" value="Calculate Distance"></p>
</form>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.