Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift iPhone GPS CoreLocation可快速获得准确读数_Swift_Gps_Core Location - Fatal编程技术网

Swift iPhone GPS CoreLocation可快速获得准确读数

Swift iPhone GPS CoreLocation可快速获得准确读数,swift,gps,core-location,Swift,Gps,Core Location,我不熟悉GPS,使用CoreLocation将用户的位置缩小到理想的2米。我曾在某个地方读到iPhone GPS坐标精确到4米,但我正在尝试一些方法来提高精度 我当前的解决方案 包括设置一个70秒的窗口,以平均最多3个坐标的列表,并在出现新的更精确的读数时替换它们。在着陆前,平均坐标在距离真实位置约8米(观察到)的范围内跳跃大约一分钟 选择下面的代码块: ... locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigat

我不熟悉GPS,使用CoreLocation将用户的位置缩小到理想的2米。我曾在某个地方读到iPhone GPS坐标精确到4米,但我正在尝试一些方法来提高精度

我当前的解决方案

包括设置一个70秒的窗口,以平均最多3个坐标的列表,并在出现新的更精确的读数时替换它们。在着陆前,平均坐标在距离真实位置约8米(观察到)的范围内跳跃大约一分钟

选择下面的代码块:

...
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文档中没有发现任何内容

真的,任何帮助都将不胜感激。谢谢