在 PHP 中计算坐标之间的距离
确定地理坐标之间的距离是 Web 开发中的常见任务。然而,避免不必要的 API 调用并实现高效的计算方法至关重要。
测量距离的一个流行公式是半正弦公式。它使用两点的纬度和经度来计算它们之间的距离,同时考虑到地球的球形。
虽然您提供了半正弦公式的实现,但它可能会产生不可靠的结果。为了调查这个问题,让我们检查一下公式并找出潜在的错误:
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; } [...] }
要增强距离计算的可靠性,请考虑以下建议:
改进的半正矢公式精度:
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公式:
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; }
通过实施这些改进的公式,您可以在 PHP 中获得更准确的坐标之间的距离测量,即使对于较大距离或靠近对映点的点也是如此。
以上是PHP中如何准确计算两个地理坐标之间的距离?的详细内容。更多信息请关注PHP中文网其他相关文章!