我正在用java编写一个Android应用程序来计算使用GPS行进的距离。
应用程序每隔4秒将GPS坐标发送到服务器,从而将所有点保存在一个大阵列中。在旅程结束时,服务器通过将每个点之间的距离相加来计算总距离。
问题是最终距离总是比实际距离小一点,所以任何使用我的应用程序的人都会抱怨距离总是错误的!
也许距离总是较小的原因是驾驶时相距4秒的两点之间的距离总是小于实际距离,特别是如果驾驶员需要大量的曲线和转弯。
我知道改善这一点的唯一方法是将GPS位置更频繁地发送到服务器,但这将使用更多数据,再次惹恼用户!
有人知道如何解决这个问题吗?
以下是使用c#
中的大圆计算计算两点之间距离的代码 public static double DistanceTo(double lat1, double lon1, double lat2, double lon2, char unit = 'M')
{
double rlat1 = Math.PI * lat1 / 180;
double rlat2 = Math.PI * lat2 / 180;
double theta = lon1 - lon2;
double rtheta = Math.PI * theta / 180;
double dist = Math.Sin(rlat1) * Math.Sin(rlat2) + Math.Cos(rlat1) * Math.Cos(rlat2) * Math.Cos(rtheta);
dist = Math.Acos(dist);
dist = dist * 180 / Math.PI;
dist = dist * 60 * 1.1515;
switch (unit) {
case 'K': //Kilometers -> default
return dist * 1.609344;
case 'N': //Nautical Miles
return dist * 0.8684;
case 'M': //Miles
return dist;
}
return dist;
}