tính khoảng cách kinh độ vĩ độ

November 20, 2019 by Nguyễn Duy Nhân Leave a Comment

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.

Đang xem: Tính khoảng cách kinh độ vĩ độ

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ĩ độ.

Xem thêm: Sở Đồ Dự Án D'Capitale Trần Duy Hưng, Tổng Quan Dự Án Vinhomes Trần Duy Hưng

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” ) ;   ?>

<?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

Filed Under: PHP Tutorial Tagged With: định vị bằng Google Map, google map, tính khoảng cách

*
*
*

Một blogger … cùi bắp! Đơn giản: tôi muốn ghi lại những gì xảy ra xung quanh, cả công việc lẫn cuộc sống và chia sẻ với các bạn đọc. 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. Read More…

*

Tất tần tật về Lazy Loading Images

Lazy loading images (Tải lười biếng) là một mẫu thiết kế thường được sử dụng trong lập trình máy tính để trì hoãn việc khởi tạo một đối tượng cho đến thời điểm cần thiết. Lazy loading không những giúp tăng hiệu xuất và thời gian tải web hiệu quả mà còn góp phần giúp <…>

*

How to: Add Text lên ảnh bằng PHP – tạo watermark

Một trong những công việc thường xuyên mà chúng tha thường thao tác với ảnh đó là upload ảnh lên website, sau đó nhân tiện add luôn watermark để đảm bảo bản quyền và gây khó khăn cho đứa nào tính ăn cắp ảnh của mình cũng như “đánh dấu chủ quyền” cho ảnh.

*

How to: Lấy giá trị Referral URL trong PHP

Referral URL là gì ? Có thể hiểu nôm na là truy cập đến website của bạn đến từ đâu hay nói cách khác là “ai đã giới thiệu website của bạn”. Nếu bạn phát hiện được website nào mang lại cho bạn lượng truy cập lớn, bạn thể định hình chiến lược tiếp thị <…>

Nhận bài viết mới

Hãy nhập email của bạn:

Liên kết hữu ích cho bạn: MMOShark
Trở thành tác giả

Bạn sẽ đặt câu hỏi bạn sẽ được lợi ích gì từ việc viết bài trên lingocard.vn?

Chúng tôi xin trả lời bạn là những việc làm của chúng tôi, và cả bạn(nếu được) đều nhằm mục đích đem lại những điều hữu ích cho cộng đồng. Tất cả đều xuất phát từ tâm huyết của người viết đối với cộng đồng blogger và việc truyền bá kiến thức của nhân loại.

Xem thêm: Diện Tích Bến Ninh Kiều District, Về Cần Thơ Nhớ Ghé Thăm Bến Ninh Kiều

Xin xem thêm Chính sách tác giả »

Cảm ơn tác giả bài viết ???

Bạn đọc những bài viết trên lingocard.vn và giải quyết được những câu hỏi của mình, bạn muốn gửi chút ít chi phí xem như lời cảm ơn tác giả ?

Tôi sẽ rất vui nếu những bài viết của tôi có ích cho bạn đọc lingocard.vn. Phần thưởng bạn dành cho tôi dù nhỏ hay lớn luôn là một lời khích lệ thiết thực cho tôi khi đặt tay lên bàn phím. Nếu bạn có nhả ý gửi tặng tôi chút đỉnh chi phí thay cho lời cảm ơn (50k, 100k… hay hơn thế nữa). Bất cứ lúc nào bạn cũng có thể có số tài khoản của tôi tại trang Liên hệ ».

Xem thêm bài viết thuộc chuyên mục: Cách tính