0

我正在编写一个跟踪我的路线的应用程序。我每分钟都从 GPS 请求更新,它工作正常。它向我展示了我的确切观点。当我想计算当前点与前一个点之间的距离时,它可以正常工作,但有时它会计算出完全错误的距离(我移动了大约 200 米,它重新调整了我超过 10 公里的值)。有谁知道为什么会发生这种情况?

这是我使用的功能:

iRoute += myGPSLocation.distanceTo(prevLocation);

提前致谢!

4

2 回答 2

1

Stop using google's Location.distancebetween & location.distanceto functions. They don't work consistently.

Instead use the direct formula to calculate the distance:

double distance_between(Location l1, Location l2)
{
    //float results[] = new float[1];
    /* Doesn't work. returns inconsistent results
    Location.distanceBetween(
            l1.getLatitude(),
            l1.getLongitude(),
            l2.getLatitude(),
            l2.getLongitude(),
            results);
            */
    double lat1=l1.getLatitude();
    double lon1=l1.getLongitude();
    double lat2=l2.getLatitude();
    double lon2=l2.getLongitude();
    double R = 6371; // km
    double dLat = (lat2-lat1)*Math.PI/180;
    double dLon = (lon2-lon1)*Math.PI/180;
    lat1 = lat1*Math.PI/180;
    lat2 = lat2*Math.PI/180;

    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    double d = R * c * 1000;

    log_write("dist betn "+
            d + " " +
            l1.getLatitude()+ " " +
            l1.getLongitude() + " " +
            l2.getLatitude() + " " +
            l2.getLongitude()
            );

    return d;
}
于 2014-01-20T14:43:16.790 回答
1

distanceTo() 工作正常。
错误在您这边,最可能是算法错误,例如,如果没有可用的 GPS 定位,并且手机采用基于 GSM 蜂窝的位置,这当然可以偏离 1000 米。

对于您可能想要总结行进距离的应用程序,只进行 GPS 修复,不要使用除 GPS 之外的其他 LocationProvider!

于 2013-08-22T15:02:35.443 回答