为啥 CoreLocation 无法获取新的 GPS 数据并且 Mapkit 显示这个旧的 GPS 数据

Posted

技术标签:

【中文标题】为啥 CoreLocation 无法获取新的 GPS 数据并且 Mapkit 显示这个旧的 GPS 数据【英文标题】:why CoreLocation unable to fetch new GPS data and Mapkit display this old GPS data为什么 CoreLocation 无法获取新的 GPS 数据并且 Mapkit 显示这个旧的 GPS 数据 【发布时间】:2018-03-09 14:24:34 【问题描述】:

我正在使用 MapKit 和核心位置来显示我当前的 GPS 位置。 代码运行正常,但存在一些问题。

问题如下:

    我在路边等空旷的地方打开我的应用程序。该应用能够获取我当前的 GPS 位置并将其显示在地图上。 我走进一栋打开应用程序的建筑物。在里面时,我启动页面以显示 GPS 位置。它显示了我以前的 GPS 位置。据我所知,当我在大楼内时,Mapkit 和 Corelocation 应该无法获取 GPS。但在这种情况下,它会显示我之前的 GPS 数据! 我带着应用程序走出大楼。在开放空间中,我启动页面以显示我当前的 GPS 位置,但应用程序无法获取我的新 GPS 位置,但显示以前的 GPS 数据。在这种情况下,应用程序应该获取一个新的 GPS 位置。我必须尝试几次才能启动页面(从 GPS-VC 导航到 home-VC,从主页单击按钮启动 GPS-VC 以获取 GPS)。

为什么即使我在信号良好的开阔空间,GPS 还是这么慢?

调用这些方法有区别吗:

    LocationManager.startUpdatingLocation() LocationManager.requestLocation()

代码如下:

@IBOutlet weak var Map: MKMapView!

var locationMgr : CLLocationManager!

override func viewDidload()

    if(CLLocationManager.locationServicesEnabled() )
    
       locationMgr = CLLocationManager()
       locationMgr.delegate = self
       locationMgr.desriedAccuracy = kCLLocationAccuracyBest
       locationMgr.requestWhenInuseAuthorization()
       locationMgr.startUpdatingLocation()
    


func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
    let userLoction: CLLocation = locations[0]

    let latitude = userLoction.coordinate.latitude
    let longitude = userLoction.coordinate.longitude

    let latDelta: CLLocationDegrees = 0.05
    let lonDelta: CLLocationDegrees = 0.05

    let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta)
    let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
    let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span)

    let dropin = MKPointAnnotation()
    dropin.coordinate = location
    droping.title = "Here"

    self.Map.setRegion(region, animated: true)
    self.Map.addAnnotation(dropin)
    self.Map.showsUserLocation = true

【问题讨论】:

【参考方案1】:

我不确定这是否能解决您的所有 3 个问题,但我在您的委托方法中发现了以下问题:

    locations 数组按时间升序排序,因此locations.last 将包含最近的位置。 可能会使用旧的缓存值调用此方法,因此您需要检查位置的时间戳以确定是否值得使用。

【讨论】:

这听起来合乎逻辑。将调查位置数据。稍后会回到这里。

以上是关于为啥 CoreLocation 无法获取新的 GPS 数据并且 Mapkit 显示这个旧的 GPS 数据的主要内容,如果未能解决你的问题,请参考以下文章

为啥不用“import CoreLocation”就可以访问 iPhone 的位置?

为啥即使在有状态小部件中使用 setstate 也无法获取更新的变量。因为我想在新的 TabBar 选项上更新我的 Container

为啥新添加的 HBase 区域服务器无法获取分配的区域?

无法通过 Corelocation 找到位置

使用 CoreLocation 获取最近的位置

如何使用 CoreLocation 获取多个 iBeacon?