【问题标题】:iPhone: calculate distance while walking using GPSiPhone:使用 GPS 计算步行距离
【发布时间】:2012-03-29 21:20:36
【问题描述】:

我想计算用户使用 GPS 行走时所经过的距离。例如,用户点击开始按钮并开始走路或跑步,而不是在完成时点击停止。用户获得不同纬度所需的最短距离是多少?

我们如何在 iPhone 中做到这一点,假设我们采用纬度,在每 0.3 秒之后很长时间我们有一个点列表?

【问题讨论】:

  • 计算 gps 位置之间的距离很容易。其他一切都非常困难。特别是如果您想以低速跟踪距离。如果你经常测量,你会积累更多的错误。如果您移动缓慢,则每距离会累积更多错误。获取surveyor's wheel 并在现实世界中测试您的算法。你会想知道 GPS 有多么错误。
  • 问题中最重要的部分(至少对于 ma 而言)仍未得到解答:“用户获得不同纬度所需的最短距离是多少?”换句话说,如果我向前走一两步,GPS 会确认这个位移并计算行进的距离(即使它小于,比如说,1-1.5 米)?

标签: iphone xcode gps distance


【解决方案1】:

您可以通过计算两点(纬度、经度)之间的距离来做到这一点:

(我没有测试过):

-(double)distanceBetweenCoordinate:(CLLocationCoordinate2D)c1 andCoordinate:(CLLocationCoordinate2D)c2 {
    double long1 = degreesToRadians(c1.longitude);
    double lat1 = degreesToRadians(90 - c1.latitude);

    double long2 = degreesToRadians(c2.longitude);
    double lat2 = degreesToRadians(90 - c2.latitude);

    double gamma = fabs(long1 - long2);
    if (gamma > M_PI) {
        gamma = 2 * M_PI - gamma;
    }    

    double result = cos(lat2) * cos(lat1) + sin(lat2) * sin(lat1) * cos(gamma);
    return acos(result) * 6366.1977; // Kilometers
};

CGFloat degreesToRadians(CGFloat degrees) {
    return degrees * M_PI / 180;
};

更新:改用distanceFromLocation - Calculate distance between two points

【讨论】:

  • 或者只使用 CLLocation 方法 - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
  • 更好的方法 :p 对 CoreLocation 或 MapKit 框架没有太多经验。所以我从旧的 php 函数池中“钓鱼”。
  • 请记住,这是“直线”距离(当鸟儿飞行时),而不是总距离。
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多