ฉันพยายามคำนวณระยะทางระหว่างจุดละติจูด / ลองจิจูดสองจุด ฉันมีโค้ดบางส่วนที่ใช้งานได้เป็นส่วนใหญ่ซึ่งฉันดึงออกมาจากโพสต์นี้แต่ฉันไม่เข้าใจว่ามันทำงานอย่างไร
นี่คือรหัส:
<?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;
?>
ฉันมีคำถามสองสามข้อ:
- xa, ya, za คืออะไร ฉันเข้าใจว่าพวกเขาเป็นจุดบนระนาบคาร์ทีเซียน 3 มิติ แต่พวกมันสัมพันธ์กับที่ไหน? ศูนย์กลางของโลก?
- สิ่งนี้
cos($xa * $xb + $ya * $yb + $za * $zb)
คำนวณระยะห่างระหว่างจุดต่าง ๆ ได้อย่างไร? ฉันรู้ว่าใน 2D ฉันจะทำสิ่งนี้:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- สิ่งนี้จะแม่นยำแค่ไหน? มีการอภิปรายเกี่ยวกับเรื่องนั้นในหน้าอื่น ๆ แต่ฉันต้องการใช้ระยะทางโดยเฉพาะเพื่อบอกว่าผู้ใช้อยู่ในระยะเช่น 10m, 20m หรือ 50m ของกันและกัน ฉันจะสามารถทำสิ่งนี้ได้อย่างแม่นยำหรือไม่?
- ฉันควรใช้ทำ
$MeanRadius
อะไร นั่นคือคุณค่าที่สมเหตุสมผลหรือไม่? ฉันคิดว่าค่านั้นถือว่าโลกเป็นวงรี