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

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

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

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

1回答

1502閲覧

GoogleMapSDK for iosに関して

murosan

総合スコア9

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2020/03/28 19:04

Google Map SDK、そしてヤフーローカルサーチAPIを使用してGoogle マップに現在地を表示しそこから半径10km以内のスタバにマーカーを付けようとしております。

不明な点
・初期のカメラを現在地にしたい
・現在地の緯度経度を文字列に変換してAPIを叩きたい

この二つを達成したいと考えております。
様々なサイトなどを参考にして自力で努力したのですが解決には至りませんでした。

swift

1import UIKit 2import GoogleMaps 3import Alamofire 4import SwiftyJSON 5import CoreLocation 6 7class ViewController: UIViewController,CLLocationManagerDelegate{ 8 9 10 var locationManager: CLLocationManager! 11 var mapView: GMSMapView! 12 13 14 override func viewDidLoad() { 15 16 super.viewDidLoad() 17 locationManager = CLLocationManager() 18 locationManager.requestWhenInUseAuthorization() 19 locationManager.delegate = self 20 locationManager.startUpdatingLocation() 21 //初期値になるはず。。。の箇所 22 let camera = GMSCameraPosition.camera(withLatitude: 33.589963, longitude: 139.420690, zoom: 8.0) 23 let mapView = GMSMapView.map(withFrame: view.frame, camera: camera) 24 mapView.isMyLocationEnabled = true 25 view.addSubview(mapView) 26 27 //ヤフーローカルサーチAPI IDを変えております。 28 let url = "https://map.yahooapis.jp/search/local/V1/localSearch?cid=d8a23e9e64a4c817227ab09858bc1330&lat=35.665751&lon=139.728687&dist=10&query=%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9&appid=**(アイディー**)&output=json" 29 30 AF.request(url).responseJSON{ response in 31 switch response.result{ 32 case .success(let value): 33 34 let get_json = JSON(value) 35 let get_feature = get_json["Feature"] 36 // If json is .Dictionary 37 for (_,subJson):(String, JSON) in get_feature { 38 // Do something you want 39 print(subJson["Name"]) 40 print(subJson["Property"]["Address"]) 41 print(subJson["Geometry"]["Coordinates"]) 42 //ここから店名住所をた取り出します。 43 let name = subJson["Name"].stringValue 44 let address = subJson["Property"]["Address"].stringValue 45 let coordinates = subJson["Geometry"]["Coordinates"].stringValue 46 let array = coordinates.split(separator: ",") 47 let real_ido = Double(array[1]) 48 let real_keido = Double(array[0]) 49 //取り出した緯度経度をマーカーにセットします。 50 let position = CLLocationCoordinate2D(latitude: real_ido!, longitude: real_keido!) 51 let marker = GMSMarker(position: position) 52 marker.title = name 53 marker.snippet = address 54 marker.map = mapView 55 56 57 } 58 59 case .failure(_): 60 print("error is occured") 61 } 62 } 63 }

IOSアプリケーション開発を始めたばかりでまだ疎く、ご迷惑おかけしますが
どなたか教えていただけたら恐縮です。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

現在地を得るだけだったら、こんな感じで可能です。

swift

1 var lat: Double = 0.0 2 var lon: Double = 0.0 3 4 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 5 if let myLastLocation = locations.first { 6 lat = myLastLocation.coordinate.latitude 7 lon = myLastLocation.coordinate.longitude 8 } 9 }

現在地が変わるたびにlocationManager(_:didUpdateLocations:)が呼び出されます。そこで緯度・経度を保持しておけばいいと思います。

あとは、任意のタイミングで記録しておいた緯度・経度の情報を使うだけです。

緯度・経度の情報をもとにAPIを叩くのであれば、

swift

1let url = "https://map.yahooapis.jp/search/local/V1/localSearch?cid=d8a23e9e64a4c817227ab09858bc1330&lat=(lat)&lon=(lon)&dist=10&query=%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9&appid=アプリケーションID&output=json"

こんな感じでクエリーに変数名を入れておき、APIを叩けば近隣のスタバ情報が得られます。

初回の現在地情報がどのタイミングで得られるのか(viewDidAppearの呼び出しより先か否か)はいろんな条件次第だとおもうので、そのタイミングを考慮する必要があるかもしれません。

投稿2020/03/29 08:43

編集2020/03/29 08:44
TsukubaDepot

総合スコア5086

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

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

murosan

2020/03/30 06:31

ご回答いただきありがとうございます!! まず現在地を取得することから始めたのですがなかなか上手く取得できません。。。 私は大学生でまだ経験が乏しく、わからないことだらけです。。。 もしよろしかったら下記のコードのどこが間違っているかなどお教えいただけないでしょうか。。。?? class ViewController: UIViewController,CLLocationManagerDelegate{ var locationManager: CLLocationManager! var mapView: GMSMapView! var lat: Double = 0.0 var lon: Double = 0.0 // class CLLocationManager : NSObject func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { if let myLastLocation = locations.first { lat = myLastLocation.coordinate.latitude lon = myLastLocation.coordinate.longitude } } override func viewDidLoad() { super.viewDidLoad() locationManager = CLLocationManager() //初期値になるはず。。。の箇所 let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: lon, zoom: 4.0) let mapView = GMSMapView.map(withFrame: view.frame, camera: camera) view.addSubview(mapView) print("lat") print(lat) print("long") print(lon) mapView.isMyLocationEnabled = true view.addSubview(mapView) //ヤフーローカルサーチAPI IDを変えております。 let url = "https://map.yahooapis.jp/search/local/V1/localSearch?cid=d8a23e9e64a4c817227ab09858bc1330&lat=35.665751&lon=139.728687&dist=10&query=%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9&appid=**(アイディー**)&output=json" AF.request(url).responseJSON{ response in switch response.result{ case .success(let value): let get_json = JSON(value) let get_feature = get_json["Feature"] // If json is .Dictionary for (_,subJson):(String, JSON) in get_feature { // Do something you want print(subJson["Name"]) print(subJson["Property"]["Address"]) print(subJson["Geometry"]["Coordinates"]) //ここから店名住所をた取り出します。 let name = subJson["Name"].stringValue let address = subJson["Property"]["Address"].stringValue let coordinates = subJson["Geometry"]["Coordinates"].stringValue let array = coordinates.split(separator: ",") let real_ido = Double(array[1]) let real_keido = Double(array[0]) //取り出した緯度経度をマーカーにセットします。 let position = CLLocationCoordinate2D(latitude: real_ido!, longitude: real_keido!) let marker = GMSMarker(position: position) marker.title = name marker.snippet = address marker.map = mapView } case .failure(_): print("error is occured") } } } }
TsukubaDepot

2020/03/30 06:36

> まず現在地を取得することから始めたのですがなかなか上手く取得できません。。。 「どのように取得できないのか」を分析することから始まると思います。 「期待した表示に対して、どのように表示されたのか」、「シミュレータではできたのに、実機ではできない」、とか「そもそもエミュレータで起動した瞬間に落ちた(その時はデバッグログが出るはず)」とか。 その辺りを整理して再度コメントしてもらうと、より適切な回答ができると思います。
murosan

2020/03/30 12:03

大変失礼いたしました。以下詳細を述べさせていただきます。 グローバル変数として定義している変数 lat と lonに ご教授いただきましたlocationManagerの関数を使用して現在位置の緯度経度を各変数に、そしてそれを let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: lon, zoom: 4.0) に代入して現在地にカメラを合わせたいと考えております。 上記の実行結果です。 lat 0.0 long 0.0 スターバックスコーヒー ララガーデン川口店 埼玉県川口市宮町18−9 139.698509444444,35.805406388889 スターバックスコーヒー キラリナ京王吉祥寺店 東京都武蔵野市吉祥寺南町2丁目1−25 139.580242500000,35.702760555556 スターバックスコーヒー新宿アルタ店 東京都新宿区新宿3丁目24−3 139.701290833333,35.692620555556 スターバックスコーヒー ビーンズ阿佐ヶ谷てくて店 東京都杉並区阿佐谷南2丁目42 139.637512777778,35.704998055556 スターバックスコーヒー 大井町駅東口店 東京都品川区東大井5丁目20−1 139.735324444444,35.605800833333 スターバックスコーヒー ヴィーナスフォートグランド店 東京都江東区青海1丁目3−15 139.780611666667,35.625327500000 スターバックスコーヒー アリオ川口店 埼玉県川口市並木元町1−79 139.713791388889,35.807808888889 スターバックスコーヒー 丸の内パークビル店 東京都千代田区丸の内2丁目6−1 139.763136111111,35.679112500000 スターバックスコーヒー 虎ノ門2丁目タワー店 東京都港区虎ノ門2丁目3−17 139.746660000000,35.668446666667 スターバックスコーヒー大手町ビル店 東京都千代田区大手町1丁目6−1 139.764219166667,35.686297777778 // 上記のスタバの住所は現在地付近ではなくローカルサーチのサンプルに合わせております// viewDidLoad()内で変数 lat と lonのプリントデバッグを行い値を確認したところ以前初期値でした。 どのように書けば現在地をlat とlonに代入できるか教えていただけませんでしょうか。。。 お手数おかけいたします。。
TsukubaDepot

2020/03/30 12:17

回答の最後に > 初回の現在地情報がどのタイミングで得られるのか(viewDidAppearの呼び出しより先か否か)はいろんな条件次第だとおもうので、そのタイミングを考慮する必要があるかもしれません。 とさらっと書きましたが、viewDidAppear が呼び出されるタイミングで位置情報が取得できるかはわからないと思います(きちんとしらべればわかるかもしれません)。 その時のGPSの状況や電波の状況などによっても位置情報を取得・計算するタイミングが異なってくると予測できますから(即時に得られることもあれば、数秒から数分のときもある)、ビューが表示された直後(つまり、viewDidAppearが呼ばれたタイミング)で位置情報が得られる確約がありません。 実際に値が得られるのは、 locationManager() という delegate が呼び出された瞬間ですので、これが初回以降呼び出されたタイミングで、近隣スタバの検索を行うようにするのが一つの手だと思います(ただし、一度位置情報がわかると、設定次第では今度は頻繁にこの関数が呼び出されることが考えられるので、その対策も必要だと思います)。 GoogleMaps API、Yahoo API、位置情報の連携が最終目標としても、まずは位置情報を任意のタイミングで得られるような最小限のアプリを作ってみて、その動作を把握するのも重要だとおもいます。どんな大きなプログラムも、独立した小さな処理の集まりですので。
murosan

2020/03/30 14:14

ご指摘いただきありがとうございます。IOS端末が手元になくシミュレータ上でしか実行できないことも原因であるかと考えました。 まずは現在地を固定してスタバの位置を表示するアプリケーションを作成することに決めました。 様々なご指摘をいただきありがとうございました。
TsukubaDepot

2020/03/30 14:20

シミュレータやXcodeで擬似的に任意の緯度経度を再現することも可能なので検討してみてください。 以下の記事はちょっと古いですが参考になると思います。 最新のシミュレータだと、Features>Locationで設定できます。 https://qiita.com/mattak/items/420039c674fe4392a647
TsukubaDepot

2020/03/30 14:28 編集

ちなみに、お昼にコメントに掲載されたコードですが、よくみると locationManager = CLLocationManager() から //初期値になるはず。。。の箇所 までの間にある数行が、最初に質問に書かれた時のコードと比べたら数行消えているみたいです。 ここにいくつか重要な設定があるので、そこを戻さないとうまくいかないと思います。
murosan

2020/04/02 17:05

ご回答いただきありがとうございます!! 自分なりにいいアプリができたと考えております。 本当にありがとうございました!!
TsukubaDepot

2020/04/03 00:00

丁寧なコメントありがとうございます。 良いアプリができたようでよかったです。 私も精進します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問