如何获取用户的经纬度

Posted

技术标签:

【中文标题】如何获取用户的经纬度【英文标题】: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 设备位置隐私将打开。对于模拟器测试,请按照此步骤转到顶部栏并选择调试 -> 位置 -> 苹果。然后运行你的项目,它会工作。 【参考方案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 我收到了自定义警报,但我无法获得经纬度值 你是在真机上测试吗? 如果你在模拟器中运行你需要使用调试菜单来模拟一个位置。 请在设备上检查你也会得到想要的结果。

以上是关于如何获取用户的经纬度的主要内容,如果未能解决你的问题,请参考以下文章

在不显示提示信息的情况下,如何获取用户当前位置的经纬度

如何通过IP地址或精确定位获取用户的经纬度

html5如果用户拒绝获取经纬度,如何重新获取权限提示是不是允许获取经纬度

如何根据IP地址获取用户机器的准确经纬度

用户在地图上标记点时如何获取经纬度值?

如何获取用户位置的纬度和经度?