HY!
我需要计算2个GPS点之间的距离。
我读了这个问题Formulas to Calculate Geo Proximity,但我的英语太差了。
我的问题是2点最多距离1公里。 由于距离小,我需要最激动人心的公式
PHP或伪代码中的一个例子很棒
答案 0 :(得分:3)
见this page。它包含各种编程语言的great-circle distance计算函数。
在PHP中:
function getDistance($latitude1, $longitude1, $latitude2, $longitude2) {
$earth_radius = 6371; // In the unit you want the result in.
$dLat = deg2rad($latitude2 - $latitude1);
$dLon = deg2rad($longitude2 - $longitude1);
$a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * sin($dLon/2) * sin($dLon/2);
$c = 2 * asin(sqrt($a));
$d = $earth_radius * $c;
return $d;
}
答案 1 :(得分:0)
function spherical_law_of_cosines($lat_1, $lon_1, $lat_2, $lon_2, $unit = 'mi')
{
$distance = (3956 * acos(cos(deg2rad($lat_1)) * cos(deg2rad($lat_2)) * cos(deg2rad($lon_2) - deg2rad($lon_1)) + sin(deg2rad($lat_1)) * sin(deg2rad($lat_2))));
if(strcasecmp($unit, 'mi') == 0 OR strcasecmp($unit, 'miles') == 0)
{
return $distance;
}
if(strcasecmp($unit, 'km') == 0 OR strcasecmp($unit, 'kilometres') == 0 OR strcasecmp($unit, 'kilometers') == 0)
{
return 1.609344 * $distance;
}
if(strcasecmp($unit, 'm') == 0 OR strcasecmp($unit, 'metres') == 0 OR strcasecmp($unit, 'meters') == 0
)
{
return 1.609344 * 1000 * $distance;
}
if(strcasecmp($unit, 'y') == 0 OR strcasecmp($unit, 'yards') == 0)
{
return 1760 * $distance;
}
if(strcasecmp($unit, 'ft') == 0 OR strcasecmp($unit, 'feet') == 0)
{
return 1760 * 3 * $distance;
}
return $distance;
}