Tôi đang cố gắng tính khoảng cách giữa hai điểm vĩ độ / kinh độ. Tôi có một đoạn mã chủ yếu hoạt động mà tôi đã rút ra từ bài đăng này nhưng tôi không thực sự hiểu cách thức hoạt động của nó.
Đây là mã:
<?php
// POINT 1
$thisLat = deg2rad(44.638);
$thisLong = deg2rad(-63.587);
// POINT 2
$otherLat = deg2rad(44.644);
$otherLong = deg2rad(-63.911);
$MeanRadius = 6378 - 21 * sin($lat1);
$xa = (Cos($thisLat)) * (Cos($thisLong));
$ya = (Cos($thisLat)) * (Sin($thisLong));
$za = (Sin($thisLat));
$xb = (Cos($otherLat)) * (Cos($otherLong));
$yb = (Cos($otherLat)) * (Sin($otherLong));
$zb = (Sin($otherLat));
$distance = $MeanRadius * Acos($xa * $xb + $ya * $yb + $za * $zb);
echo $distance;
?>
Tôi có một vài câu hỏi:
- xa, ya, za là gì? Tôi hiểu rằng chúng là các điểm trên mặt phẳng cartesian 3D nhưng chúng có liên quan đến đâu? Trung tâm của trái đất?
- Làm thế nào để
cos($xa * $xb + $ya * $yb + $za * $zb)
tính toán khoảng cách giữa các điểm? Tôi biết rằng trong 2D tôi sẽ làm điều này:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- Làm thế nào chính xác điều này sẽ được? Có một số cuộc thảo luận về điều đó trên trang khác. Nhưng tôi đặc biệt muốn sử dụng khoảng cách để biết liệu người dùng có ở trong khoảng cách như 10m, 20m hoặc 50m của nhau không. Tôi sẽ có thể làm điều này với độ chính xác tốt?
- Tôi nên sử dụng để làm
$MeanRadius
gì? Đó có phải là một giá trị hợp lý? Tôi nghĩ rằng giá trị đó giả định rằng trái đất là một hình elip.