2010-09-29 99 views
2

我想看看給定的一對(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 - lat1delta_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非常感激,如果任何人都可以分享一些指針...謝謝。

+0

考慮到上述輸入,你的代碼爲a,c和d計算了什麼值? – LarsH 2010-09-29 06:24:45

+0

這是正確的嗎? 'atan2(sqrt(a),sqrt(1-a))' – Sjoerd 2010-09-29 06:28:51

回答

0

首先,我會檢查一下你的距離(給出的中心&)到底是什麼。然後我確定你使用了所有正確的單位(米數英里,弧度度數)。

如果您在那裏沒有發現錯誤,我會開始查看您的Haversine實現與wikipedia上發佈的其中一個。

希望有所幫助。

+0

嗨..感謝您的回覆......我發現這個問題大約在發佈這個2分鐘之後......對於LarsH的回覆..是的,公式是正確。這和asin(sqrt(a))是一樣的,就像它在不同的參考文獻中給出的一樣...... w.r.t.t.t.t.t布賴恩的回答..賓戈......把指甲打在頭上。我沒有在一個地方正確轉換。我發佈了這個權利後,我發佈了這個..以及在經過幾個小時後感到沮喪...無論如何...非常感謝答覆..am檢查和再次檢查..如果任何其他毛刺光..乾杯!!! – user461387 2010-09-29 06:40:47

+0

當然,很高興你找到了它。爲了阻止更多的人回過頭來,你應該接受答案。 – Bryan 2010-09-29 15:41:59

4

(我遠不在這一切的專家,但很好玩到處尋找教育)

因爲用於Harvesin函數的參數是弧度,應該緯度和經度從度轉換爲弧度?

+0

是的,聽起來像Matthieu已經找到了問題。 – LarsH 2010-09-29 06:47:17

+0

是的..經緯度和日誌需要轉換爲弧度......乾杯! – user461387 2010-09-29 08:59:21

+3

然後你應該接受答案。 – 2010-09-29 12:26:44

相關問題