当前位置使用 Google 地图和 Swift
Current Location using Google Maps and Swift
我需要显示我当前的真实位置。我使用这两个教程作为参考:
Google Maps SDK iOS
和
Ray Wenderlich.
都没有帮我显示我当前的真实位置它显示了 Apple 的位置。
我在 info.plist
文件中添加了 Privacy - Location When In Use Usage Description
和 LSApplicationQueriesSchemes
。
我的代码有什么问题?
如何添加带有当前位置的标记?
我的代码:
AppDelegate.swift
import GoogleMaps
import GooglePlaces
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
GMSServices.provideAPIKey("AIzaSyCNcYUEURD7DSk6qksdKyp63w-ZetdWQZc")
GMSPlacesClient.provideAPIKey("AIzaSyCNcYUEURD7DSk6qksdKyp63w-ZetdWQZc")
return true
}
ViewController.swift
import UIKit
import GoogleMaps
import GooglePlaces
class ViewController: UIViewController {
@IBOutlet weak var mapView: GMSMapView!
private var locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
}
}
extension ViewController: CLLocationManagerDelegate {
// 2
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
// 3
guard status == .authorizedWhenInUse else {
return
}
// 4
locationManager.startUpdatingLocation()
//5
mapView.isMyLocationEnabled = true
mapView.settings.myLocationButton = true
}
// 6
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.first else {
return
}
// 7
mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
// 8
locationManager.stopUpdatingLocation()
}
}
如果您 运行 在模拟器中进行此操作,您将获得预设位置之一。您可以通过转到 DEBUG > Location > select preset or custom 来更改模拟器位置。
如果您想将模拟器的位置设置为您的当前位置,请转到 maps.google.com 右键单击地图和 select "What's here?",它会给您 lat/long。从上面的设置中将它们复制并粘贴到 "custom location" 中。
如果您 运行 在实际设备上,您将获得设备位置,假设您已请求所有正确的权限并设置 info.plist 条目。
我需要显示我当前的真实位置。我使用这两个教程作为参考: Google Maps SDK iOS 和 Ray Wenderlich.
都没有帮我显示我当前的真实位置它显示了 Apple 的位置。
我在 info.plist
文件中添加了 Privacy - Location When In Use Usage Description
和 LSApplicationQueriesSchemes
。
我的代码有什么问题?
如何添加带有当前位置的标记?
我的代码:
AppDelegate.swift
import GoogleMaps
import GooglePlaces
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
GMSServices.provideAPIKey("AIzaSyCNcYUEURD7DSk6qksdKyp63w-ZetdWQZc")
GMSPlacesClient.provideAPIKey("AIzaSyCNcYUEURD7DSk6qksdKyp63w-ZetdWQZc")
return true
}
ViewController.swift
import UIKit
import GoogleMaps
import GooglePlaces
class ViewController: UIViewController {
@IBOutlet weak var mapView: GMSMapView!
private var locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
}
}
extension ViewController: CLLocationManagerDelegate {
// 2
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
// 3
guard status == .authorizedWhenInUse else {
return
}
// 4
locationManager.startUpdatingLocation()
//5
mapView.isMyLocationEnabled = true
mapView.settings.myLocationButton = true
}
// 6
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.first else {
return
}
// 7
mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
// 8
locationManager.stopUpdatingLocation()
}
}
如果您 运行 在模拟器中进行此操作,您将获得预设位置之一。您可以通过转到 DEBUG > Location > select preset or custom 来更改模拟器位置。 如果您想将模拟器的位置设置为您的当前位置,请转到 maps.google.com 右键单击地图和 select "What's here?",它会给您 lat/long。从上面的设置中将它们复制并粘贴到 "custom location" 中。
如果您 运行 在实际设备上,您将获得设备位置,假设您已请求所有正确的权限并设置 info.plist 条目。