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")
}
}
まとめ
サンプルが長いものが多かったので最小限のコードでの共有でした
↓こんな記事もありますよ!
![]() | Rebuildfm(Poadcast)の技術話+オタ話が超絶に面白い、、、、、去年の暮れ頃から聞いているPodcastを紹介します。IT企業の友人から「RebuldFM」が面白いよ〜と、私が Swiftサラリーマンを始めたことでSwiftの話をしてたら「知ってる知ってる」との話になって、どこで聞いたの? 「Rebuldfm」ってPodcastがあるんだよ、と。 |
![]() | Typealiasをどうやって活用するのかTypealiasって言葉、なんだややこしく見て見ないふりをしていましたが、 先日別の記事を書いた際にTypealiasの記述がありましたので、あらためて確認してみようと思います。まずaliasですが、 Macでショートカットを作成した時に記載される「エイリアス」です。ショートカットのようなものですので、 Typeのショートカット的な感覚で調査進めてまいります。 |
![]() | UISlider横バーをぐりぐり移動させて値変更させるコントロールです。 |
Tweet
![]() |
|||
|