大家好我正在寻找一个php函数来计算谷歌地图中两点之间的距离而无需使用包/ api
非常感谢您的帮助,并提前感谢您
答案 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>';