iPhone:使用GPS计算步行距离

3

我希望使用GPS来计算用户步行时覆盖的距离。例如,用户点击开始按钮后开始行走或奔跑,然后完成时点击停止。为了得到不同的经纬度,用户必须行走的最小距离是多少?

我们如何在iPhone上实现这个功能?假设我们每0.3秒记录一次经纬度,然后最后得到一个点列表?


计算GPS位置之间的距离很容易,但其他方面则非常困难,特别是如果您想在缓慢移动时跟踪距离。如果您经常进行测量,则会累积更多误差。如果您移动缓慢,则每单位距离会累积更多误差。获取一架测量轮,并在现实世界中测试您的算法。您会惊讶于GPS的误差有多大。 - Matthias Bauch
这个问题最重要的部分(至少对我来说)仍然没有得到回答:“用户需要行驶多少最短距离才能获得不同的纬度和经度?”换句话说,如果我向前迈出一步或两步,GPS是否会确认这种位移并计算已行驶的距离(即使它小于1-1.5米)? - user1073400
1个回答

3
你可以通过计算两点(纬度,经度)之间的距离来实现这一点:
(我还没有测试过它):
-(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-计算两点之间的距离


(意思是建议使用“distanceFromLocation”函数来计算两个位置之间的距离,具体实现见链接)

6
或者直接使用CLLocation方法 - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location。 - sosborn
更好的做法:p 我对CoreLocation或MapKit框架没有太多经验,因此我从我的旧php函数库中“钓鱼”了一些。 - basvk
请记住,这是“直线”距离(鸟飞行距离),而不是总行程距离。 - lnafziger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接