2012-03-13 12 views
3

を使用して歩きながら距離を計算します。例えば、ユーザがスタートボタンをタップし、タップを止めたときよりも歩行または走行を開始する。別の緯度を長くするためには、ユーザーが移動しなければならない最小距離は何ですか?iPhone:私はGPSを使って歩いている間、ユーザーはカバーの距離を計算したいGPS

我々はIPhoneでそれを行うことができますどのように、asume我々はポイントのリストを持って、最後のよりも長いすべての0.3秒後に、緯度取りますか?

+0

は簡単です。他のすべては非常に難しいです。特に、低速で距離を追跡したい場合。あなたが頻繁に測定すると、より多くの誤差が蓄積されます。ゆっくりと移動すると、距離ごとに誤差が累積します。 [surveyor's wheel](http://en.wikipedia.org/wiki/Surveyor's_wheel)を入手し、アルゴリズムを実際の世界でテストしてください。あなたは誤ったGPSがどのようにあるのか疑問に思います。 –

+0

質問の最も重要な部分(少なくともミリアンペアのため...)、まだ未解決のまま:「何が最小距離のユーザーが別の緯度は、長い得るために移動しなければならないでしょう?」言い換えれば、私は、1つのまたは2つの手順を取る場合、前方のGPSは、この変位を認識し、走行距離を計算(それがより少ない場合でも、のは1-1,5メートル、言わせて)? (定数CLLocationの*)場所 –

答えて

3

あなたは2点(緯度、経度)との間の距離算出することによってこれを行うことができます:(私はそれをテストしていない)

を:

-(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; 
}; 

UPDATE:使ったGPSの位置の間の距離を計算distanceFromLocation - Calculate distance between two points代わり

+6

それともCLLocationメソッドを使用します。だから、私は古いphp関数プールから釣りに出ました。 – sosborn

+0

より良いアプローチ:CoreLocationまたはMapKitフレームワークと多くの経験を持っていないP(CLLocationDistance)distanceFromLocation - – basvk

+0

これは「直線」の距離(鳥が飛ぶ)であり、移動距離の合計ではないことに注意してください。 – lnafziger

関連する問題