有趣的案例:如果我们将iPhone移动到iBeacon设备,准确度的变化比我们从设备移动iPhone时要快得多。 如何更快地完成此过程?
答案 0 :(得分:1)
正如您所注意到的,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