2012-03-20 97 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