计算2组lon和lat之间的距离

时间:2012-03-20 11:59:58

标签: distance latitude-longitude

正如我的问题所述,我正在寻找可以计算两点之间距离的函数/公式。现在我看了一些例子并找到了很棒的功能,但是当我提供2组点时,它们似乎都没有工作,它们都返回0。基本上我需要传递以下函数(lat1,lon1,lat2,lon2)并返回距离。从这个距离我可以检查另一个点是否在附近。

更新 好的,我现在正在使用以下功能,

BEGIN
    DECLARE pi, q1, q2, q3 , roundedVal  FLOAT ;
      DECLARE rads FLOAT DEFAULT 0;
      SET pi = PI();
      SET lat1 = lat1 * pi / 180;
      SET lon1 = lon1 * pi / 180;
      SET lat2 = lat2 * pi / 180;
      SET lon2 = lon2 * pi / 180;
      SET q1 = COS(lon1-lon2);
      SET q2 = COS(lat1-lat2);
      SET q3 = COS(lat1+lat2);
      SET rads = ACOS( 0.5*((1.0+q1)*q2 - (1.0-q1)*q3) ); 
      RETURN FORMAT((6371 * rads) , 1);
    END

这适用于公里数,但我要找的是米。所以我知道我对该函数中的数字进行了更改但是哪些更改了。有什么帮助吗?

4 个答案:

答案 0 :(得分:2)

我过去曾使用过这个网站,它对我有用。有很多有用的公式,并在javascript中给出了示例。

http://www.movable-type.co.uk/scripts/latlong.html

答案 1 :(得分:1)

我建议你看一下MySQL的特殊扩展。

http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

如果你不喜欢这个,这个博客可能对你有用:

http://zcentric.com/2010/03/11/calculate-distance-in-mysql-with-latitude-and-longitude/

答案 2 :(得分:0)

尝试此查询

$qry = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) *
sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * cos((`Latitude`*pi()/180))*
cos(((".$longitude."- `Longitude`)*pi()/180))))*180/pi())*60*1.1515) as distance FROM
'MyTable` WHERE distance >= ".$distance."

答案 3 :(得分:0)

将此值应用于值

double theta = src_longitude - dest_longitude;
double min_distance = (Math.sin(Math.toRadians(src_latitude)) * Math.sin(Math.toRadians(dest_latitude))) +(Math.cos(Math.toRadians(src_latitude)) * Math.cos(Math.toRadians(dest_latitude)) * Math.cos(Math.toRadians(theta)));
min_distance = Math.acos(min_distance);
min_distance = Math.toDegrees(min_distance);
min_distance = min_distance * 60 * 1.1515 * 1.609344;