如何根据存储在数据库中的地理点找到行进的总距离

时间:2015-02-13 05:39:55

标签: php google-maps google-direction

使用Android应用程序我将纬度和经度值发送到数据库 这是我的数据库

This is my database

现在在网页中我需要显示 K.Prathibha.N

所走的总距离

我使用 Google Maps Direction API 来查找距离,但它接受'id = 2'作为来源,'id = 5'作为目的地。 但我的座右铭是找到行进的总距离,即id_2到id_3到id_4到id_5。

我在这里使用while循环。

代码段:

<?php
          $params_string="";
            $pname = $_POST['name']; //name is passed from a dropdown
            $query = "SELECT * FROM information WHERE mobile=? ORDER BY id DESC ";      
            $result = $dbConnection->prepare($query);
            $result->execute(array($pname));                                        
            if($result->rowCount() >0)
            {
                $params = array();

                while($row = $result->fetch())
                {
                    $mobile = $row['mobile'];
                    $latitude = $row['latitude'];
                    $cname = $row['name'];  
                    $longitude = $row['longitude'];
                    $lat = "17.4136846";    
                    $long = "78.49228289999996";

                    $params = array("origin" => $latitude.",".$longitude,"destination" => $lat.",".$long,"sensor"   => 'true',"units" => 'imperial');       

//Join parameters into URL string
    foreach($params as $var => $val)
    {
    $params_string .= '&' . $var . '=' . urlencode($val); 
    }           

                }
            }

    // Request URL
    $url = "http://maps.googleapis.com/maps/api/directions/json?".ltrim($params_string, '&');

    // Make our API request
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $return = curl_exec($curl);
    curl_close($curl);

    // Parse the JSON response
    $directions = json_decode($return);

    // Show the total distance 

    print('<p><strong>Total distance:</strong> ' . ceil(($directions->routes[0]->legs[0]->distance->text)* 1.609344) .' KM'. '</p>');

    ?>

现在,如何在此处传递目标值。

我的任务是将数据库值传递给变量lat和long ....例如,我已经传递了手动值...如何同时获取数据库值,以便origin获取id 2并且destination获取id 3值

示例 - 如果它正在接受

原点为id-2,然后目的地应为id-3 next

原点为id-3,然后目的地应为id-4,依此类推

最后根据可用的地理位置给出特定日期的总行程距离。

在3天以上的时间里挣扎。

任何建议都会有很大的帮助。

2 个答案:

答案 0 :(得分:0)

您可以在while循环中连续使用调用此函数

 $latitude = $row['latitude'];
 $longitude = $row['longitude'];
 $lat = "17.4136846";    
 $long = "78.49228289999996";

$distance=distance($latitude,$longitude,$lat,$long,"k");

and the function is

    function distance($lat1, $lon1, $lat2, $lon2, $unit) 
    {

        $theta = $lon1 - $lon2;
        $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
        $dist = acos($dist);
        $dist = rad2deg($dist);
        $miles = $dist * 60 * 1.1515;
        $unit = strtoupper($unit);

        if ($unit == "K") {
          return ($miles * 1.60934);
        } else if ($unit == "N") {
          return ($miles * 0.8684);
        } else {
          return $miles;
        }
    }
//remember you pass last parameter in function k. so it you you the   //distance in kilometer

答案 1 :(得分:0)

  

嗯,你可以这样做。

例如

  $qry = mysql_query("select *  from store");
    $num = mysql_num_rows($qry);
    while($row = mysql_fetch_array($qry)){
    $lat[] = $row['lat'];
    $long[] =$long['long'];
    }
    for($i=0;$i<$num;$i++){
    $distance=distance($lat[$i],$long[$i],$lat[$i+1],$long[$i+1],"k");
    }

    function:

    function distance($lat1, $lon1, $lat2, $lon2, $unit) 
        {

            $theta = $lon1 - $lon2;
            $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
            $dist = acos($dist);
            $dist = rad2deg($dist);
            $miles = $dist * 60 * 1.1515;
            $unit = strtoupper($unit);

            if ($unit == "K") {
              return ($miles * 1.60934);
            } else if ($unit == "N") {
              return ($miles * 0.8684);
            } else {
              return $miles;