我试图覆盖半径,让我们说地图上的5公里。我有中间的坐标。
我需要一种方法来计算并给出该圆上的点的坐标。
解释
(我需要它从我的服务器获取__Km半径内的坐标点,如果有更好的方法,请分享。ty!)
我会检查坐标是否在圆圈内,或者不是:
(lan,lon)是一个观点。
if ((lat<x1 && lat>x2) && (lon<y1 && lon>y2))
then the point is inside the circle.
然后问题是在世界某些地方它不起作用......
我很困惑。我如何制作雷达?(android app)
谢谢!
答案 0 :(得分: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;
}
为了获得更准确的结果,您可以compute the distance在中心和给定点之间(通常使用haversine formula),但公式要复杂得多,如果必须,计算成本会很高计算许多点的距离。
答案 1 :(得分: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
}