地图中2点之间的距离

时间:2018-06-06 09:48:11

标签: javascript php laravel

大家好我正在寻找一个php函数来计算谷歌地图中两点之间的距离而无需使用包/ api

非常感谢您的帮助,并提前感谢您

1 个答案:

答案 0 :(得分:2)

这是一对PHP函数,可以轻松计算。

首先,我们通过假设地球是一个半径为6,371,008米的完美圆形球体,找到两点之间的距离(以米为单位)。 (请注意,地球实际上并不是一个完美的球体;它在极点的半径比赤道处的半径短约21米。这将导致我们的计算中出现非常微小的不准确。)

在第二步中,我们将米转换为英里,码,英尺和公里,这样您就可以获得所需单位的距离。

他们是:

function get_meters_between_points($latitude1,$longitude1,$latitude2,$longitude2) 
{
    if (($latitude1 == $latitude2) && ($longitude1 == $longitude2)){
        return 0; 
    } // distance is zero because they're the same point

    $p1 = deg2rad($latitude1);
    $p2 = deg2rad($latitude2);

    $dp = deg2rad($latitude2 - $latitude1);
    $dl = deg2rad($longitude2 - $longitude1);

    $a = (sin($dp/2) * sin($dp/2)) + (cos($p1) * cos($p2) * sin($dl/2) * sin($dl/2));
    $c = 2 * atan2(sqrt($a),sqrt(1-$a));
    $r = 6371008; // Earth's average radius, in meters
    $d = $r * $c;

    return $d; // distance, in meters
}

function get_distance_between_points($latitude1, $longitude1, $latitude2, $longitude2) 
{
    $meters = get_meters_between_points($latitude1, $longitude1, $latitude2, $longitude2);
    $kilometers = $meters / 1000;
    $miles = $meters / 1609.34;
    $yards = $miles * 1760;
    $feet = $miles * 5280;
    return compact('miles','feet','yards','kilometers','meters');
}

以下是纽约市使用两个坐标的实际功能示例:

$point1 = array(40.713008, -74.013169);
$point2 = array(40.829643, -73.926175);
$distance = get_distance_between_points($point1['0'], $point1['1'], 
$point2['0'], $point2['1']);
echo '<p>The two points are '.round($distance['miles'],2).' miles apart.</p>';