Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mengira Jarak Antara Dua Koordinat Geografi dengan Tepat dalam PHP?

Bagaimanakah Saya Boleh Mengira Jarak Antara Dua Koordinat Geografi dengan Tepat dalam PHP?

Linda Hamilton
Linda Hamiltonasal
2024-12-08 20:53:11182semak imbas

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

Mengira Jarak Antara Koordinat dalam PHP

Menentukan jarak antara koordinat geografi ialah tugas biasa dalam pembangunan web. Walau bagaimanapun, adalah penting untuk mengelakkan panggilan API yang tidak perlu dan melaksanakan kaedah pengiraan yang cekap.

Satu formula popular untuk mengukur jarak ialah formula Haversine. Ia menggunakan latitud dan longitud dua titik untuk mengira jarak antara titik tersebut, dengan mengambil kira bentuk sfera Bumi.

Walaupun anda telah menyediakan pelaksanaan formula Haversine, ia mungkin menghasilkan hasil yang tidak boleh dipercayai. Untuk menyiasat isu ini, mari semak formula dan kenal pasti kemungkinan ralat:

class CoordDistance
{
    [...]
    public function DistAB()
    {
        $delta_lat = $this->lat_b - $this->lat_a;
        $delta_lon = $this->lon_b - $this->lon_a;

        $earth_radius = 6372.795477598;

        $alpha = $delta_lat / 2;
        $beta = $delta_lon / 2;
        $a = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($this->lat_a)) * cos(deg2rad($this->lat_b)) * sin(deg2rad($beta)) * sin(deg2rad($beta));
        $c = asin(min(1, sqrt($a)));
        $distance = 2 * $earth_radius * $c;
        $distance = round($distance, 4);

        $this->measure = $distance;
    }
    [...]
}
  • Penukaran Salah: Pastikan penukaran daripada darjah kepada radian dilakukan dengan betul menggunakan deg2rad() .
  • Ralat pembulatan: Jaga kemungkinan ralat pembundaran dengan menggunakan pengiraan titik terapung berketepatan tinggi.
  • Had: Formula Haversine mempunyai had apabila mengira jarak untuk titik berhampiran titik antipodal (berpisah 180 darjah). Dalam kes sedemikian, formula alternatif seperti formula Vincenty adalah lebih sesuai.

Untuk meningkatkan kebolehpercayaan pengiraan jarak anda, pertimbangkan cadangan berikut:

Formula Haversine dengan Penambahbaikan Ketepatan:

function haversineGreatCircleDistance(float $latitudeFrom, float $longitudeFrom, float $latitudeTo, float $longitudeTo, float $earthRadius = 6371000.0) {
    ...
    $angle = 2 * asin(sqrt(pow(sin($latDelta / 2.0), 2) +
        cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2.0), 2)));
    return $angle * $earthRadius;
}

Vincenty Formula:

function vincentyGreatCircleDistance(float $latitudeFrom, float $longitudeFrom, float $latitudeTo, float $longitudeTo, float $earthRadius = 6371000.0) {
    ...
    $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;
}

Dengan melaksanakan formula yang dipertingkatkan ini, anda boleh memperoleh ukuran jarak yang lebih tepat antara koordinat dalam PHP, walaupun untuk jarak yang jauh atau titik berhampiran titik antipodal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Jarak Antara Dua Koordinat Geografi dengan Tepat dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn