当前位置: 首页 > 知识库问答 >
问题:

检查点是否在圆内

萧伟兆
2023-03-14

我有一个用lat/long表达的观点

Position louvreMuseum = new Position( 48.861622, 2.337474 );

我有一个以米表示的半径值。我需要检查另一个点,也用拉特/long表示,是否在圆内。

如果我在平面上,我可以简单地使用公式

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

正如这些答案所深刻解释的那样。

然而,根据纬度/经度的用法,我不能使用这个公式,因为行星是球形的。

如何计算从任何给定点到中心的距离以与半径进行比较?

共有1个答案

江阳羽
2023-03-14

函数计算两个坐标之间的距离(从这个答案转换为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);
    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);
}

如果两点之间的距离小于半径,则在圆内。

 类似资料:
  • 我正在构建一个应用程序,它必须根据圆形特征向用户显示一些标记。 具体来说,将使用两个参数调用PHP脚本: 圆心(Lat、Lng格式) 该脚本有很多(约16000)个坐标对,但他不用花时间扫描所有坐标对。 相反,将整个内容发送到客户端浏览器并让他详细说明这件事的速度太慢了。 所以,我想知道这一点:我可以通过PHP扫描所有条目,然后只去听坐标在圆圈中的js吗? 谢谢你,里卡多

  • 我从我的网络商店API调用中获取XML,其结构非常像下面的示例: 其中有更多的参数,数量取决于许多外部因素。我正在尝试获取用户名,当id“111”和id“112”的值是我要查找的值时 上述代码按预期返回“userOne”和“userTwo”。 问题是,Id“111”要么有值“Param 1 is on”要么什么都没有,如果没有值,它就不会显示在XML中。所以我需要一个表达式来检查id为“111”的

  • 我偶尔收到以下信息: 这发生在具有表的页面中,其中的行延伸到视点之后。 我用来在表中选择随机行的方法 是否有一种方法来检查是否有元素在#Focus之后?

  • 问题内容: 我先画了一条线,然后画了一个点,然后我要检查该点是否在线上。我已经在数组中取得了一条线坐标(因为有多条线)。我想在最后一行检查当前点吗? 问题是当一点在直线的起点附近或直线大约在m1和c1的垂直值相差很大时。因此,检测点是否在线上存在一个问题。我如何检查这种情况? 问题答案: 如果点(xP,yP)在从(x1,y1)到(x2,y2)的线段上,则返回0.0。 对无限行执行相同的操作。

  • 问题内容: 我有点麻烦。我有一项作业,要求我找出第二个圆圈是否重叠,内部是否重叠或两者都不存在。但是,我在检查重叠以及第二个圆是否在第一个圆内时遇到了麻烦。 (使用的变量为x1,x2,y1,y2,r1,r2,距离) 这是我所拥有的: 我担心问题在于重叠和内部检查,但是我无法弄清楚如何正确设置它,因此我可以可靠地检查第二个圆是否在第一个圆的内部。 当我尝试了多种方法时,任何帮助或建议都将不胜感激,但

  • 问题内容: 好的,所以我正在为Java类做一个赋值,赋值的一部分是找出一个点是否在矩形的尺寸之内。所以我创建了这段代码: 我也创建了一个类,这就是为什么我要求一个参数的原因。为了测试这一点,我在Main类中创建了一个简单的语句: 点的位置是(6,7)。矩形1的点,宽度和高度分别为(4,5),9和3。我知道这一点在第一个矩形内,但没有显示该语句,这意味着我创建的i 一定有问题,但我没有看到错误,也许