我想创建一个GPS坐标的大型数据库,可以通过说"返回[此坐标]的'n'米内的所有坐标"来查询.
我需要它尽可能高效,因此循环遍历数据库中的所有坐标并计算坐标是否在'n'米内并不是一个理想的解决方案.
有更简单的解决方案吗?
谢谢
这是我的Java实现:
private static double[] pointRadialDistance(double lat1, double lon1,
double radianBearing, double radialDistance) {
double lat = Math.asin(Math.sin(lat1)*Math.cos(radialDistance)+Math.cos(lat1)
*Math.sin(radialDistance)*Math.cos(radianBearing));
double lon;
if(Math.cos(lat) == 0) { // Endpoint a pole
lon=lon1;
}
else {
lon = ((lon1-Math.asin(Math.sin(radianBearing)*Math.sin(radialDistance)/Math.cos(lat))
+Math.PI) % (2*Math.PI)) - Math.PI;
}
return (new double[]{lat, lon});
}
Run Code Online (Sandbox Code Playgroud)
我将度数轴承转换为弧度,并在调用函数之前将距离(km)转换为弧度距离 - 这不是问题所在.
但是,当我输入坐标时:lat = 49.25705; lon = -123.140259; 轴承225(西南),距离1km
我得到了这个:lat:-1.0085434360125864 lon:-3.7595299668539504
它显然不正确,谁能看到我做错了什么?
谢谢