从距离计算经度

时间:2012-04-12 10:48:01

标签: android gps distance latitude-longitude

找到了大量的答案来质疑如何通过纬度/经度计算距离而没有解决“反向”问题。

我在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%的误差。 有没有人有同样的问题?任何可能通过位移计算经度的公式?

2 个答案:

答案 0 :(得分:1)

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

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

然而,由于cos(locLat)将接近0,这可能会给你带来不希望的结果,所以你可能想要为极点(或甚至它们周围)设置一些特殊情况。从逻辑上讲,如果你想一想,如果你在极点,沿着x轴移动任何距离都无论如何也无法到达任何地方。

答案 1 :(得分: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);