[Swift] GoogleMapAPI　〜Map表示＆現在値にピン立て編〜

# はじめに

アプリにMap表示したいー！

そう考えたとき、思い浮かぶものはMapKitかGoogleMapです。

MapKitは、地図を表示することはもちろん、住所検索やピン配置などをデフォルトで使用できる素晴らしいフレームワークです。

GoogleMapはGoogle社が提供しているAPIを使用することにより表示することができ、様々な機能を実装することができます。
[Google Maps Platform](http://bit.ly/2SrFCug)

MapKitはSwiftのみですが、GoogleMapは他の言語でも使用する可能性があるので、これを機に勉強しようと思い、その備忘録及びアウトプットのためにここに記載していきます。

###　対象者

- これからアプリにMapを導入したいと思っている人
- とりあえずGoogleMapなんぞやと思っている人


###　バージョン
- Xcode....Version 11.1
- Swift....5.0



# 実装

### 導入
まずはじめに、上記の公式HPからアクセスし、右上のコンソールをタップします。

![Map1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/0fedadb8-44b8-a443-d871-3da42778bd82.png)
![Map2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/e9b1396b-8bfc-6459-ca16-ad2c502a1b47.png)
![map3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/f2cf0520-7099-69a0-e939-7f4f060361c9.png)
![Map4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/41cc5d68-29dd-df39-8aba-12c8895496f4.png)
![Map5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/203f7eda-8ce2-091f-3a54-d541d577a070.png)
![Map6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/3b46500d-b659-5966-0ec5-145b0d9ff3e9.png)
![Map7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/25f6a615-fc5e-88fd-d65e-077935c5619a.png)
![Map8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/d899cd40-e9c3-d132-85d9-03c6b2bd34db.png)
![Map9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/5d28b194-06bb-0804-400b-72e3e1a414eb.png)
![Map10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/5286a260-6117-677e-4be0-125b4062d674.png)
![Map11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/d3c1cf5b-73bc-bb14-3545-b02a891137de.png)
![Map12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/31c88c43-64c8-c537-0c69-bd4ecd14763b.png)

以上でCloudPlatformの初期設定は終了です。

### APIkeyの登録

ライブラリの導入をするためにpodfileをインストールしてください。
その後、以下のコードをpodfileに記入します。

```swift:podfile

  pod 'GoogleMaps'

```

pod installをしたら、プロジェクトを開きましょう！

AppDelegateを開いて、APIキーを登録していきます。　
　
まず、先程導入したGoogleMapsをimportします。

```swift:AppDeleAppDelegate.swift
import GoogleMaps
```
そしてapplication(_app~)メソッドに、先程発行したAPIキーを挿入します。

＊APIキーは、CloudPlatformのコンソールでこのプロジェクトを選択し、「APIとサービス」→「認証情報」のところにあります。

```swift:AppDeleAppDelegate.swift

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        GMSServices.provideAPIKey("発行したAPIキー")
        
        return true
    }
```

これで、Platform上で作成したものと、このXcodeプロジェクトファイルがひも付きました。




### ひとまずGoogleMapを表示してみる

では、実際にMapを表示してみたいと思います。

まずは、自分の現在地を取得する前に、[公式ドキュメント](https://developers.google.com/maps/documentation/ios-sdk/start?hl=en)のようにMapを表示することを目標にします。以下のコードをViewControllerに記述してください。

```swift:ViewController.swift

import UIKit
import GoogleMaps

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func loadView() {

      //表示するMapの位置と表示の縮小具合
      let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 6.0)
      let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
      view = mapView

      // 指定した場所にピンを立てる。
      let marker = GMSMarker()
      marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
      marker.title = "Sydney"
      marker.snippet = "Australia"
      marker.map = mapView
    }
    
}
```
コードの内容は、簡単にコメントアウトしたので、参照してください。
上記のコードにより、AustraliaのSydneyにピンが立ったと思います。


### 現在地にピンを立てる。

では次に、自分の位置をGoogleMapで表示させます。手順としては、
①　自分のiphoneの端末で緯度・軽度を取得する
②　それをGoogleMapｓのメソッドに引数として挿入する
③　Mapを表示させる
です！

ではまず①から行いましょう！

①を行う際、こちらの記事を参考にしました。🔽
[【CoreLocation】位置情報を取得する](https://qiita.com/chino_tweet/items/db3a536234a43a3c31d9)

注意点としては、位置情報を取得するときユーザーから許可を得るためにInfo.Plistにしっかり記入することです。

この記事を元にすると、現在地の緯度と軽度が取得できます。

取得したものはそれぞれ

```swift:ViewController.swift

  var currentLatitude :Double!
  var currentLongitude :Double!
```

上記のようにDouble型で定義します。

では次に、②と③を同時にやってしまいます。

位置情報を取得する際に使用した、`locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])`メソッドの中に、先程のMap表示とピン立てにおいて書いたコードである、`GMSCameraPosition.camera`と`CLLocationCoordinate2D`の引数である緯度・軽度にそれぞれ取得したものを挿入します。

コードとしては以下です。

```swift:ViewController.swift

  func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location = locations.first
        
        currentLatitude = location?.coordinate.latitude
        currentLongitude = location?.coordinate.longitude

        print("latitude: \(currentLatitude!)\nlongitude: \(currentLongitude!)")
        
        let camera = GMSCameraPosition.camera(withLatitude: currentLatitude, longitude: currentLongitude, zoom: 6.0)
        let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        view = mapView

        
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: currentLatitude, longitude: currentLongitude)
        marker.map = mapView
    }
```

これで、自分が今いる現在地がgoogleMap上に表記できたと思います。

最後に、左下にあるgoogleマークをタップしたとき、GoogleMapに正しく遷移させるために、Info.Plistに以下のようなものを追加しましょう。
(ドキュメント通り)
![スクリーンショット 2020-02-15 0.25.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373532/dde37361-99f6-b7a1-d775-8c1a4e215fbe.png)


## おわりに
写真の前半部分などは、こちらからの転用です！
[【Rails5】RailsでGoogle Map APIの導入](https://qiita.com/nagaseToya/items/e49977efb686ed05eadb)

Railsでの使用を考えてる方は、ぜひ！