Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mengira Jarak Geografi Menggunakan Formula Haversine dan Vincenty PHP?
Menentukan Jarak Geografi dengan Koordinat PHP
Mengira jarak antara dua koordinat geografi melibatkan formula Haversine atau Vincenty.
Formula Haversine
The Formula Haversine, dilaksanakan dalam kod PHP berikut:
class CoordDistance { // Latitude and longitude of points A and B public $lat_a, $lon_a, $lat_b, $lon_b; public $earth_radius = 6372.795477598; public $distance; public function DistAB() { $latDelta = $this->lat_b - $this->lat_a; $lonDelta = $this->lon_b - $this->lon_a; $alpha = $latDelta / 2; $beta = $lonDelta / 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 * $this->earth_radius * $c; $this->distance = $distance; } }
Formula Vincenty
Untuk mata antipodal, formula Vincenty lebih tepat:
class CoordDistance { // Latitude and longitude of points A and B public $lat_a, $lon_a, $lat_b, $lon_b; public $earth_radius = 6371000; public $distance; public function DistAB() { // Convert to radians $latFrom = deg2rad($this->lat_a); $lonFrom = deg2rad($this->lon_a); $latTo = deg2rad($this->lat_b); $lonTo = deg2rad($this->lon_b); $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); $distance = $angle * $this->earth_radius; $this->distance = $distance; } }
Kedua-dua formula mengembalikan jarak dalam unit ukuran yang sama seperti jejari bumi yang disediakan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Jarak Geografi Menggunakan Formula Haversine dan Vincenty PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!