如何获得用户的纬度和经度

时间:2019-02-18 09:02:10

标签: ios swift4 core-location

我正在尝试获取用户的纬度和经度值,但是没有调用CLLocationManagerDelegate的方法。预先感谢任何可以帮助我解决此问题的人。

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    var locationmanager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        locationmanager.delegate = self;
        locationmanager.desiredAccuracy = kCLLocationAccuracyBest
        locationmanager.requestAlwaysAuthorization()
        locationmanager.startUpdatingLocation()
    }

    //MARK: - location delegate methods
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        let userLocation :CLLocation = locations[0] as CLLocation
        print("user latitude = \(userLocation.coordinate.latitude)")
        print("user longitude = \(userLocation.coordinate.longitude)")
    }
}

2 个答案:

答案 0 :(得分:1)

通常可以。要访问用户的当前位置,您需要物理设备。

不过,还有第二种方法可以使用工具栏上控制台上方提供的模拟位置选项在模拟器上模拟位置。当您的应用程序运行时,此选项可用。

单击它以查看位置列表,然后选择位置以在模拟器上获取设备位置。它不是当前位置,但模拟位置会将模拟器位置设置为您选择的位置。见下图:

Simulate Location

您还可以添加自定义GPX文件以加载当前位置。您也可以从模拟器的调试菜单添加“客户位置”。见下图:

Customer Location

我希望这会对您有所帮助。

答案 1 :(得分:0)

导入以下框架

Import CoreLocation

如果要显示地图

Import MapKit

您可以通过声明以下内容来确定用户的当前位置  CLLocationManager实例:

let locationManager = CLLocationManager()

viewDidLoad()中,您必须实例化CLLocationManager类,  像这样:

// Ask for Authorisation from the User.
self.locationManager.requestAlwaysAuthorization() 
// For use in foreground
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    locationManager.startUpdatingLocation()
}

然后用CLLocationManagerDelegate方法可以获取用户的当前  位置坐标:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
    print("locations = \(locValue.latitude) \(locValue.longitude)")
}

您必须在info.plist中添加 确保设置以下隐私权限。  另外,请确保模拟器的定位服务已启用。

  • 隐私-位置始终且在使用时用法说明
  • 隐私-使用时的位置用法说明