32
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[iOS] CLLocationManagerで移動速度を取得する(Swift編)

Last updated at Posted at 2016-04-03

CoreLocation を利用して移動速度を取得する方法です。

実行環境

  • Xcode 8.0
  • Swift 3.0

前提条件

ユーザが位置情報の使用を許可している必要があります。詳細は下記記事を参照してください。

iOS 8から位置情報を取得する方法が変わるよ - Qiita

実装方法

CLLocation クラスの CLLocationSpeed プロパティを使います。

/*
 *  speed
 *  
 *  Discussion:
 *    Returns the speed of the location in m/s. Negative if speed is invalid.
 */
@available(iOS 2.2, *)
public var speed: CLLocationSpeed { get }

単位は秒速(m/s)です。速度が取得できない時はマイナスの値が返ります。
移動距離から速度を計算するため、精度はそこまで高くないようです。

実装例

startUpdatingLocation を実行します。

override func viewDidLoad() {
    super.viewDidLoad()

    if CLLocationManager.locationServicesEnabled() {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startUpdatingLocation()
    }
}

位置情報が更新されるたびに次のデリゲートが呼ばれます。

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let newLocation = locations.last,
        CLLocationCoordinate2DIsValid(newLocation.coordinate) else {
            return
    }
    self.mpsTextField.text = "".appendingFormat("%.2f", newLocation.speed)
    self.kphTextField.text = "".appendingFormat("%.2f", newLocation.speed * 3.6)
}

実行結果

iOSシミュレータのスクリーンショット 2015.01.04 11.46.17.png

サンプルソース

おまけ

iOSシミュレータでは City Bicycle Ride(自転車で移動している場合)などをシミュレーションできますが、それぞれの移動速度を取得したところ次のような結果になりました。

City Run City Bicycle Ride Freeway Drive
約4m/s 約7m/s 約33m/s
約14km/h 約27km/h 約120km/h

Freeway Drive の移動速度が意外と速くて驚きました :flushed:

32
23
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?