この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
CLFloor と CLVisit
iOS 8 から、Core Location で CLFloor と CLVisit が利用できるようになりました。本記事ではこの2つの機能の使いかたを解説したいと思います。
CLFloor
CLFloor は階情報のクラスです。現在地の建物の何階に居るかという情報を取ることができます。なお M8 モーションコプロセッサ搭載デバイス (iPhone 6 / iPhone 6 Plus) で利用できます。
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
println("\(locations)")
// 初めに取得できた位置情報のフロアを取得する
let location: CLLocation? = locations.first as? CLLocation
if let floor = location?.floor {
println("Current Floor: \(floor)")
} else {
println("Floor is nil")
}
}
CLFloor は CLLocation#floor プロパティから取得します。利用不可の場合は nil が渡されます。
CLVisit
CLVisit は滞在情報のクラスです。現在地にどのくらい滞在したかという情報を取ることができます。Visit Monitoring と呼ばれている機能です。
import UIKit
import CoreLocation
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {
var manager: CLLocationManager!
// MARK: - UIApplicationDelegate
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
manager = CLLocationManager()
manager.delegate = self;
manager.requestWhenInUseAuthorization()
return true
}
// MARK: - CLLocationManagerDelegate
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .Authorized, .AuthorizedWhenInUse:
println("位置情報利用可")
// 滞在情報の取得を開始する
manager.startMonitoringVisits()
default:
println("位置情報利用不可")
}
}
func locationManager(manager: CLLocationManager!, didVisit visit: CLVisit!) {
println("現在地 : \(visit.coordinate)")
println("Accuracy : \(visit.horizontalAccuracy)")
println("到着時間 : \(visit.arrivalDate)")
println("出発時間 : \(visit.departureDate)")
}
}
滞在情報のモニタリングは CLLocationManager#startMonitoringVisits で開始します。滞在情報が取得できたときに CLLocationManagerDelegate#locationManager:didVisit が呼び出され、CLVisit オブジェクトが渡されます。位置情報と Accuracy、到着時間と出発時間を取得することができます。
まとめ
いずれも便利そうな機能ですね!既存の位置情報を使っているアプリの機能増強はもちろん、いままでにない全く新しいアプリも作れそうですね。