我有一个有 6 个 iBeacon 的房间,如果其中一个 iBeacon 距离设备不到 2.5 米,我会调用一个 Action ,但这不是很好,因为经常有很大的干扰,导致错误的 Action 。 我的问题是,使用 rssi 值还是准确度对这些 Beacon 进行排序哪个更好?
在我用于排序/调用操作的代码下方:
if beacons.count > 0 {
let sortedBeacons = beacons.sorted { (first, second) -> Bool in
if first.accuracy == -1 || second.accuracy == -1 {
return true
}
return first.accuracy < second.accuracy
}
let beacon = sortedBeacons[0]
if beacon.major.intValue == helperMajorValue && beacon.accuracy < 2.5 {
if beacon.accuracy != -1 {
if triggeredMajor == 0 {
counter += 1
} else if abs((helperMajorValue - triggeredMajor)) < 3 {
counter += 1
}
}
} else {
counter = 0
helperMajorValue = beacon.major.intValue
}
if counter > 4 {
counter = 0
print("majorValue: \(beacon.major.intValue) distance: \(beacon.accuracy)")
if beacon.accuracy < 2.5 {
startNavigation = true
majorValue = helperMajorValue
triggered = false
}
}
if majorValue == 171 {
//call action
} else if majorValue == 170 {
//call action
} else if majorValue == 172 {
//Call action
}}
最佳答案
使用 CLBeacon
的 rssi
或 accuracy
字段对信标进行排序的最大区别在于可变性或数量和平均间隔。
精度字段是大约 20 秒内的平均值,因此它实质上为您提供了设备在过去 20 秒内所处位置的估计距离。真正的优势是这个数字比 rssi 噪音小得多,但是有明显的滞后。
rssi 字段平均超过 1 秒,因此它使用的数据点要少得多。虽然它有较少的时间延迟,但它也有很多更多的噪音。出于排序目的,如果使用 rssi,您会看到排序顺序跳跃得更多。
您必须根据@Duncan-C 在他的回答中描述的距离估计值,适本地设置您的期望值。但对于一些精度不重要的用例,它们可以很好地工作。
关于ios - Swift iBeacon 使用 accuracy 或 rssi 来保持距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41076392/