2011-12-21 115 views
1

我想計算兩個地理位置點之間的距離,現在在我的學校和我的房子之間。距離應該接近1200米。用2個地理位置點計算距離

我得到這些值是沒有道理的。

104.247784180256 
35.017200205306295 (if I reverse lat and lon) 

谷歌地圖說:

51.987957 is N 
5.911305 is O 

爲51.987957緯度或經度?根據我從哪裏得到GPS信號的文檔應該是緯度,但我對此抱有懷疑。

float R = 6371; // km 

// 104.247784180256 

float lat1 = 5.894213; // school 
float lon1 = 51.98381; // school 

float lat2 = 5.909912; // keuken 
float lon2 = 51.988781; // keuken 

// switched > distance = 35.017200205306295 
/* 
float lon1 = 5.894213; // school 
float lat1 = 51.98381; // school 

float lon2 = 5.909912; // keuken 
float lat2 = 51.988781; // keuken 
*/ 

void setup() { 
    double d = calculateDistance(lon1, lat1, lon2, lat2); 
    println(d); 
} 

double calculateDistance(float lon1, float lat1, float lon2, float lat2) { 
    double d = Math.acos(Math.sin(lat1)*Math.sin(lat2) + 
    Math.cos(lat1)*Math.cos(lat2) * 
    Math.cos(lon2-lon1)) * R; 
    return d; 
} 
+0

關於第二個查詢,您可以選擇想要的文本部分作爲代碼,然後單擊文本區域上方提供的{}選項,並使用其他選項(如粗體等)。 – Nik 2011-12-21 10:09:18

+0

您可以通過選擇全部並按窗口頂部的{}按鈕,您可以在此輸入^ _^ – Manuel 2011-12-21 10:10:13

回答

3

您正在以錯誤的方式使用經度和緯度。 如果你搜索「@ 51.98381,5.894213」,你可以簡單地檢查谷歌地圖,這指向你的學校。並記住它是緯度,經度。

我用下面的代碼來計算(注意:我做的SQL,但其有關的想法):

((ACOS(SIN(lat1 * PI()/180) * SIN(lat2 * PI()/180) + COS(lat1 * PI()/180) * COS(lat2 * PI()/180) * COS((long1 - long2) * PI()/180)) * 180/PI()) * 60 * 1.1515 * 1.609344) 

這給回公里的距離。 另請注意,這些功能使用弧度而不是度數。

結果是1.20877685491371公里,這是你期望的1200米。

+0

非常感謝! – clankill3r 2011-12-21 14:34:28