我应该如何使用 iOS SDK 版 Mapbox 中的用户位置找到正确的位置数据?(斯威夫特)



我正在尝试找到用户位置的纬度和经度,以便我可以在viewdidload中将地图集中在用户身上。

我已经实现了似乎是正确的代码,但是userLat(纬度)和userLon(经度)的值相差甚远。

注意:其他人和我有同样的问题,但他的答案从未得到解决:Mapbox iOS8 Swift mapView.showUsersLocation

import Mapbox
class ViewController: UIViewController, MGLMapViewDelegate, CLLocationManagerDelegate {
//    let locationManager = CLLocationManager()
    @IBOutlet weak var mapView: MGLMapView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Initalise map's center coordinate as vancouver
        mapView.setCenterCoordinate(CLLocationCoordinate2D(latitude: 49.283382,
            longitude: -123.117394),
            zoomLevel: 15, animated: false)
        view.addSubview(mapView)
        // Set the delegate property of our map view to self after instantiating it.
        mapView.delegate = self
        // User location
        mapView.showsUserLocation = true
        let userLoc = mapView.userLocation!
        userLoc.title = "Hello"
        userLoc.subtitle = "I am here!"
        let userLat = userLoc.coordinate.latitude
        let userLon = userLoc.coordinate.longitude
        print(userLat, userLon)
        /*
        self.locationManager.requestAlwaysAuthorization()
        if CLLocationManager.locationServicesEnabled() {
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
            locationManager.startUpdatingLocation()
        }*/
    }
    func mapView(mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
        return true
    }
}

生成的打印:

3.40282346638529e+38 3.40282346638529e+38

奇怪的是注释工作正常,当我单击我的位置时,我得到了标题和副标题。

将地图居中放在用户位置的最简单方法是设置MGLMapView.userTrackingMode = .follow(在目标 C 中MGLUserTrackingModeFollow)。当有可用位置时,这将自动移动地图。

您看到MGLMapView.userLocation的虚假数字的原因是,用户的位置通常在viewDidLoad中尚不可用。使用 mapView:didUpdateUserLocation: 委托方法在用户的位置可用和更新时收到通知。

有一个名为 mapViewDidFinishLoadingMap 的委托方法。在此方法中,将地图的中心设置为用户坐标。

func mapViewDidFinishLoadingMap(_ mapView: MGLMapView) {
    mapView.setCenter((mapView.userLocation?.coordinate)!, animated: false)
}

相关内容

  • 没有找到相关文章

最新更新