我想看看給定的一對(lat,long)是否會落入圓形區域。圓的中心是已知的(lat,long值)以及半徑。我使用的程序是:檢查一個點(lat/long)是否在一個圓圈內(Center lat/long known)
- 使用Haversines公式計算中心和給定經緯度之間的距離。
公式:
a = (sin(delta_lat/2))^2 + cos (vp_Current.v_Latitude) *
cos(vp_CentreOfCircle.v_Latitude) * (sin(delta_long/2))^2;
c = 2 * atan2(sqrt(a), sqrt(1-a));
d = R * c;
其中:R = 6371 Km.
,delta_lat = lat2 - lat1
,delta_long = long2 - long1
- 然後檢查該距離小於半徑,看它是否是圓內。
我已經用C編寫了代碼,但是當我輸入下面的數據時,輸出表明這個點在外面而不是在圓圈內(點位於我在谷歌地圖上檢查的範圍內)。
Centre(lat/long) = (19.228177, 72.685547)
Given point = (18.959999, 72.819999)
Radius = 30 miles (about 49 Km but entered as 50 in the program).
奇怪的是,如果我進入半徑爲5000,輸出稱內,但即使是500不是我不知道問題出在哪裏is..would非常感激,如果任何人都可以分享一些指針...謝謝。
考慮到上述輸入,你的代碼爲a,c和d計算了什麼值? – LarsH 2010-09-29 06:24:45
這是正確的嗎? 'atan2(sqrt(a),sqrt(1-a))' – Sjoerd 2010-09-29 06:28:51