9

GPSアプリケーションを開発しています。モバイルデバイスの速度を検出する方法を知っていますか?

実際、2秒ごとに速度を検出する必要があります。

didUpdateToLocation場所が変わったときにメソッドが呼び出されることは知っています。

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation

しかし、この方法は私の問題には適していないと思います。

[CLLocationManager location]では、 2秒で速度を確認する必要がありますか?

なにか提案を ?

前もって感謝します。

4

2 に答える 2

27

デリゲートメソッドから機能する以下のコードはどうですか。または、ポーリングしたい場合は、以前の場所を保持し、前回のポーリングから変更された距離を確認し、手動の方法(以下にも表示)を使用して速度を計算します。

速度はm/sで計算/提供されるため、kmphの場合は3.6、mphの場合は2.23693629を掛けます。

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
   //simply get the speed provided by the phone from newLocation
    double gpsSpeed = newLocation.speed;

    // alternative manual method
    if(oldLocation != nil)
    {
        CLLocationDistance distanceChange = [newLocation getDistanceFrom:oldLocation];
        NSTimeInterval sinceLastUpdate = [newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp];
        double calculatedSpeed = distanceChange / sinceLastUpdate;

    }   
}
于 2009-10-10T16:24:18.500 に答える
0

質問で提案したデリゲート方法のみを実際に使用できます。

[CLLocationManager location]に2秒ごとにアクセスしても、上記のデリゲートメソッドで最後に受信した座標のみを受信します。

なぜ2秒ごとにポーリングする必要があるのですか?iPhoneは、場合によっては、より短い時間で座標を更新できます。

HTH

于 2009-10-02T11:33:17.137 に答える