↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

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

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")
    }
    
}

まとめ

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

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


2021-05-14 14:21:41

WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。

AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、 昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は...

2021-05-06 14:04:37

LINEのアニメーションスタンプ制作の落とし穴、、、失敗談

ゴールデンウィークにLINEスタンプを作成してみました。 作り切って申請も通したんですが、意図したアニメーションと違う、、、、 LINEクリエーターの画面だと、アニメーションのプレビュー...

2021-05-01 18:05:35

久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。

忘れないようにメモ エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。 ターゲット→ex...
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!