0Pricing
Swift Academy · レッスン

ユーザーの位置情報を取得する

CLLocationManagerで位置情報の更新を受け取ります。

「ユーザーの位置情報を取得する」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

位置情報の更新を開始する

許可を取得したら、startUpdatingLocation()を呼び出して位置情報の更新を継続的に受信します。マネージャーはデリゲートを通じて位置情報を配信します。不要になったら、バッテリーを節約するため必ずstopUpdatingLocation()を呼び出してください。

manager.startUpdatingLocation()
// ... later
manager.stopUpdatingLocation()

デリゲートで位置情報を受け取る

新しい位置情報はlocationManager(_:didUpdateLocations:)に届きます。配列は古いものから新しいものの順に並んでいるため、最後の要素が最新の位置情報です。

func locationManager(_ m: CLLocationManager,
                     didUpdateLocations locations: [CLLocation]) {
    guard let latest = locations.last else { return }
    print(latest.coordinate.latitude, latest.coordinate.longitude)
}

CLLocationオブジェクト

各位置情報はCLLocationで表され、座標だけでなく、coordinate、altitude、speed、course、timestamp、精度の値など、はるかに多くの情報を含みます。これらを調べて、位置情報が十分に正確かどうかを判断してください。

func describe(_ loc: CLLocation) {
    print("lat:", loc.coordinate.latitude)
    print("lon:", loc.coordinate.longitude)
    print("alt:", loc.altitude)
    print("when:", loc.timestamp)
}

必要な精度

desiredAccuracyを設定して、必要な位置情報の精度をCore Locationに伝えます。精度を高くすると、より多くの電力を消費します。定数にはkCLLocationAccuracyBest、kCLLocationAccuracyNearestTenMeters、kCLLocationAccuracyHundredMeters、kCLLocationAccuracyKilometerがあります。

manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters

距離フィルター

distanceFilterを使用すると、デバイスが最小移動距離(メートル単位)を移動するまで更新を抑制できます。これにより、細かな移動をすべて必要としない用途でノイズを減らし、電力を節約できます。

manager.distanceFilter = 50 // meters

位置情報の品質を判断する

horizontalAccuracyプロパティは、信頼できる範囲の半径(メートル単位)です。負の値は、位置情報が無効であることを示します。また、timestampからどの程度時間が経過しているかを確認し、古い位置情報も除外してください。

func isUsable(_ loc: CLLocation) -> Bool {
    guard loc.horizontalAccuracy >= 0 else { return false }
    let age = -loc.timestamp.timeIntervalSinceNow
    return age < 15 && loc.horizontalAccuracy < 100
}

1回だけ位置情報をリクエストする

継続的な更新ではなく、1回の位置情報だけが必要な場合は、requestLocation()を呼び出します。マネージャーは1件の位置情報をデリゲートに配信した後、自動的に停止します。継続的な更新を開始するよりもバッテリーに優しい方法です。

manager.requestLocation()

位置情報エラーに対応する

エラーはlocationManager(_:didFailWithError:)に届きます。よくあるエラーの1つがCLError.locationUnknownで、これは一時的なことが多いため、そのまま待ち続けてください。CLError.deniedは許可が取り消されたことを意味するため、停止する必要があります。

func locationManager(_ m: CLLocationManager,
                     didFailWithError error: Error) {
    if let clErr = error as? CLError, clErr.code == .denied {
        m.stopUpdatingLocation()
    }
}

大幅な位置情報の変化を監視する

低消費電力で大まかなトラッキングを行い、バックグラウンドでアプリを起動できるようにするには、startMonitoringSignificantLocationChanges()を使用します。デバイスが約500メートル移動した後にのみ通知されるため、地域に応じた機能に適しています。

manager.startMonitoringSignificantLocationChanges()

方位と進行方向

コンパス機能では、startUpdatingHeading()によってlocationManager(_:didUpdateHeading:)を介して磁北または真北を基準とした方位が配信されます。CLLocation.course(移動方向)は、デバイスの向きである方位とは異なる点に注意してください。

func locationManager(_ m: CLLocationManager,
                     didUpdateHeading newHeading: CLHeading) {
    print("Heading:", newHeading.trueHeading)
}

地点間の距離を計算する

CLLocationのdistance(from:)を使うと、別の位置情報までの直線距離を測定できます。戻り値はメートル単位です。地図のUIを使わずに近接処理を行う場合に便利です。

let a = CLLocation(latitude: 41.0, longitude: 28.9)
let b = CLLocation(latitude: 41.1, longitude: 29.0)
let meters = a.distance(from: b)
print("Distance:", meters)

クイックチェック:位置情報の取得

位置情報を受け取る方法の理解度を確認します。

まとめ:ユーザーの位置情報を取得する

座標を取得する方法が分かりました。

  • 継続的な配信にはstartUpdatingLocation()を、1回だけ取得する場合にはrequestLocation()を使用します。
  • デリゲートでlocations.lastから最新の位置情報を読み取ります。
  • desiredAccuracyとdistanceFilterを調整し、電力消費と精度のバランスを取ります。
  • 位置情報を使用する前に、horizontalAccuracyとtimestampを検証します。

よくある質問

「ユーザーの位置情報を取得する」レッスンは無料ですか?

はい。「ユーザーの位置情報を取得する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「ユーザーの位置情報を取得する」で何を学びますか?

CLLocationManagerで位置情報の更新を受け取ります。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ユーザーの位置情報を取得する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 位置情報の利用許可を求める
  2. ユーザーの位置情報を取得する
  3. SwiftUIで地図を表示する
  4. ジオコーディングとリージョン
← Swift Academyに戻る