Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mengira Jarak Antara Dua Koordinat Geografi dengan Tepat dalam 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; } [...] }
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!