找到了大量的答案来质疑如何通过纬度/经度计算距离而没有解决“反向”问题。
我在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%的误差。 有没有人有同样的问题?任何可能通过位移计算经度的公式?
答案 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);