Как получить расстояние нескольких пунктов назначения один за другим из моей функции оценки тарифа … как я получаю данные в формате ниже.
Мне нужно получить расстояние один за другим, а затем добавить все расстояние.
Пожалуйста, помогите мне внедрить в мою функцию оценки тарифа.
Array
(
[pickupadd] => smartData Enterprises (I) Ltd., MIHAN, Nagpur, Maharashtra, India
[delivery_add] => Array
(
[0] => TCS Bhosari, MIDC, Pimpri-Chinchwad, Maharashtra, India
[1] => Reva University, Bengaluru, Karnataka, India
[2] => GTR, Narayan Shasthri Road, Mysuru, Karnataka, India
)
[deliveryType] => 2
)
ниже мой код ..
public function estimateFare(){
if (!empty($this->request->data)) {
$this->autoRender = false;
$baseFare = Configure::read('base_fare');
$pickup = $this->request->data['pickupadd'];
$deliveryType = $this->request->data['deliveryType'];
$delivery = $this->request->data['delivery_add'];
if(!empty($pickup) && !empty($delivery) && !empty($deliveryType)){
if($deliveryType == 1){
$distInKm = $this->GetDrivingDistance($pickup,$delivery);
print_r($distInKm); exit();
if(!empty($distInKm)){
foreach ($distInKm as $key => $value) {
$dist = $value;
$price = $dist * $baseFare;
print_r($price); exit();
}
}
}
}
}
}
function GetDrivingDistance($origin, $destination){
print_r($destination) ; exit();
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".urlencode($origin)."&destinations=".urlencode($destination)."&mode=driving";
$ch = curl_init($url);
// 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);
print_r($response_a);exit();
$dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
$time = $response_a['rows'][0]['elements'][0]['duration']['text'];
$dist_val = $response_a['rows'][0]['elements'][0]['distance']['value'];
$time_val = $response_a['rows'][0]['elements'][0]['duration']['value'];
return array('distance' => $dist,'time' => $time,'distance_value' => $dist_val, 'time_value' => $time_val);
}
Вы можете использовать матрицу расстояний
Предполагая, что у вас есть следующие точки
Вы можете рассчитать расстояние как ниже
$d1=GetDrivingDistance($source, $waypoint1);
$d2=GetDrivingDistance($waypoint1, $waypoint2);
$d3=GetDrivingDistance($waypoint2, $destination);
$distance=$d1['distance']+$d2['distance']+$d3['distance'];function GetDrivingDistance($origin, $destination){
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".urlencode($origin)."&destinations=".urlencode($destination)."&mode=driving®ion=AU";
$ch = curl_init($url);
// 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);
//print_r($response_a);
$dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
$time = $response_a['rows'][0]['elements'][0]['duration']['text'];
$dist_val = $response_a['rows'][0]['elements'][0]['distance']['value'];
$time_val = $response_a['rows'][0]['elements'][0]['duration']['value'];
return array('distance' => $dist,
'time' => $time,
'distance_value' => $dist_val,
'time_value' => $time_val,
);
}
РЕДАКТИРОВАТЬ
//assuming $waypoint as your array
foreach($waypoint as $key=>$point) {
//calculate time and distance between each waypoint
$distance=GetDrivingDistance($waypoint[$key-1],$point);
}
Других решений пока нет …