检查点(纬度/经度)是否在圆内(中心纬度/长度已知)

时间:2010-09-29 06:12:52

标签: c math geometry gis

我试图查看给定的一对(lat,long)是否属于圆形区域。圆的中心是已知的(纬度,长值)以及半径。我用过的approcah是:

  • 使用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.我不知道问题出在哪里......如果有人能分享一些指示,真的很感激......谢谢

2 个答案:

答案 0 :(得分:4)

(我在这一切方面都不是专家,但环顾四周寻找教育很有趣)

由于Harvesin函数的参数是弧度,纬度和经度是否应该从度数转换为弧度?

答案 1 :(得分:0)

首先,我要检查两点(中心和给定)之间的距离最终是什么。然后我会确保你使用所有正确的单位(米v。英里,弧度v。度)。

如果你没有在那里发现错误,我会开始查看你的Haversine实施与wikipedia上发布的实施之一。

希望有所帮助。