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

标签 c math geometry gis

我正在尝试查看给定的一对(纬度,经度)是否落在圆形区域内。圆心(纬度、经度值)以及半径是已知的。我使用的方法是:

  • 使用半正弦公式计算中心与给定纬度/经度之间的距离。

公式:

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 - 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,输出显示为 inside,但甚至不是 500。我不知道问题出在哪里..如果有人可以分享一些指针,我将非常感激...谢谢.

最佳答案

(我不是这方面的专家,但四处寻找教育很有趣)

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

关于检查点(纬度/经度)是否在圆内(中心纬度/经度已知),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819169/

相关文章:

javascript - 在网格中分组矩形

c - C中连接字符串时出错

c - Doxygen 的预处理器似乎错误地评估了一些宏,我可以覆盖它吗?

c - 在 Tic Tac Toe for C 中实现 MiniMax 算法

java - 限制子集总和到指定范围内

javascript - 查找 Canvas 旋转后的矢量属性

c++ - 光线追踪器 : High FOV distortion

c - 禁止 C 预处理器在另一个中使用宏

c - 如何将整数或 double 与数组中的值相乘?

javascript - 如何使用 MatterJS 计算跳跃到目标的速度?