2015-11-07 68 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); 
} 

如果两点之间的距离小于半径,那么它是圆内。