【发布时间】:2016-08-29 14:42:43
【问题描述】:
有趣的案例:如果我们将 iPhone 移至 iBeacon 设备,准确性值的变化比将 iPhone 从设备移出时快得多。 我怎样才能使这个过程更快?
【问题讨论】:
标签: ios core-location ibeacon
有趣的案例:如果我们将 iPhone 移至 iBeacon 设备,准确性值的变化比将 iPhone 从设备移出时快得多。 我怎样才能使这个过程更快?
【问题讨论】:
标签: ios core-location ibeacon
正如您所指出的,CoreLocation 对过去的信号测量值进行平均以得出accuracy 计算(距离估计以米为单位)。用于进行平均的算法尚未发布,但我的测量结果显示滞后约 20 秒后稳定下来。我没有注意到靠近或远离之间的延迟差异。
您无法控制此平均间隔。您唯一能做的就是在您希望的任何时间段内自己平均 RSSI。然后,您可以使用自定义计算将平均 RSSI 转换为距离。
为此,您需要拥有所有具有相同发射功率的信标,因为您无法访问信标广告中测量的功率校准常数。 (Apple 不允许读取此值。)。相反,这个常数必须在您的客户距离计算中进行硬编码。
您可以在此处查看执行此操作的示例代码:
+(double) distanceForRSSI:(double)rssi forPower:(int)txPower {
// use coefficient values from spreadsheet for iPhone 4S
double coefficient1 = 2.922026; // multiplier
double coefficient2 = 6.672908; // power
double coefficient3 = -1.767203; // intercept
if (rssi == 0) {
return -1.0; // if we cannot determine accuracy, return -1.0
}
double ratio = rssi*1.0/txPower;
double distance;
if (ratio < 1.0) {
distance = pow(ratio,10);
}
else {
distance = (coefficient1)*pow(ratio,coefficient2) + coefficient3;
}
if (distance < 0.1) {
NSLog(@"Low distance");
}
return distance;
}
https://github.com/AltBeacon/ios-beacon-tools/blob/master/ios-beacon-tools/RNLBeacon%2BDistance.m
【讨论】:
didRangeBeacons:inRegion 回调中收集最后 5 次回调的平均 RSSI(您可以根据需要调整时间),然后将此平均 RSSI 传递给所示的方法。