2012-03-20 95 views
0

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

UPDATE 好了,所以我现在用下面的函数,

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 

这正常工作与多公里,但我所寻找的是米。所以我知道我已经改变了该功能中的数字,但是哪些和哪些。任何帮助?

+0

呃,什么语言?和[你有什么尝试](http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – ghoti 2012-03-20 12:17:20

+0

对不起,语言是mysql,我有公式计算公里数,现在我只需要计算公尺。感谢所有的帮助家伙! – 2012-03-20 13:52:44

+0

将km改为m只需将结果乘以1000.这就是“k”的含义:“kilo”是“千”。 – 2012-03-20 16:52:05

回答

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." 
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; 
+0

我不明白你在这里做什么。什么是theta?为什么你将距离转换成度?什么是60 * 1.1515 * 1.609344? min_distance(英尺/米/里/海里/公里)的单位是多少? – TreyA 2012-03-20 12:50:29

+0

对不起..我的错误,编辑了答案。看一看 – skaur 2012-03-20 20:25:43