为什么 MKMapView 中的用户位置显示纬度 0.0 和经度 0.0?

丹尼尔·布劳尔

所有与此类似的堆栈溢出问题似乎都是针对Java和Android的。

我有以下使用 MKMapView 控件的代码。

override func viewDidLoad() {
    super.viewDidLoad()

    mapView.showsUserLocation = true
    mapView.setUserTrackingMode(.followWithHeading, animated: true)

    let locationCoordinate = CLLocationCoordinate2D(latitude: mapView.userLocation.coordinate.latitude, longitude: mapView.userLocation.coordinate.longitude)
    currentLocationCoordinateRegion = MKCoordinateRegion(center: locationCoordinate, latitudinalMeters: 200, longitudinalMeters: 200)

    mapView.setRegion(currentLocationCoordinateRegion, animated: true)

    print("latitude:", mapView.userLocation.coordinate.latitude, "longitude:", mapView.userLocation.coordinate.longitude)

}

我使用的是实际设备,因此地图视图应显示我的当前位置,打印语句应打印我的当前位置,但我在地图视图上看到蓝色,打印结果显示纬度为 0.0,经度为 0.0在调试窗口中:

纬度:0.0 经度:0.0

为什么要这样做,我应该怎么做才能解决这个问题?

我在工具栏上还有一个带有以下代码的栏按钮项:

@IBAction func actionShow(_ sender: UIBarButtonItem) {

    print("latitude:", mapView.userLocation.coordinate.latitude, "longitude:", mapView.userLocation.coordinate.longitude)

    let locationCoordinate = CLLocationCoordinate2D(latitude: mapView.userLocation.coordinate.latitude, longitude: mapView.userLocation.coordinate.longitude)
    currentLocationCoordinateRegion = MKCoordinateRegion(center: locationCoordinate, latitudinalMeters: 200, longitudinalMeters: 200)

    mapView.setRegion(currentLocationCoordinateRegion, animated: true)

}

这会产生相同的结果。

阿米尔

您必须请求访问用户位置的权限,这是您执行的第一个操作viewDidLoad,然后在获得权限后继续显示用户位置,按照 UIViewController 操作即可

class ViewController: UIViewController {

    @IBOutlet var mapView: MKMapView!
    var locationManager: CLLocationManager?

    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self
        mapView.setUserTrackingMode(.followWithHeading, animated: true)

        self.checkLocationAuthorization()
    }

    func checkLocationAuthorization(authorizationStatus: CLAuthorizationStatus? = nil) {
        switch (authorizationStatus ?? CLLocationManager.authorizationStatus()) {
        case .authorizedAlways, .authorizedWhenInUse:
            mapView.showsUserLocation = true
        case .notDetermined:
            if locationManager == nil {
                locationManager = CLLocationManager()
                locationManager!.delegate = self
            }
            locationManager!.requestWhenInUseAuthorization()
        default:
            print("Location Servies: Denied / Restricted")
        }
    }

}

extension ViewController: MKMapViewDelegate, CLLocationManagerDelegate {

    func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
        let region = MKCoordinateRegion(center: userLocation.coordinate, latitudinalMeters: 200, longitudinalMeters: 200)
        mapView.setRegion(region, animated: true)
    }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        self.checkLocationAuthorization(authorizationStatus: status)
    }

}

您还必须在 中包含以下属性Info.plist,否则locationManager将不会继续请求授权。

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Message for AlwaysAndWhenInUseUsageDescription</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Message for AlwaysUsageDescription</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>Message for WhenInUseUsageDescription</string>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android-为什么我的“当前位置”应用程序总是返回0纬度和0经度?

来自分类Dev

为什么我的Android应用程序始终将纬度和经度设置为0?

来自分类Dev

如果[0] == 0和0 == [[0]]都为真,那么为什么[0] == [[0]]为假?

来自分类Dev

为什么不是“ 0” ==“ 0”?

来自分类Dev

为什么 [0] === [0] 是假的

来自分类Dev

当 UWP 应用中的位置关闭时,纬度和经度变为 0

来自分类Dev

为什么“0”和“0”被评估为假?

来自分类Dev

为什么-0存在?

来自分类Dev

为什么0 = 0.5?

来自分类Dev

为什么返回0?

来自分类Dev

为什么打印0?

来自分类常见问题

为什么x [0]!= x [0] [0]!= x [0] [0] [0]?

来自分类Dev

为什么在/ etc / passwd中找不到+ :: 0:0 :::?

来自分类Dev

lighttpd配置中的$ 0和%0是什么?

来自分类Dev

为什么0 mod 0是错误?

来自分类Dev

为什么对memset使用'\ 0'而不是0?

来自分类Dev

为什么0%0会产生1?

来自分类Dev

为什么对memset使用'\ 0'而不是0?

来自分类Dev

为什么 x^(-1/0) = 0

来自分类Dev

args ._ [0]中的._ [0]有什么作用?

来自分类Dev

在Coq中a + b = 0-> a = 0和b = 0

来自分类Dev

为什么浮点乘法显示0

来自分类Dev

为什么输出显示0而不是0.0?

来自分类Dev

为什么NSNumber * a = 0不显示错误

来自分类Dev

为什么在添加时仍显示0?

来自分类Dev

编码中0和-0之间的差异

来自分类Dev

在汇编中添加0和sub 0

来自分类Dev

数组中0和'0'之间的差异

来自分类Dev

Teradata中的0前面和0后面