我正在尝试查看给定的一对(纬度,经度)是否落在圆形区域内。圆心(纬度、经度值)以及半径是已知的。我使用的方法是:
- 使用半正弦公式计算中心与给定纬度/经度之间的距离。
公式:
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 公里。
、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,输出显示为 inside,但甚至不是 500。我不知道问题出在哪里..如果有人可以分享一些指针,我将非常感激...谢谢.
最佳答案
(我不是这方面的专家,但四处寻找教育很有趣)
由于 Harvesin 函数的参数以弧度为单位,那么纬度和经度是否应该从度数转换为弧度?
关于检查点(纬度/经度)是否在圆内(中心纬度/经度已知),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819169/