4

我试图覆盖一个半径,让我们在地图上说 5 公里。我有它中间的坐标。

我需要一种方法来计算并给我那个圆上的点的坐标。

解释:

在此处输入图像描述

(我需要它从我的服务器获取 __Km 半径内的坐标点,如果有更好的方法,请分享。ty!)

我会检查坐标是否在圆圈内:

(lan,lon) 是一个点。

if ((lat<x1 && lat>x2) && (lon<y1 && lon>y2))

    then the point is inside the circle.

但是问题是在世界的某些地方它不起作用......

我很困惑。如何制作雷达?

(安卓应用)

谢谢!

4

2 回答 2

5

当您不太靠近极点时,您可以在经纬度空间中用椭圆近似地球表面上的一个小的真实圆圈。椭圆是赤道上的一个圆圈,但随着您接近两极而变得越来越挤压。

假设您感兴趣的圆心坐标为 ,(lat0, lon0)半径为r = 5km,设置:

C = 40075.04km                - Earth circumference
A = 360*r/C                   - semi-minor in north-south direction 
B = 360*r/(C*cos(lat0))       - semi-major in east-west direction

现在(lat,lon)椭圆内的点满足这个条件:

(lat-lat0)²/A² + (lon-lon0)²/B² < 1

在 Java 中:

boolean pointInCircle(double lat0, double lon0, double r, double lat, double lon) {
    double C = 40075.04, A = 360*r/C, B = A/Math.cos(Math.toRadians(lat0));
    return Math.pow((lat-lat0)/A, 2) + Math.pow((lon-lon0)/B, 2) < 1;
}

为了获得更准确的结果,您可以计算中心和给定点之间的距离(通常使用半正弦公式),但是如果您必须计算许多点的距离,这些公式要复杂得多,而且计算起来可能会变得昂贵。

于 2013-09-25T18:39:44.720 回答
1
double dx = x - x0;
double dy = y - y0;
if (dx * dx + dy * dy < r * r) {
    // point (x, y) is inside the circle centered (x0, y0) with radius r
}
于 2013-09-25T18:20:51.700 回答