当您不太靠近极点时,您可以在经纬度空间中用椭圆近似地球表面上的一个小的真实圆圈。椭圆是赤道上的一个圆圈,但随着您接近两极而变得越来越挤压。
假设您感兴趣的圆心坐标为 ,(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;
}
为了获得更准确的结果,您可以计算中心和给定点之间的距离(通常使用半正弦公式),但是如果您必须计算许多点的距离,这些公式要复杂得多,而且计算起来可能会变得昂贵。