为啥 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