Haizzz! Một tháng ôm quá nhiều dự án gấp deadline đến mệt nhoài nên cũng chẳng có thời gian viết blog. Thấy bỏ bê cũng quá lâu nên cũng tranh thủ viết 1 bài.
Số là dự án mình đang làm có 1 yêu cầu tìm khoảng cách giữa 2 địa điểm để rồi tìm ra vị trí gần nhất giữa các khoảng cách. Cứ đinh ninh là Google Maps nó sẽ hỗ trợ nhưng rồi tìm… quài (hoài) không thấy và rồi biết rằng Google Maps nó chỉ hỗ trợ lấy kinh độ và vĩ độ của 1 điểm và rồi mình sẽ dựa vào 2 thông số đó để định vị vị trí rồi dùng công thức để tính khoảng cách giữa 2 vị trí.
Cũng xin viết bài chia sẻ hàm tính khoảng cách giữa 2 vị trí bằng kinh độ và vĩ độ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function distance($lat1, $long1, $lat2, $long2, $unit) { if (($lat1 == $lat2) && ($long1 == $long2)) { return 0; } else { $theta = $long1 - $long2; $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; } } } |
Ví dụ:
1 2 3 | echo distance(32.9697, -96.80322, 29.46786, -98.53506, "M") . " dặm<br>"; echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " kilomet<br>"; echo distance(32.9697, -96.80322, 29.46786, -98.53506, "N") . " hải lý<br>"; |
Chúc các bạn thành công.