Hướng dẫn dùng longuitud trong PHP

You are here: Home / PHP & MySQL / PHP Tutorial / How to: tính khoảng cách giữa 2 điểm sử dụng kinh độ, vĩ độ trong PHP

Hướng dẫn dùng longuitud trong PHP

Mình đã từng có bài viết về chủ đề này trước đây, nhưng sử dụng Google Map API để tính khoảng cách từ điểm A đến điểm B. Lần này chúng ta sử dụng PHP để tính khoảng cách từ một điểm đến điểm còn lại – cũng sử dụng kinh độ và vĩ độ như Google Map.

Công thức tính khoảng cách Haversine

Vấn đề tính khoảng cách từ điểm A đến điểm B có thể được giải quyết bằng công thức Haversine. Để áp dụng được công thức này, chúng ta cần có vị trí điểm A và điểm B trên bề mặt trái đất.

Sau đó, bạn cần chuyển đổi kinh độ và vĩ độ tương ứng từ đơn vị đô là độ sang đơn vị đo radian.

Hãy xem công thức cơ sở của phép đổi đơn vị này:

Latitude in Radians= (Latitude /180) pi radians
=(Latitude * 0.01746031) radians
Longitude in Radians= (Longitude /180) pi radians
=(Longitude * 0.01746031) radians

Ngoài ra, chúng ta có bán kính của trái đất là 3,936 miles, tương đương với 6.378 km. Như vậy , công thức tính khoảng cách giữa 2 điểm sẽ là:

Distance= [6378 * acos((sin(latitude1) * sin(latitude2)) + cos(latitude1) * cos(latitude2) * cos(longitude2 – longitude1))] ở kilomet.

Nếu bạn muốn tính theo đơn vị là mile, công thức sẽ là:

Distance= [3936 * acos((sin(latitude1) * sin(latitude2)) + cos(latitude1) * cos(latitude2) * cos(longitude2 – longitude1))] ở kilomet.

Bây giờ, chúng ta sẽ đưa công thức này vào PHP để tính được khoảng cách giữa 2 điểm A và B dựa trên kinh độ và vĩ độ.

The distance between two places using latitude and longitude in PHP

Cùng xem đoạn mã biểu diễn công thức Haversine đã nói ở trên nhé.

<?php 
 
      // latitude and longitude of Two Points 
      $latitude1 = 19.017656 ; 
      $longitude1 = 72.856178; 
      $latitude2 = 40.7127; 
      $longitude2 = -74.0059;  
 
      //Converting to radians
      $longi1 = deg2rad($longitude1); 
      $longi2 = deg2rad($longitude2); 
      $lati1 = deg2rad($latitude1); 
      $lati2 = deg2rad($latitude2); 
 
      //Haversine Formula 
      $difflong = $longi2 - $longi1; 
      $difflat = $lati2 - $lati1; 
 
      $val = pow(sin($difflat/2),2)+cos($lati1)*cos($lati2)*pow(sin($difflong/2),2); 
 
      $res1 =3936* (2 * asin(sqrt($val))); //for miles
    $res2 =6378.8 * (2 * asin(sqrt($val))); //for kilometers
 
      //display distance in miles
      print_r('Distance:'.$res1.' '.'miles '.'OR '.$res2.' '.' kilometers'); 
 
?>

Output mình sẽ nhận được:

Distance:7748.9344580629 miles OR 12558.156280765 kilometers

Mình viết cái blog này từ thời mình hàng U2x, giờ là 3Ux và sắp bước sang U4x. Nói tóm lại là mình già rồi mấy bạn trẻ ơi! Vì vậy mấy bạn đọc để tham khảo, đọc để chia sẻ và đọc để học hỏi là chính chứ đừng có chửi thề, đừng có gây war nha. Mình già - mình ngại va chạm lắm... Nếu bạn cảm thấy bài viết có nhiều điểm không chính xác, hãy comment và chia sẻ để tôi còn được học hỏi từ những góp ý của bạn.