【问题标题】:how to get user latitude and longitude如何获取用户的经纬度
【发布时间】:2019-02-18 09:02:09
【问题描述】:

我正在尝试获取用户的纬度和经度值,但没有调用 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)")
    }
}

【问题讨论】:

  • 您最初是否收到警报提示
  • 你在 info.plist 中添加了NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription 吗?
  • 并在 iPhone 设置中检查您的应用程序的授予访问权限。您的应用程序应该可以访问位置服务。
  • 我添加了 NSLocationAlwaysUsageDescription,我也收到了该警报。但我没有获得纬度和经度值,我正在模拟器中运行我的应用程序
  • 请在设备代码上测试它是否完美。并确保 iPhone 设备位置隐私将打开。对于模拟器测试,请按照此步骤转到顶部栏并选择调试 -> 位置 -> 苹果。然后运行你的项目,它会工作。

标签: ios swift4 core-location


【解决方案1】:

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

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

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

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

希望对你有帮助。

【讨论】:

    【解决方案2】:

    导入以下框架

    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 中,您必须添加 确保您设置了以下隐私权限。 另外,请确保模拟器的定位服务已开启。

    • 隐私 - 位置始终和使用时使用说明
    • 隐私 - 使用时的位置使用说明

    【讨论】:

    • 如果用户想要显示地图,请导入 MapKit
    • 我收到了自定义警报,但我无法获得经纬度值
    • 你是在真机上测试吗?
    • 如果你在模拟器中运行你需要使用调试菜单来模拟一个位置。
    • 请在设备上检查你也会得到想要的结果。
    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 2011-08-26
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多