关于CLLocationAccuracy:magnitude、精度与邻近性的关联及单位疑问
关于CLLocationAccuracy的常见技术问题解答
嘿,我来帮你拆解这两个iOS定位开发里的常见问题,都是和CLLocationAccuracy相关的核心点:
1. magnitude、accuracy(精度)与proximity(邻近性)三者的关联
首先得明确,CLLocationAccuracy其实是Double类型的别名,本质就是一个数值,我们一个个理清楚:
- accuracy(精度):就是
CLLocationAccuracy实例本身的值,比如你拿到CLLocation对象的horizontalAccuracy属性,它代表的是「真实位置落在当前坐标周围这个半径范围内的概率(通常是95%置信度)」,单位是米。正常情况下这个值是非负的,如果是负数,说明当前位置数据无效。 - magnitude:这是
Double类型自带的属性,对于CLLocationAccuracy来说,它就是accuracy值的绝对值。比如如果accuracy是-10(无效数据),它的magnitude就是10;如果是有效精度值20,magnitude也是20。正如Xcode文档里说的,它和全局函数abs(_:)效果一致,只是语法形式不同。 - proximity(邻近性):这是一个基于accuracy和位置距离的判断逻辑。比如要判断两个定位点是否「邻近」,通常的逻辑是:计算两个点之间的直线距离,如果这个距离 ≤ 两个点的accuracy值之和,就可以认为它们的真实位置可能存在重叠,属于邻近范围。简单说就是,精度误差的范围覆盖了两个点之间的距离,那这两个点就可以算作邻近。
2. CLLocationAccuracy的magnitude值是否以米为单位?
答案是肯定的。
因为CLLocationAccuracy本身的单位就是米(比如horizontalAccuracy表示的是米级的精度半径),而magnitude只是取这个值的绝对值,单位并不会发生变化。
再结合你提到的Xcode文档内容:
Description: The magnitude of this value. //此处的value指的就是当前
CLLocationAccuracy实例对应的accuracy数值。对于任意值x,x.magnitude.sign为.plus。若x非NaN,x.magnitude即为x的绝对值。全局函数abs(:)在获取绝对值时语法更常用。此外,由于abs(:)始终返回相同类型的值,即使在地理场景下...
这里的value确实就是指CLLocationAccuracy对应的精度值,所以它的magnitude自然也继承了米这个单位。在实际开发中,用abs(accuracy)或者accuracy.magnitude都能得到米为单位的精度绝对值,效果完全一致。
内容的提问来源于stack exchange,提问作者ewizard
相关产品推荐
相关产品推荐

