php - 使用距离矩阵从点到点计算票价
问题描述
我正在开发一个出租车应用程序,所有乘客都前往同一个目的地。
有没有办法获得乘客和最终目的地之间所有距离的总和,而不是只获得一个起点和目的地?
出租车费用计算
//Fees to driver
feesToDriver = (DistFromAToB + DistFromBToC + DistFromCToDest) * RM1.81
RatioOfPassenger = DistFromDest + DistFromFirstPassengerToCurrentPassenger / ( DistFromAToDest + DistFromBToDest + DistFromCToDest + DistFromAToB + DistFromAToB + DistFromBToC)
FeesPaidByPassenger = feesToDriver * RatioOfPassenger
计算 PHP
function get_coordinates($address)
{
$address = urlencode($address);
$url = "http://maps.google.com/maps/api/geocode/json?address=$address";
$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);
$status = $response_a->status;
if ( $status == 'ZERO_RESULTS' )
{
return FALSE;
}
else
{
$return = array('lat' => $response_a->results[0]->geometry->location->lat, 'long' => $long = $response_a->results[0]->geometry->location->lng);
return $return;
}
}
function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving";
$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);
$dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
$time = $response_a['rows'][0]['elements'][0]['duration']['text'];
return array('distance' => $dist, 'time' => $time);
}
$coordinatesFrom = get_coordinates($data['from']);
$coordinatesTo = get_coordinates($data['to']);
if ( !$coordinatesFrom || !$coordinatesTo )
{
echo 'Bad address.';
}
else
{
$dist = GetDrivingDistance($coordinatesFrom['lat'], $coordinatesTo['lat'], $coordinatesFrom['long'], $coordinatesTo['long']);
$return['distance'] = $dist['distance'];
$return['time'] = $dist['time'];
}
echo(json_encode($return));
$fee = $dist['distance'] * 2.15;
解决方案
推荐阅读
- html - Ionic 中的选框效果
- javascript - 无法调用 JSON 对象的第一个元素
- vba - 基于文本输入汇总摘要任务
- html - 标题内容对齐/定位
- c++11 - 对于指向 std::set 容器中用户定义类的指针,自定义比较类无法正常工作
- twitter - netbeans proyect 上的 Twitter4J 无法导入 jar 文件
- java - 仅使用整数计算 2^n%k
- python - 如何遍历python中的列表并获取每两个关闭项之间的比较值的布尔列表?
- javascript - 你好,你能帮我提高这个艺术代码的效率吗?
- php - 如何在我上传成功的 html 中显示 PHP 变量?