Swift iPhone GPS CoreLocation可快速获得准确读数
我不熟悉GPS,使用CoreLocation将用户的位置缩小到理想的2米。我曾在某个地方读到iPhone GPS坐标精确到4米,但我正在尝试一些方法来提高精度 我当前的解决方案 包括设置一个70秒的窗口,以平均最多3个坐标的列表,并在出现新的更精确的读数时替换它们。在着陆前,平均坐标在距离真实位置约8米(观察到)的范围内跳跃大约一分钟 选择下面的代码块:Swift iPhone GPS CoreLocation可快速获得准确读数,swift,gps,core-location,Swift,Gps,Core Location,我不熟悉GPS,使用CoreLocation将用户的位置缩小到理想的2米。我曾在某个地方读到iPhone GPS坐标精确到4米,但我正在尝试一些方法来提高精度 我当前的解决方案 包括设置一个70秒的窗口,以平均最多3个坐标的列表,并在出现新的更精确的读数时替换它们。在着陆前,平均坐标在距离真实位置约8米(观察到)的范围内跳跃大约一分钟 选择下面的代码块: ... locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigat
...
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.distanceFilter = kCLDistanceFilterNone
...
var timer = 70
func startTracking() {
var _ = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(countdown), userInfo: nil, repeats: true)
}
@objc func countdown() { self.timer -= 1 }
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// 70 seconds to pin down verify location
if self.timer <= 1 {return}
if let oldLoc = locationDataService.initialLocationEstimate {
updateInitialLocation(newLocation: self.locationManager.location!)
}
}
...
updateInitialLocationEstimate() {
let newLocationAccuracy = newLocation.horizontalAccuracy
if self.initialLocationAccuracy != nil {
// don't use if greater than 12m and less accurate.
if newLocationAccuracy > self.initialLocationAccuracy! && newLocationAccuracy > 8 {
return
} else if newLocation.horizontalAccuracy < initialLocationAccuracy! {
// eliminates the less accurate readings
trimByAccuracy(locations: &self.initialLocationEstimates, newAccuracy: newLocationAccuracy)
self.initialLocationAccuracy = newLocationAccuracy
}
if (self.initialLocationEstimates.count > 4) {
initialLocationEstimates.removeFirst()
}
} else {
self.initialLocationAccuracy = newLocationAccuracy
}
self.initialLocationEstimates.append(newLocation)
self.initialLocationEstimate = estimateCentralCoordinate(locations: initialLocationEstimates, accuracy: initialLocationAccuracy!)
}
。。。
locationManager.desiredAccuracy=KCallocationAccuracyBestforNavigation
locationManager.distanceFilter=KCLDistanceFilterOne
...
var定时器=70
func startTracking(){
var#=Timer.scheduledTimer(时间间隔:1.0,目标:self,选择器:#选择器(倒计时),userInfo:nil,repeats:true)
}
@objc func倒计时(){self.timer-=1}
func locationManager(manager:CLLocationManager,didUpdateLocations位置:[CLLocation]){
//70秒锁定并确认位置
如果self.timer.4m(已观察到)精度等级。目前,获取~8m读数大约需要一分钟。我能做些什么吗
2) 提高观察的准确性。这里任何建议都会有帮助
3) 有人建议我使用卡尔曼滤波器,但CoreLocation给我的速度是不确定的。当我站着不动时,它经常在+/-0-1m/s之间波动,是否有一些我不知道的设置来稳定读数
4) 我应该进行平均/过滤吗?我读到好的GPS软件已经进行了平均,但我在iOS CoreLocation文档中没有发现任何内容
真的,任何帮助都将不胜感激。谢谢