구글 맵SDK를 사용하여 맵 표시

8749 단어 Swift위치 정보
GoogleMapSDK로 Map 표시
기본적으로공식. 그렇습니다.

SDK 가입


Podfile에 다음 내용을 적고 두드리기pod install
target 'hogehoge' do
    pod 'GoogleMaps'
    pod 'GooglePlaces'
end

지도 보이기


먼저 공식 Get The APIKey에서 APIKey 항목을 선택하고 가져옵니다.

APIkey를 가져오면 Appdelegate가 표시됩니다.swit-application(: d i d F inishLaunchingWithOptions:) 방법을 사용하여 응용 프로그램에 넣기
import GoogleMaps
import GooglePlaces

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        GMSServices.provideAPIKey("取得したAPIKeyを入れる")
        GMSPlacesClient.provideAPIKey("取得したAPIKeyを入れる")

        return true
    }

준비가 되었으므로 이제 디스플레이 맵 설치를 시작합니다.
위도 경도를 지정하여 GMSCamera Position 인스턴스를 생성하고 이를 사용하여 GMSMapView 인스턴스를 생성합니다.
import GoogleMaps

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func loadView() {
        // マップに指定の緯度経度の場所を指定の倍率で表示するように指示
        let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 10.0)

        // GMSMapViewインスタンスを生成
        let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        view = mapView
    }
}


사용자가 맵에서 Google logo를 클릭하면 Google Maps SDK for iOS를 통해 브라우저 버전의 Google Map이 열립니다.

목표 좌표에 동그라미를 그리다


    override func loadView() {
        let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 10.0)

        let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        view = mapView

        // 追加箇所
        // markerはピンの場所
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
        marker.title = "Sydney"
        marker.snippet = "Australia"
        marker.map = mapView
    }

소재지 표시


# 인증 요청을 위해 info.plist 구성


iOS 애플리케이션에서 사용자의 개인 정보 보호를 받으려면 라이센스가 필요합니다.
미리 info.plist의 Privacy - Location When In Use Usage Description에서 (이 프로그램이 위치 정보를 얻는 등) 위치 정보를 사용하는 뜻을 기재해야 한다.
다음 세 개의 응용 프로그램은 사용자로부터 인증을 받을 수 있다

authorizedAlways(항상 허용)


authorizedWhen InUse(사용 중만 가능)


denied(허용되지 않음)


이번에는 사용만 가능합니다.plist의 KeyPrivacy - Location When In Use Usage Description를 적당히value現在地を取得します로 설정

# 코드 측 인증 요청


코드 측면에서도 CLLoacationManager 클래스 인스턴스 방법requestWhenInUseAuthorization()을 통해 요청을 보냅니다.
*CLLoction Manager는 iOS SDK에서 표준적으로 준비된 위치 정보와 관련된 라이브러리 CoreLocation을 가져와서 사용할 수 있으나 CoreLoction 자체를 가져오지 않아도 GoogleMaps를 가져와서 사용할 수 있습니다
import GoogleMaps

class ViewController: UIViewController {
// GoogleMapをインポートしているためか、CoreLocationをインポートしなくてもCLLocationManagerオブジェクトを生成できる
    let locationManager = CLLocationManager() // ← NEW

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func loadView() {
        (省略)
    }

    func setupLocationManager() {
         // ユーザーに対して位置情報を取得する許可をリクエストする      ← NEW
         locationManager.requestWhenInUseAuthorization()
    }
}

# 위치 정보 검색의 시작


응용 프로그램에서 위치 정보를 사용하여 라이센스를 받은 경우 위치 정보를 가져옵니다.
CLLoctionManager 속성에 대한 distanceFilter 설정 값으로 이동할 미터를 결정한 후 현재 위치를 업데이트할 수 있습니다.

import GoogleMaps

class ViewController: UIViewController {
// GoogleMapをインポートしているためか、CoreLocationをインポートしなくてもCLLocationManagerオブジェクトを生成できる
    let locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()
            setupLocationManager() ← NEW
    }

    override func loadView() {
        (省略)
    }

    func setupLocationManager() {
         // ユーザーに対して位置情報を取得する許可をリクエストする
         locationManager.requestWhenInUseAuthorization()
    }

    func setupLocationManager() {
        locationManager.requestWhenInUseAuthorization()
        // ↓NEW
        if .authorizedWhenInUse == CLLocationManager.authorizationStatus() {
            // 何メートル移動ごとに情報を取得するか。ここで設定した距離分移動したときに現在地を示すマーカーも移動する
            locationManager.distanceFilter = 1
            // 位置情報取得開始
            locationManager.startUpdatingLocation()
        }
    }
}


# 프로토콜 및 범위 지정 방법 적용


CLLoction Manager Delegate를 사용하고 '응용 사용 중인 위치 정보 획득' 의 허가를 받은 경우에만 ViewController 클래스가 CLLoction Manager의 수송 목적지가 된다

import GoogleMaps

class ViewController: UIViewController {
// GoogleMapをインポートしているためか、CoreLocationをインポートしなくてもCLLocationManagerオブジェクトを生成できる
    let locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func loadView() {
        (省略)
    }

    func setupLocationManager() {
         // ユーザーに対して位置情報を取得する許可をリクエストする
         locationManager.requestWhenInUseAuthorization()
    }

    func setupLocationManager() {
        locationManager.requestWhenInUseAuthorization()
        if .authorizedWhenInUse == CLLocationManager.authorizationStatus() {
            // 何メートル移動ごとに情報を取得するか。ここで設定した距離分移動したときに現在地を示すマーカーも移動する
            locationManager.distanceFilter = 1
            // 位置情報取得開始
            locationManager.startUpdatingLocation()
        }
    }

    // 位置情報を取得・更新するたびに呼ばれる ← NEW
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print(locations)
    }
}


전체 코드


마지막으로 코드를 다 올리면 끝이에요.


import UIKit
import GoogleMaps

class ViewController: UIViewController, CLLocationManagerDelegate {

    let locationManager = CLLocationManager()

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

    override func loadView() {
        // マップに指定の緯度経度の場所を指定の倍率で表示するように指示
        let camera = GMSCameraPosition.camera(withLatitude: -33.86, longitude: 151.20, zoom: 10.0)

        // 指定のフレームとcameraPositionでmapviewをビルドして返す
        let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        mapView.isMyLocationEnabled = true
        view = mapView

        // markerはピンの場所
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.20)
        marker.title = "Sydney"
        marker.snippet = "Australia"
        marker.map = mapView
    }

    func setupLocationManager() {
        locationManager.requestWhenInUseAuthorization()

        // 「アプリ使用中の位置情報取得」の許可が得られた場合のみ、CLLocationManagerクラスのstartUpdatingLocation()を呼んで、位置情報の取得を開始する
        if .authorizedWhenInUse == CLLocationManager.authorizationStatus() {

            // 許可が得られた場合にViewControllerクラスがCLLoacationManagerのデリゲート先になるようにする
            locationManager.delegate = self
            // 何メートル移動ごとに情報を取得するか。ここで設定した距離分移動したときに現在地を示すマーカーも移動する
            locationManager.distanceFilter = 1
            // 位置情報取得開始
            locationManager.startUpdatingLocation()
        }
    }

    // 位置情報を取得・更新するたびに呼ばれる
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location = locations.first
        let latitude =  location?.coordinate.latitude
        let longitude = location?.coordinate.longitude

        print("latitude: \(latitude!)\n longitude: \(longitude!)")
    }
}

인용하다


https://developers.google.com/maps/documentation/ios-sdk/start
https://qiita.com/koogawa/items/adc2dd19015586bda39b
https://qiita.com/chino_tweet/items/db3a536234a43a3c31d9#%E3%83%93%E3%83%AB%E3%83%89

좋은 웹페이지 즐겨찾기