【发布时间】:2021-04-15 16:13:29
【问题描述】:
我正在寻找一种平滑的方法来计算两个 GPS 点之间的距离,所以我得到的结果如下:“你必须向上走 x 米,向左走 y 米 - 所以我可以使用 2d-坐标系,我的位置为 (0,0),其他位置显示 (x, y) 距离我的位置的距离,以米为单位。
我的想法是使用半正弦公式计算点之间的距离。 (这会返回我的斜边)
除此之外,我还在计算这两点之间的方位角。这是我的 Alpha。
有了这两个值,我想使用基本的三角函数来解决我的问题。
于是我尝试计算:catheti_1 = sin(alpha) * hypotenuse, catheti_2 = cos(alpha) * hypotenuse。
也许我做错了什么,但目前我的结果毫无用处。
所以我的问题是:如何计算两个 GPS 点之间的 x 和 y 方向的距离?
我正在按照以下过程计算 alpha:
public static double bearingTo(GPSBean point1, GPSBean point2) {
double lat1 = Math.toRadians(point1.latitude);
double lat2 = Math.toRadians(point2.latitude);
double lon1 = Math.toRadians(point1.longitude);
double lon2 = Math.toRadians(point2.longitude);
double deltaLong = lon2 - lon1;
double y = Math.sin(deltaLong) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
* Math.cos(lat2) * Math.cos(deltaLong);
double bearing = Math.atan2(y, x);
return (Math.toDegrees(bearing) + 360) % 360;
}
【问题讨论】:
-
你是如何计算
alpha的? -
我已经添加了 alpha 的方法 ;)
-
@Borian 不。这不是重复的,因为我不需要这两点之间的直接距离。我知道 harversine 公式,但我必须在出租车几何中“行走”;)
-
也许很明显,但您确定您将弧度传递给
sin()和cos()(在计算catheti_1和catheti_2时)?只是为了丢弃它 -
您至少有一个错字:您的
lat2使用的是point2.longitude。不会得到正确的答案......