0

找到了很多关于如何按纬度/经度计算距离的问题的答案,而对于“反向”问题却一无所获。

我在 X 和 Y 上有一个位移和一个 GPS 点(纬度/经度),但需要计算一个新点的坐标。

使用公式:

double deltaLat = dy / EARTH_RADIUS; 
double deltaLon = dx / EARTH_RADIUS;
double lat = locLat + Math.signum(dy) * Math.toDegrees(deltaLat); // formula correct
double lon = locLon + Math.signum(dx) * Math.toDegrees(deltaLon);

计算纬度是准确的,但对于经度,我得到大约 10-15% 的误差。有没有人有同样的问题?通过位移计算经度的任何可能的公式?

4

2 回答 2

1

经度出现 10-15% 误差的原因是,对于经度,您不能使用地球的半径来计算位移。相反,您需要使用相应纬度的“圆”的半径。因此,使用您的公式,您的经度计算应该更像

double deltaLon = dx / (EARTH_RADIUS * cos(locLat))

但是,这可能会给您在极点周围带来不希望的结果,因为它cos(locLat)会接近 0,因此您可能希望对极点(甚至在它们周围)有一些特殊情况。从逻辑上讲,如果你想一想,如果你在极点,沿着 x 轴移动任何距离都不会让你到达任何地方。

于 2012-04-12T11:14:21.250 回答
0

最简单但不是最好的解决方案是:

double deltaLat = dy / EARTH_RADIUS; // up-down
double deltaLon = dx / EARTH_RADIUS ; // left-right
double lat = locLat + Math.signum(dy) * Math.toDegrees(deltaLat); // formula correct
double lon = locLon + Math.signum(dx) * Math.toDegrees(deltaLon * 1.195);
于 2012-04-13T07:34:46.417 回答