hasrsine距离 - MySQL和PHP返回相同公式的不同结果

时间:2012-10-02 14:11:02

标签: mysql distance haversine

距离(直线)

来自:(lat)48.73233(长)2.36618

to:lat()48.84647(long)2.41026

相当于:13096.16米

如果我使用PHP公式,我会得到正确的结果。

但是当我将相同的PHP公式直接翻译成MySQL查询时 - 我得到5904.2757等。

以下是代码:

PHP:

 $distance = atan2(sqrt(pow(sin((($to_lat - $from_lat) * M_PI / 180) / 2), 2) +
         cos(($from_lat * M_PI / 180)) * cos(($to_lat * M_PI / 180)) *
         pow(sin((($to_long - $from_long) * M_PI / 180) / 2), 2)), sqrt(1 - (pow(sin((($to_lat - $from_lat) * M_PI / 180) / 2), 2) +
         cos(($from_lat * M_PI / 180)) * cos(($to_lat * M_PI / 180)) *
         pow(sin((($to_long - $from_long) * M_PI / 180) / 2), 2)))) * 2 * $radiusOfEarth;

MySQL的:

atan2(sqrt(pow(sin(((ap.Latitude - $from_lat) * pi() / 180) / 2), 2) +
             cos(($from_lat * pi() / 180)) * cos((ap.Latitude * pi() / 180)) *
             pow(sin(((ap.Longitude - $from_long) * pi() / 180) / 2), 2)), sqrt(1 - (pow(sin(((ap.Latitude - $from_lat) * pi() / 180) / 2), 2) +
             cos(($from_lat * pi() / 180)) * cos((ap.Latitude * pi() / 180)) *
             pow(sin(((ap.Longitude - $from_long) * pi() / 180) / 2), 2)))) * 2 * 6371000 as Distance 

1 个答案:

答案 0 :(得分:1)

你想要的确切。

SELECT ((ACOS(SIN(48.73233 * PI() / 180) * SIN(48.84647 * PI() / 180) + COS(48.73233 * PI() / 180) *
COS(48.84647 * PI() / 180) * COS((2.36618 - 2.41026) * PI() / 180)) * 180 / PI()) * 60 *1.1515 * 1.609344 *1000)
AS distance FROM dual;