我想显示酒店和用户之间的距离。 计算酒店和用户地址之间的距离我使用了以下代码。距离值我点击了按钮。
1)首先,我使用IP地址并从IP地址获取所有用户地址信息。
$ipAddress = $_SERVER['REMOTE_ADDR'];
$result = json_decode(file_get_contents("http://ip-api.com/json/{$ipAddress}"));
这个电话给我详细信息,如城市,国家,乡村代码,纬度,经度,拉链等。保存纬度和经度。
$user_latitude = $result->lat;
$user_longitude = $result->lon;
2)我已经在我们的数据库中拥有酒店的纬度和经度。
now I have four value. User latitude/longitude and Hotel latitude/longitude
$lat1 = $user_latitude;
$long1 = $user_longitude;
$lat2 = $hotel_latitude;
$long2 = $hotel_longitude;
3)之后使用谷歌地图API,我得到了两者的完整地址(用户和酒店)
$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng={$lat1},{$long1}&sensor=true";
$url2 = "http://maps.googleapis.com/maps/api/geocode/json?latlng={$lat2},{$long2}&sensor=true";
# Get address of User
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
$address1 = $response_a['results'][0]['formatted_address'];
# Get address of Hotel
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
$address2 = $response_a['results'][0]['formatted_address'];
$find = array("'",'"');
$replace = array("","");
$address1 = str_replace($find,$replace,$address1);
$address2 = str_replace($find,$replace,$address2);
4)最后我使用谷歌的距离矩阵API并获得两点之间的距离。
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&alternatives=true&mode=driving&language=de-DE&sensor=false";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
$distance = $response_a['rows'][0]['elements'][0]['distance']['text'];
$time = $response_a['rows'][0]['elements'][0]['duration']['text'];
5)距离保存在$distance
,总时间保存在$ time。它还提供了您在$response_a
中查看的其他详细信息。打印$response_a
的值。
但是它总是给我不正确的距离。
答案 0 :(得分:0)
This stackoverflow thread有几个Haversine formula的实现,用于距离计算。在该线程中,还包括一个PHP实现,我公开复制并粘贴在下面。
<?php function distance($lat1, $lon1, $lat2, $lon2) {
$pi80 = M_PI / 180;
$lat1 *= $pi80;
$lon1 *= $pi80;
$lat2 *= $pi80;
$lon2 *= $pi80;
$r = 6372.797; // mean radius of Earth in km
$dlat = $lat2 - $lat1;
$dlon = $lon2 - $lon1;
$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlon / 2) * sin($dlon / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
$km = $r * $c;
//echo '<br/>'.$km;
return $km;
}
?>
所有学分归到在上面链接的帖子中发布实现的人。
答案 1 :(得分:0)
如果你想要两点之间的距离,你可以使用that,但如果你想要一个行程的距离,你可能想要使用Google Directions API或一些等价物。