ユーザーの位置情報を取得する
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 位置情報の利用許可を求める
- ユーザーの位置情報を取得する
- SwiftUIで地図を表示する
- ジオコーディングとリージョン