[iOS 8] Core Location の新機能「CLFloor」と「CLVisit」

CLFloor と CLVisit

iOS 8 から、Core Location で CLFloorCLVisit が利用できるようになりました。本記事ではこの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、到着時間と出発時間を取得することができます。

まとめ

いずれも便利そうな機能ですね!既存の位置情報を使っているアプリの機能増強はもちろん、いままでにない全く新しいアプリも作れそうですね。

参考