首頁 >後端開發 >php教程 >PHP中如何準確計算兩個座標之間的距離?

PHP中如何準確計算兩個座標之間的距離?

Linda Hamilton
Linda Hamilton原創
2024-12-03 14:48:10673瀏覽

How Can I Accurately Calculate the Distance Between Two Coordinates in PHP?

在PHP 中精確測量兩個座標之間的距離

計算地球表面上兩點之間的距離需要精確度,尤其是在天文情況下涉及距離。半正弦公式是此類計算的常用方法,但其在提供的程式碼中的實現似乎會產生不準確的結果。

半正弦公式註意事項

半正弦公式採用球面三角學來估計兩個地理座標之間的距離。雖然它可以為短距離提供準確的近似值,但對於極端距離(例如,靠近對映體),它的可靠性會降低。

替代計算公式:Vincenty

克服克服了半正矢公式的局限性,特別是對於大規模距離計算,文森蒂公式提供了更高的精度。它使用迭代方法計算沿著近似地球表面的橢球體的測地距離。

實現

下面是Vincenty 公式在PHP 中的實現:

function vincentyGreatCircleDistance($latFrom, $lonFrom, $latTo, $lonTo, $earthRadius = 6371000) {
    // Convert to radians
    $latFrom = deg2rad($latFrom);
    $lonFrom = deg2rad($lonFrom);
    $latTo = deg2rad($latTo);
    $lonTo = deg2rad($lonTo);

    $lonDelta = $lonTo - $lonFrom;
    $a = pow(cos($latTo) * sin($lonDelta), 2) +
        pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
    $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);

    $angle = atan2(sqrt($a), $b);
    return $angle * $earthRadius;
}

此實現輸出以米為單位的距離,與輸入一致$earthRadius。對於英里,您可以傳入 3959 英里作為 $earthRadius 參數。利用 Vincenty 公式可確保可靠的距離計算,即使對於極端距離也是如此。

以上是PHP中如何準確計算兩個座標之間的距離?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn