如何在php中计算两个位置之间的距离(以公里为单位)?

Posted

技术标签:

【中文标题】如何在php中计算两个位置之间的距离(以公里为单位)?【英文标题】:How to calculate distance between two locations in kilometers, in php? 【发布时间】:2016-08-08 07:16:36 【问题描述】:

我有一个存储服务的表,服务表的列是纬度,经度,即服务的位置。

现在我想获取用户的当前位置并搜索距离用户10公里左右的可用服务。

为此,我搜索了如何计算两个位置之间的距离并尝试了其中一个代码,但它在 JSON 中给出了一些语法错误。

错误是语法错误,(意外的'S'),我也没有通过这个公式得到以公里为单位的结果。

     public function searchVendors($lattitudeFrom,$longitudeFrom)
    
        $lattitudeTo = -10.4212157;
        $longitudeTo = 28.6031842;


        $dist = $this -> haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000);

        return $dist;

    

 public function haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)

    // convert from degrees to radians
    $latFrom = deg2rad($latitudeFrom);
    $lonFrom = deg2rad($longitudeFrom);
    $latTo = deg2rad($latitudeTo);
    $lonTo = deg2rad($longitudeTo);

    $latDelta = $latTo - $latFrom;
    $lonDelta = $lonTo - $lonFrom;

    $angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
        cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
    return $angle * $earthRadius;

getVendors.php

  <?php

header("Content-type: application/json");

   // if ( $_SERVER['REQUEST_METHOD']=='POST') 
        include_once ("../include/Vendor.php");
    try 

    $con = DB::getConnection();

    $raw = file_get_contents("php://input");
    $data = json_decode($raw, true);

    $longitude = $data->longitude;
    $lattitude = $data->lattitude;

    $v = new Vendor();
    $response = $v -> searchVendors($lattitude,$longitude);


    json_encode($response);


    echo $response;

        if ( $response == null ) 
            $response = json_encode(array("result" => -2, "message" => "Empty result"));
            echo $response;
         else 
            echo $response;
        
     catch(Exception $e) 
        $result = array("result" => -1, "message" => $e -> getMessage());
        echo json_encode($result);
        
//
?>

我怎样才能做到这一点?任何人都可以帮忙.. php 中非常新。

【问题讨论】:

您能否提供完整的错误消息以及文​​件名和行号? 【参考方案1】:

php cal_dist(a,b,key=none,spec=km)

【讨论】:

欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性!【参考方案2】:

尝试使用此代码以 KM 或 MILES 为单位查找距离

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.609344);
       else if ($unit == "N") 
          return ($miles * 0.8684);
         else 
            return $miles;
          
    

【讨论】:

试过这段代码,还是出现同样的语法错误,我的其他代码有什么问题吗? @Rax Shah

以上是关于如何在php中计算两个位置之间的距离(以公里为单位)?的主要内容,如果未能解决你的问题,请参考以下文章

两个地理位置之间的距离(以英尺为单位)

如何将距离(以公里为单位)添加到以度和分钟为单位的位置坐标中,以获得 Java 中的新位置坐标?

javascript 计算地球坐标之间的距离(以公里为单位)

地理空间坐标和距离(以公里为单位)

如何在geodjango中转换英里公里

计算两个经纬度点之间的距离? (Haversine 公式)