【发布时间】:2010-10-27 00:36:20
【问题描述】:
我在实现here 此处描述的功能时遇到问题。
这是我的 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});
}
我在调用函数之前将方位角转换为弧度并将距离(km)转换为弧度距离 - 所以这不是问题。
但是,当我输入坐标时,例如: 纬度 = 49.25705; lon = -123.140259; 方位角225(西南),距离1km
我得到这个返回: 纬度:-1.0085434360125864 lon:-3.7595299668539504
显然不正确,谁能看出我做错了什么?
谢谢
【问题讨论】:
-
尝试一些非常简单的输入。例如,输入 lat == lon == 0(实际上是在非洲附近),方位角为零,距离为零。你找回你的出发点了吗?如果是这样,请扩展它以尝试其他经纬度。然后尝试添加一个范围:你得到了什么有意义的东西吗?
标签: algorithm gps coordinates bearing