如何获取用户的经纬度
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 中添加了NSLocationAlwaysUsageDescription
或NSLocationWhenInUseUsageDescription
吗?
并在 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 我收到了自定义警报,但我无法获得经纬度值 你是在真机上测试吗? 如果你在模拟器中运行你需要使用调试菜单来模拟一个位置。 请在设备上检查你也会得到想要的结果。以上是关于如何获取用户的经纬度的主要内容,如果未能解决你的问题,请参考以下文章