使用 Haversine_formula 获取两点之间的距离

Posted

技术标签:

【中文标题】使用 Haversine_formula 获取两点之间的距离【英文标题】:getting distance between two point using Haversine_formula 【发布时间】:2014-02-17 12:02:05 【问题描述】:

这是我的代码,它给出了结果。

我使用了班格罗尔艾哈迈达巴德的坐标点。 距离差异应该接近 1500,但在这里我得到 32200

function points
      $lat_a = 12.96;
        $lon_a = 77.56;
        $lat_b = 23.03;
        $lon_b = 72.58;
        $earth_radius = 6372.795477598;
      $delta_lat = $lat_b - $lat_a ;
      $delta_lon = $lon_b - $lon_a ;
      $a = pow(sin($delta_lat/2), 2);
      $a += cos(deg2rad($lat_a)) * cos(deg2rad($lat_b)) * pow(sin(deg2rad($delta_lon/29)), 2);
      $c = 2 * atan2(sqrt($a), sqrt(1-$a));
      $distance = 2 * $earth_radius * $c;
      $distance = round($distance, 4);
        echo "<br/>dist $distance";

【问题讨论】:

距离应该是929.5 英里,你用的是什么UOM? sin() 和 cos() 期望以弧度输入;您正在使用初始化 $a 的度数 pow(sin(deg2rad($delta_lon/29)), 2)...29从何而来? @MarkBaker:正确指出。让我检查一下 【参考方案1】:
$lat_a = 12.96;
$lon_a = 77.56;
$lat_b = 23.03;
$lon_b = 72.58;

$earth_radius = 6372.795477598;

$delta_lat = $lat_b - $lat_a ;
$delta_lon = $lon_b - $lon_a ;

$a = pow(sin(deg2rad($delta_lat/2)), 2) + cos(deg2rad($lat_a)) * cos(deg2rad($lat_b)) * pow(sin(deg2rad($delta_lon/2)), 2);
$c = 2 * asin(sqrt($a));
$distance = $earth_radius * $c;
$distance = round($distance, 4);

echo "<br/>dist $distance"; // dist 1237.3685

【讨论】:

你能给我你用过的参考吗?【参考方案2】:
$a = pow(sin($delta_lat/2), 2); 

那仍然是度数,所以你应该使用

$a = pow(sin(deg2rad($delta_lat)/2), 2); 

相反。

【讨论】:

【参考方案3】:

下面是作为 php 函数的 Haversine 公式。我在网上保留了一个版本以供下载:

http://www.opengeocode.org/download/haversine/haversine.php.txt

如果你想要里程,将6372.8改为3959。另外,你可以在封闭的问题上找到很多关于远程计算的讨论:mysql Great Circle Distance (Haversine formula)

<?php
// Get Distance between two lat/lng points using the Haversine function
// First published by Roger Sinnott in Sky & Telescope magazine in 1984 (“Virtues of the Haversine”)
//
function Haversine( $lat1, $lon1, $lat2, $lon2) 

    $R = 6372.8;    // Radius of the Earth in Km

    // Convert degress to radians and get the distance between the latitude and longitude pairs
    $dLat = deg2rad($lat2 - $lat1);
    $dLon = deg2rad($lon2 - $lon1);

    // Calculate the angle between the points
    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
    $c = 2 * asin(sqrt($a));
    $d = $R * $c;

    // Distance in Kilometers
    return $d;

?>

【讨论】:

您知道获取用户确切的 long-latt 值吗?我尝试了几个 API 但仍然无能为力.. ***.com/questions/21423748/…

以上是关于使用 Haversine_formula 获取两点之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用免费增值API在地图上获取两点的getDistance

如何获取地图上两点之间的路线方向以绘制行车路线?

获取经纬度之间两点间真实距离(适用于GoogleMap,BaiduMap,Amap等)

获取 s-s-rS 报告地图中两点之间的距离

千题案例TypeScript获取两点之间的距离 | 中点 | 补点 | 向量 | 角度

根据纬度/经度获取两点之间的距离