因为算法错误。
function encludean_method($lat1,$lon1,$lat2,$lon2)
{
$x1 = doubleval($lat1);
$y1 = doubleval($lon1);
$x2 = doubleval($lat2);
$y2 = doubleval($lon2);
$x = doubleval( pow($x2 - $x1, 2.0));
$y = doubleval( pow($y2 - $y1, 2.0));
$distance = doubleval(sqrt($x + $y));
return ($distance);
}
注意: (x 1 2 - x 2 2 ) < (x 1 - x 2 ) 2。
这就是为什么您的代码给出x = float(0.00093541820670495)
和y = float(-0.11753762299304)
. 所以,sqrt(x + y)
太接近于零了。
但是,如果您试图获得该点与地球表面之间的距离,则应使用另一个公式 - 您使用的公式仅适用于笛卡尔坐标系。
请注意,纬度和经度以度为单位。所以你得到的数字有点神秘=)
所以,在谷歌搜索了一下之后,我注意到了一些有趣的服务和公式。这是您可能尝试调用的代码:
function encludean_method($lat1, $lon1, $lat2, $lon2)
{
$R = 6372.8; // km
$lat1 = deg2rad($lat1);
$lat2 = deg2rad($lat2);
$lon1 = deg2rad($lon1);
$lon2 = deg2rad($lon2);
$a = (cos($lat2) * cos($lon2)) - (cos($lat1) * cos($lon1));
$b = (cos($lat2) * sin($lon2)) - (cos($lat1) * sin($lon1));
$c = sin($lat2) - sin($lat1);
$ch = sqrt(pow($a, 2.0) + pow($b, 2.0) + pow($c, 2.0));
$phi = 2.0 * asin($ch / 2.0);
return $R * $phi;
}
现在,encludean_method(1.5745, 103.6200, 1.5748, 103.6195)
返回0.0648375378577
值,这可能是您正在搜索的距离;以公里为单位。
这是示例和另一个(基于此答案)。这是我用来验证该代码的服务。
希望对你有帮助!=)