Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算多目标php的距离_Php_Google Maps_Google Distancematrix Api_Distance Matrix - Fatal编程技术网

如何计算多目标php的距离

如何计算多目标php的距离,php,google-maps,google-distancematrix-api,distance-matrix,Php,Google Maps,Google Distancematrix Api,Distance Matrix,如何从我的估算票价函数中一个接一个地获得多个目的地的距离..因为我得到的数据格式如下 我需要一个接一个地获得距离,然后将所有距离相加 请帮我实现我的预估票价功能 Array ( [pickupadd] => smartData Enterprises (I) Ltd., MIHAN, Nagpur, Maharashtra, India [delivery_add] => Array (

如何从我的估算票价函数中一个接一个地获得多个目的地的距离..因为我得到的数据格式如下

我需要一个接一个地获得距离,然后将所有距离相加

请帮我实现我的预估票价功能

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);
    }

可以使用距离矩阵

假设你有以下航路点

  • 来源
  • 路点1
  • 航路点2
  • 目的地
  • 您可以按如下方式计算距离

    $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&region=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,
    
                    );
        }
    
    编辑


    Sumit you r right.但我在问如何根据您的航路点1、航路点2逻辑在GetDrivingDistance函数中逐个传递交货地址…我更新我的问题..请帮助我..为什么要在一个函数中传递,请使用案例?我不知道航路点的数量…因为递送地址来自克隆谷歌地址文本框,可以是n个数字。所以请建议如何在估算票价功能中实现您的逻辑。。
    //assuming $waypoint as your array
    foreach($waypoint as $key=>$point) {
                            //calculate time and distance between each waypoint
                                          $distance=GetDrivingDistance($waypoint[$key-1],$point);
    }