2015-11-07 54 views
1

裏面我有一個點的經緯度/長檢查點是一個圓

Position louvreMuseum = new Position(48.861622, 2.337474); 

表示,我必須以米爲單位的半徑值。我需要檢查另一個點,也用lat/long表示在圈內。

如果我是在一個平面上我可以簡單地使用式

(x - center_x)^2 + (y - center_y)^2 <= radius^2 

深深在這些SO answer說明。

但是根據緯度/經度使用情況,我不能使用該公式,因爲這個星球的球形特性。

如何計算從任何給定點到中心的距離,並與半徑進行比較?

+0

聽起來像一個數學問題,而不是編程問題 – Jonesopolis

+0

@Jonesopolis:是的。是一個數學問題,應該在程序中正確編碼 – Lorenzo

+0

我使用地球座標*搜索了*距離,並發現如此多的答案 –

回答

4

函數來計算距離,以座標(從這個answer轉換爲C#)之間:

double GetDistance(double lat1, double lon1, double lat2, double lon2) 
{ 
    var R = 6371; // Radius of the earth in km 
    var dLat = ToRadians(lat2-lat1); // deg2rad below 
    var dLon = ToRadians(lon2-lon1); 
    var a = 
     Math.Sin(dLat/2) * Math.Sin(dLat/2) + 
     Math.Cos(ToRadians(lat1)) * Math.Cos(ToRadians(lat2)) * 
     Math.Sin(dLon/2) * Math.Sin(dLon/2); 

    var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a)); 
    var d = R * c; // Distance in km 
    return d; 
} 

double ToRadians(double deg) 
{ 
    return deg * (Math.PI/180); 
} 

如果兩點之間的距離小於半徑,那麼它是圓內。

相關問題