我正在编写一个跟踪我的路线的应用程序。我每分钟都从 GPS 请求更新,它工作正常。它向我展示了我的确切观点。当我想计算当前点与前一个点之间的距离时,它可以正常工作,但有时它会计算出完全错误的距离(我移动了大约 200 米,它重新调整了我超过 10 公里的值)。有谁知道为什么会发生这种情况?
这是我使用的功能:
iRoute += myGPSLocation.distanceTo(prevLocation);
提前致谢!
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;
}
distanceTo() 工作正常。
错误在您这边,最可能是算法错误,例如,如果没有可用的 GPS 定位,并且手机采用基于 GSM 蜂窝的位置,这当然可以偏离 1000 米。
对于您可能想要总结行进距离的应用程序,只进行 GPS 修复,不要使用除 GPS 之外的其他 LocationProvider!