Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > CLLocationManagerで現在位置を取得

CLLocationManagerで現在位置を取得

仕事で現在地の経度緯度データを取得する作業があったのでメモ。

サンプル画像

CLLocationManagerのクラス階層


NSObject

CLLocationManager

>参考:CoreLocation Framework Reference CLLocationManager Class Reference
参考:001 現在の位置情報の取得
参考:Swiftで現在地を取得してみた
参考:Swiftで現在地の緯度経度と住所を取得

やってみた

あっさりしたシンプルなサンプルがなかったので省略型です。

(シュミレータだと成功しないので注意です!地味にハマってしまいました。。。)



import UIKit
import CoreLocation

class ViewController: UIViewController , CLLocationManagerDelegate{
    
    var myLocationManager:CLLocationManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
         // 現在地を取得します
        myLocationManager = CLLocationManager()
        myLocationManager.delegate = self
        myLocationManager.desiredAccuracy = kCLLocationAccuracyBest
        myLocationManager.distanceFilter = 100
        myLocationManager.startUpdatingLocation()
        
    }
    // 位置情報取得成功時に呼ばれます
    func locationManager(manager: CLLocationManager!,didUpdateLocations locations: [AnyObject]!){
        println("緯度:\(manager.location.coordinate.latitude)")
        println("経度:\(manager.location.coordinate.longitude)")
    }
    
    // 位置情報取得失敗時に呼ばれます
    func locationManager(manager: CLLocationManager!,didFailWithError error: NSError!){
        print("error")
    }
    
}

上記のコードで経度緯度は取得できます。CLLocationManagerはその他プロパティによる設定調整が可能ですのでリファレンスを ご参照ください。

注意!info.plistに以下を追加しないと動作しませんので必ず追加してください。

サンプル画像

KeyがNSLocationAlwaysUsageDescriptionで値は何でもかまいません。ダイアログ表示される際に 表示される文字列です。

カスタマイズ

位置情報を取得するにはユーザ必要なのですが、初回アクセス時に表示される「位置情報取得を許可しますか?」の ダイアログを「許可しない」にすると次回から表示されなくなり必要な場合に面倒なのですが、その場合にもダイアログが表示されるようにする為に statusコードをみて判断する方法です



import UIKit
import CoreLocation

class ViewController: UIViewController , CLLocationManagerDelegate{
    
    var myLocationManager:CLLocationManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        myLocationManager = CLLocationManager()
        myLocationManager.delegate = self
        
         // 承認されていない場合はここで認証ダイアログを表示します.
        let status = CLLocationManager.authorizationStatus()
        if(status == CLAuthorizationStatus.NotDetermined) {
            println("didChangeAuthorizationStatus:\(status)");
            self.myLocationManager.requestAlwaysAuthorization()
        }
        
        myLocationManager.desiredAccuracy = kCLLocationAccuracyBest
        myLocationManager.distanceFilter = 100
        myLocationManager.startUpdatingLocation()
    }
    
    // 現状のステータス状態を表示します
    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        println("didChangeAuthorizationStatus");
        var statusStr = "";
        switch (status) {
            case .NotDetermined:        statusStr = "NotDetermined"
            case .Restricted:           statusStr = "Restricted"
            case .Denied:               statusStr = "Denied"
            case .Authorized:           statusStr = "Authorized"
            case .AuthorizedWhenInUse:  statusStr = "AuthorizedWhenInUse"
        }
        println(" CLAuthorizationStatus: \(statusStr)")
    }
    
    // 位置情報取得成功時に呼ばれます
    func locationManager(manager: CLLocationManager!,didUpdateLocations locations: [AnyObject]!){
        println("緯度:\(manager.location.coordinate.latitude)")
        println("経度:\(manager.location.coordinate.longitude)")
    }
    
    // 位置情報取得失敗時に呼ばれます
    func locationManager(manager: CLLocationManager!,didFailWithError error: NSError!){
        print("error")
    }
    
}

まとめ

サンプルが長いものが多かったので最小限のコードでの共有でした

↓こんな記事もありますよ!

Pre特殊文字難民

記事を書いている時によくつまずくことがあります。preでコードを表示する際に、 カッコを使うと文章が消えてしまったり、ドルマークの変数が表示できなかったり。その度に検索して探しているのでサイトの中に入れてしまいます。 以前のバックスラッシュもそうですが、こういった特殊文字難民対策のページにしておきます。

NSURLSessionでバックグラウンドで通信処理

NSURLConnectionの進化版のような立ち位置に私は感じております。アプリがバックグラウンドになっても通信処理を続けてくれる優れものです。 以前まではどうやら音声や位置情報だけに限られていましたが、このクラスによって大きなデータをユーザに気持ちよくDLしてもらうことも可能にです。

SQLiteを使いたい。ラッパーを検証してみる。

SQLiteを使いたい。Objective-Cの時はMagical RecordでCoreDataを利用して問題なく使えたのですが、 今回はSQLite+Swiftでトライしてみたいと思います。ざっと調査すると、SwiftでSQLiteを使うのは、FMDB, SwiftData, SQLite.swiftが あるみたいです。この三つのラッパーから好みのものを選んでみるのが目標です。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!