Swift 快速的室内高度不准确

Swift 快速的室内高度不准确,swift,core-location,Swift,Core Location,我试图收集我的用户在他们所在的大楼上下移动时的高度。我使用了guard let lastLocation=locations.last else{return} 让高度=最后位置。高度 使用CoreLocation收集高度,但高度似乎非常不准确。有人知道更准确地收集这些信息的方法吗?GPS在建筑物内不是很准确,尤其是钢框架建筑建筑物(在商业建筑中非常常见)。即使它的精度很好,或者超过了普通楼层之间的距离。iPhone使用各种其他技术,比如WiFi定位,来改进这一点。我自己的开发经验是,通常可以获

我试图收集我的用户在他们所在的大楼上下移动时的高度。我使用了
guard let lastLocation=locations.last else{return}
让高度=最后位置。高度

使用CoreLocation收集高度,但高度似乎非常不准确。有人知道更准确地收集这些信息的方法吗?

GPS在建筑物内不是很准确,尤其是钢框架建筑建筑物(在商业建筑中非常常见)。即使它的精度很好,或者超过了普通楼层之间的距离。iPhone使用各种其他技术,比如WiFi定位,来改进这一点。我自己的开发经验是,通常可以获得3m的精度

但这些都是水平的。由于角度变化很小,所以海拔高度往往不如这一点精确。如果你告诉我你的测量值垂直偏离10米(~3层),那我会大吃一惊。听起来你想要三角洲(海拔的变化),但即使是在一个建筑物里,这也是非常困难的

WiFi定位是这个故事的关键部分。谷歌和苹果(以及其他公司)在GPS信息和WiFi信息之间做了大量关联。当用户使用他们的地图产品时,他们会了解到许多WiFi接入点。他们将来自接入点的信息(如RSSI信号强度)与来自数百万部手机的GPS信息相关联,并利用这些信息确定接入点的位置,并利用这些信息创建更好的位置信息,尤其是内部位置信息。(请记住,GPS卫星距离我们大约20000公里,你的周围是一个巨大的金属盒子。他们正在尽最大努力。)确保整个位置(以及不同楼层)都有稳定的WiFi接入点,随着时间的推移,这将有助于系统了解你的建筑。不幸的是,这不是一个非常可靠的解决办法

这个很长答案的简短回答是,改进位置信息的方法是获取大量读数并将其平均,用惯性(加速度)信息进行补偿以处理运动。操作系统已经做到了这一点,但您可以继续平均更多的数据点(位置和速度),以期随着时间的推移获得更高的精度

当然,使用尽可能高的定位精度
kCLLocationAccuracyBest
通常是无需插入即可获得的最佳配置(它当然是一个耗电工具,因此您不能一直运行它)。如果您有外部电源,则可以使用
kCLLocationAccuracyBestForNavigation


否则,您将不得不对大量测量值进行平均,以确定您认为自己什么时候真的换了楼层。

您能在分配
位置时显示代码吗