質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

929閲覧

リファエンスのGPS Dictionary Keysの使い方

AppDvl

総合スコア58

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/06/16 12:30

#####apple のリファレンスにあるGPS Dictionary Keysの使い方を教えてください。
初心者用の参考書で辞書型自体は理解できるのですが、リファレンスにある
let kCGImagePropertyGPSVersion: CFString
The version.
等の使い方がわかりません。
例えば下記のように書いてみたところ、ラベル?が表示されるだけで、肝心の内容が出ません。
初級な質問かもしれませんが、どなたか教えてください。お願いします。

https://developer.apple.com/documentation/imageio/cgimageproperties/gps_dictionary_keys
リンク内容

code

1 print("バージョンは(kCGImagePropertyGPSVersion)") 2 print("北か南は(kCGImagePropertyGPSLatitudeRef)")

print

1バージョンはGPSVersion 2北か南はLatitudeRef

#コード全文
####一番下が辞書を使いたい箇所です。

// // MemoViewController.swift // Wood volume // // Created by MBP13 on 2019/05/09. // Copyright © 2019 Tomoyuki Ashikari. All rights reserved. // import UIKit import MapKit import CoreLocation class MemoViewController: UIViewController ,UIImagePickerControllerDelegate,UINavigationControllerDelegate,CLLocationManagerDelegate { @IBOutlet weak var saveButton: UIBarButtonItem! var locationManager:CLLocationManager! var memo: String?//saveボタン用 @IBOutlet weak var memoTextField: UITextField! @IBOutlet weak var map: MKMapView! @IBOutlet weak var latiudeLabel: UILabel! @IBOutlet weak var longitudeLabel: UILabel! @IBOutlet weak var satelliteLabel: UILabel! @IBOutlet weak var dopLabel: UILabel! @IBOutlet weak var measureButton: UIButton! @IBAction func measureButton(_ sender: Any) { print("開始") } override func viewDidLoad() { super.viewDidLoad() locationManager = CLLocationManager() locationManager.desiredAccuracy = kCLLocationAccuracyBest //最高精度 // kCLLocationAccuracyBestForNavigation ナビゲーションに最適な値 // kCLLocationAccuracyBest 最高精度(iOS,macOSのデフォルト値) // kCLLocationAccuracyNearestTenMeters 10m // kCLLocationAccuracyHundredMeters 100m(watchOSのデフォルト値) // kCLLocationAccuracyKilometer 1Km // kCLLocationAccuracyThreeKilometers 3Km locationManager.activityType = .fitness//歩行者other その他(デフォルト値) // automotiveNavigation 自動車ナビゲーション用 // fitness 歩行者 // otherNavigation その他のナビゲーションケース(ボート、電車、飛行機) locationManager.requestAlwaysAuthorization() locationManager.delegate = self // CLLocationManagerDelegat locationManager.startUpdatingLocation()//観測開始 // func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { // // let location : CLLocation = locations[0] // let latlng = location.coordinate // print("緯度:(latlng.latitude) 経/度:(latlng.longitude) 取得時刻:(location.timestamp.description)") // print("関数の中") // // for location in locations { // // print("緯度:(location.coordinate.latitude) 経/度:(location.coordinate.longitude) 取得時刻:(location.timestamp.description)") // // } // // } //文字が入力されるまでsaveButtonを使わない //self.saveButton.isEnabled = false //タイトルを変える self.navigationItem.title = "Edit Memo" //値を受け取る //Optional Binding を使ってあげて、 if let memo = self.memo で memo に self.memo をセットしつつ、もし値がセットされていたら、 textField に memo を渡してあげれば OK でしょう。 if let memo = self.memo{ self.memoTextField.text = memo } self.updateSaveButtonState() // Do any additional setup after loading the view, typically from a nib. // 地図の設定〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 map.mapType = MKMapType.satelliteFlyover // 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜地図の設定 } private func updateSaveButtonState(){ let memo = self.memoTextField.text ?? "" //memoがnilだったら空文字 self.saveButton.isEnabled = !memo.isEmpty //saveButtonnが有効なのはsaveButtonが空でないとき } //textField に入力された値を検出 //textField を Control + クリックすると Editing Changed //という項目があるので、これをこのあたりにドラッグしてあげてメソッドを作っていきます。 //extField の中身が変わった時の処理をこちらに書くことができます。 @IBAction func memoTextFieldChanged(_ sender: Any) { updateSaveButtonState() } //cancel の場合は特に渡すデータもないので、単にこのモーダル(画面)を消してあげれば OK ですね。 //どうするかというと dismiss という命令が使えるので self.dismiss( … のように書いてあげましょう @IBAction func cancel(_ sender: Any) { // self.dismiss(animated: true, completion: nil) if self.presentingViewController is UINavigationController { self.dismiss(animated: true, completion: nil) } else { self.navigationController?.popViewController(animated: true) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let button = sender as? UIBarButtonItem, button === self.saveButton else { return } self.memo = self.memoTextField.text ?? "" } } //位置情報の許可=========================================== extension MemoViewController { func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { switch status { case .notDetermined: print("ユーザーはこのアプリケーションに関してまだ選択を行っていません") locationManager.requestAlwaysAuthorization() // 常に許可 break case .denied: print("ローケーションサービスの設定が「無効」になっています (ユーザーによって、明示的に拒否されています)") // アラート生成 let alert : UIAlertController = UIAlertController(title: "測定を続けるには", message: "設定 > プライバシー > 位置情報サービス で、位置情報サービスの利用を許可して下さい。", preferredStyle: .alert) //    OKボタンを追加 let okAction = UIAlertAction(title:"OK", style: .default,handler: nil) alert.addAction(okAction) //   表示 present(alert,animated: true,completion: nil) break case .restricted: print("このアプリケーションは位置情報サービスを使用できません(ユーザによって拒否されたわけではありません)") // 「このアプリは、位置情報を取得できないために、正常に動作できません」を表示する break case .authorizedAlways: print("常時、位置情報の取得が許可されています。") // 位置情報取得の開始処理 break case .authorizedWhenInUse: print("起動時のみ、位置情報の取得が許可されています。") // 位置情報取得の開始処理 locationManager.requestAlwaysAuthorization() // 常に許可 break @unknown default: break } } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let location : CLLocation = locations[0] let currentlocation = location.coordinate for location in locations { print("緯度:(location.coordinate.latitude) 経度:(location.coordinate.longitude) 取得時刻:(location.timestamp.description)") //表示領域を指定 let reg : MKCoordinateRegion = MKCoordinateRegion(center: currentlocation,latitudinalMeters: 200,longitudinalMeters: 200) //アノテーションを生成し、表示 let ann : MKPointAnnotation = MKPointAnnotation() map.region = reg ann.coordinate = currentlocation ann.title = "現在地" map.addAnnotation(ann) print("バージョンは(kCGImagePropertyGPSVersion)") print("北か南は(kCGImagePropertyGPSLatitudeRef)") } } } //===========================================位置情報の許可

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

GPS Dictionary Keys とは、Dictionaryから値を取り出すためのキー名です。
Dictionaryは、キーと値をペアで情報を格納しています。
このDictionaryに対してキーを渡すことで、キーに対応する値を受け取ることができます。
なのでkCGImagePropertyGPSVersionをprintに渡してもキー名しか出力されません。

投稿2019/06/17 00:57

dsuzuki

総合スコア1682

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AppDvl

2019/06/17 01:03

dsuzukiさん ご回答ありがとうございます。 キーと値のペアで格納されている、その値を呼び出したいです。 値を呼び出すコードの書き方を知りたいです。 初歩的なのでしょうが、ネットや参考書にないので。
dsuzuki

2019/06/17 01:25

kCGImagePropertyGPSVersionを扱っているDictionary(CFDictionary)は下記サイトの方法で取得できると思います。 https://codeday.me/jp/qa/20190301/346462.html ただし、kCGImage... とあるように、画像に埋め込まれた情報からGPS情報を取り出す為に使用するものみたいです。 やろうとしていることはLocationManagerから情報を取得しているようですので、用途が異なると思います。
AppDvl

2019/06/17 03:57

dsuzukiさん ”kCGImage... とあるように”、確かに画像から値から取り出すコードですね。 勘違いしていました。 LocationManagerからGPSからとしだす方法を調べます。 また別に質問させてもらうかもしれません。 今回はこれで閉じさせてもらいます。ありがとうございました。
guest

0

自己解決

自分が行おうとしていた内容とコード(kCGImagePropertyGPSVersionなどのキー)が違っていました。
locationManagerからGPSから散り出す方法を調べます。

投稿2019/06/17 03:59

編集2019/06/17 06:06
AppDvl

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問