如何通过半径与另一个坐标点和距离(Km)的坐标点?

Nir*_*Pes 4 java android point latitude-longitude coordinates

我试图覆盖半径,在地图上说5公里.我有中间的坐标.

我需要一种方法来计算并给出该圆上的点的坐标.

说明:

在此输入图像描述

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

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

(lan,lon)是一个观点.

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

    then the point is inside the circle.
Run Code Online (Sandbox Code Playgroud)

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

我糊涂了.我该怎么做雷达?

(Android应用程序)

谢谢!

Jon*_*oni 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
Run Code Online (Sandbox Code Playgroud)

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

(lat-lat0)²/A² + (lon-lon0)²/B² < 1
Run Code Online (Sandbox Code Playgroud)

在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;
}
Run Code Online (Sandbox Code Playgroud)

为了获得更准确的结果,您可以计算中心与给定点之间的距离(通常使用半正公式),但公式要复杂得多,如果必须计算许多点的距离,计算成本会很高.