PHP:使用谷歌地图的两个地址之间的距离?
我试图通过Google Maps API使用下面的PHP脚本获得两个位置之间的距离,这显然是可行的(他们的托管测试url有效,添加在下面),但当我使用他们在我自己的服务器上提供的代码时,它似乎没有任何作用。。。顺便说一句,PHP工作得很好,它似乎没有做任何有趣的事情,需要我在ini文件中打开一些东西 我不确定问题是什么。。。我整天都在干这个 有什么想法吗?也许是我的 我不确定我错过了什么。我使用的是共享主机,但这不会有什么区别。从技术上讲,它应该按原样工作,不管怎样,这就是我来这里的原因——我需要一些洞察力PHP:使用谷歌地图的两个地址之间的距离?,php,google-maps,Php,Google Maps,我试图通过Google Maps API使用下面的PHP脚本获得两个位置之间的距离,这显然是可行的(他们的托管测试url有效,添加在下面),但当我使用他们在我自己的服务器上提供的代码时,它似乎没有任何作用。。。顺便说一句,PHP工作得很好,它似乎没有做任何有趣的事情,需要我在ini文件中打开一些东西 我不确定问题是什么。。。我整天都在干这个 有什么想法吗?也许是我的 我不确定我错过了什么。我使用的是共享主机,但这不会有什么区别。从技术上讲,它应该按原样工作,不管怎样,这就是我来这里的原因——我需
包含源代码的网站: 他们的现场演示: 我的完整测试代码:
<?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>
地址来自
地址
开始回显一些变量$success
是undefined@Dagon谢谢你的评论,对不起,我实际上只是忘记把它放回去了,我把它作为一个测试放在我的最后,看看是否基本的工作。。。把它放回去。我重复了$addressFrom和$addressTwo以及$distance,从中我知道$FormattedAddFrom和$formattedAddrTo必须工作。。。但还没有检查$geocodeFrom和那组变量。我将回显一些变量并报告我的发现。本地测试工作正常,硬编码地址。如果您想将其自身转储到一个文件并测试:抱歉,它在这里: