我想过滤搜索结果的距离,以搜索条件中给定的位置。每个优惠都有自己的位置,包括(德语)邮政编码和属于它的城市。搜索条件包含相同的原理。
因此,最后,搜索者的位置以及优惠的多个位置。
另外,所有报价都有一个半径,他们可以在其中运行。
然后,我想筛选出所有与搜索者位置距离更远的商品,而不是他们的操作半径。
我已经使用这个PHP-代码:谷歌GetDistance函数无法正常工作
$position = $_GET['position']!='' ? $_GET['position'] : '';
为了从搜索位置我的网址。
$Results = $database->SearchResults('Conditions of the database Query');
它从URL中的信息构建一个查询并搜索我的数据库。
while ($row = mysqli_fetch_array($Results)) {
echo $functions->GetDistance($position, $row[1], "K")."<br>";
}
这个while循环应该是每个报价的距离,让我给搜索
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';
}
}
的postition这是函数,我在这个论坛上获得两个地址之间的距离发现。
它在大多数时间都有效,我可以获得正确的距离,例如:77.4640983104公里。
但每隔两三奔跑,我得到这个错误:
Notice: Trying to get property of non-object
和
Notice: Undefined offset: 0
“获取从地理数据的纬度和经度”部分和错误的距离为0 km,也输出在。
我真的不知道自己在做什么错误,但我希望有人能向我解释,应该改变什么,或者是否以错误的方式接近整个事情。
非常感谢您提前,祝您有美好的一天!
您需要验证'file_get_contents'没有遇到错误。 – geocodezip
这不会删除错误。 –