我为不知道这里所有内容的正确术语而道歉。我是一个相当新的程序员,对Swift来说是全新的。我想要完成的任务是以MPH显示当前速度。我发现使用“CoreLocation”并在数组中存储位置并使用“locations.speed”来显示速度非常慢,并且不会像我想的那样经常刷新。
我的想法是使用“MapKit”和“CoreLocation”方法获得初始速度值,然后使用加速度计将该初始速度值输入函数,以提供更快的响应速度计。我会通过积分加速度计值并添加初始速度来做到这一点。这是我能想出的最佳解决方案,以获得更准确的速度计,并提供更好的刷新率。
我目前遇到了几个问题:
第一期:我不知道如何使用位置数据作为参数将函数从使用加速度计数据作为参数的函数中获取初始速度值。
第二期:即使假设初始速度为0,我当前的程序也会显示一个无限增加的值。我不确定导致这个问题的原因是什么。
我将向您展示我的代码中对此负责的一部分,并且非常感谢您有任何见解!
对于我的第一期,这是我的GPS数据功能:
func provideInitSpeed(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])->Double {
let location = locations[0]
return ((location.speed)*2.23693629) //returns speed value converted to MPH
}
我不确定如何进行函数调用以在我的Accelerometer函数中检索此值。
对于我的第二期,这是我的加速度计功能,假设起始速度为0:
motionManager.startAccelerometerUpdates(to: OperationQueue.current!) {
(data,error) in
if let myData = data {
//getting my acceleration data and rounding the values off to the hundredths place to reduce noise
xAccel = round((myData.acceleration.x * g)*100)/100
yAccel = round((myData.acceleration.y * g)*100)/100
zAccel = round((myData.acceleration.z * g)*100)/100
// Integrating accel vals to get velocity vals *Possibly where error occurs* I multiply the accel values by the change in time, which is currently set at 0.2 seconds.
xVel += xAccel * self.motionManager.accelerometerUpdateInterval
yVel += yAccel * self.motionManager.accelerometerUpdateInterval
zVel += zAccel * self.motionManager.accelerometerUpdateInterval
// Finding total speed; Magnitude of Velocity
totalSpeed = sqrt(pow(xVel,2) + pow(yVel,2) + pow(zVel,2))
// if-else statment for further noise reduction. note: "zComp" just adjusts for the -1.0 G units z acceleration value that the phone reads by default for gravity
if (totalSpeed - zComp) > -0.1 && (totalSpeed - zComp) < 0.1 {
self.view.reloadInputViews()
self.speedWithAccelLabel.text = "\(0.0)"
} else {
// Printing totalSpeed
self.view.reloadInputViews()
self.speedWithAccelLabel.text = "\(abs(round((totalSpeed - zComp + /*where initSpeed would go*/)*10)/10))"
}
}//data end
}//motionManager end
我不确定为什么但是这个功能显示的速度每次刷新标签时总是增加约4英里/小时。
这是我第一次使用Stack Overflow,所以我为我可能犯的任何愚蠢错误道歉!
非常感谢!