Android 根据距离计算经度

Android 根据距离计算经度,android,gps,distance,latitude-longitude,Android,Gps,Distance,Latitude Longitude,找到了大量关于如何通过lat/lon计算距离的问题的答案,而对于“反向”问题则一无所获 我有一个X和Y的位移和一个GPS点(纬度/经度),但需要计算一个新点的坐标 使用公式: double deltaLat = dy / EARTH_RADIUS; double deltaLon = dx / EARTH_RADIUS; double lat = locLat + Math.signum(dy) * Math.toDegrees(deltaLat); // formula correct do

找到了大量关于如何通过lat/lon计算距离的问题的答案,而对于“反向”问题则一无所获

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

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

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

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

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

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);

你们有位移,但在哪个方向,我得到的不是100米,而是经度之间的-150米。我想你的公式不是很好,当我们接近极点时,情况会变得更糟。