gpt4 book ai didi

ios - Swift 通过 rssi 找到最近的 Beacon

转载 作者:行者123 更新时间:2023-11-29 01:46:43 25 4
gpt4 key购买 nike

我正在尝试的是 iBeacon,我从 Youtube 学到了一些东西。这是通过邻近度找到最近的信标,但不是很准确。所以我想通过 rssi 找到最接近的一个。我应该如何修改代码? rssi的值总是负数,是不是rssi越大越接近?

 func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
//print(beacons)
let knownBeacons = beacons.filter{ $0.proximity != CLProximity.Unknown }

//print(knownBeacons)
if(knownBeacons.count>0){
let closestBeacon = knownBeacons[0] as CLBeacon
self.showName.text = self.name[closestBeacon.minor.integerValue]
}
}

最佳答案

RSSI 的幅度越低,信号越强。换句话说,-49 dBm 的 RSSI 表示比 -59 dBm 的信号更强(并且通常是更近的信标)。

您当然可以使用 RSSI 而不是使用 CLBeacon 精度属性来计算最近的信标,但是您不会得到更一致的结果。这是因为在 iOS 上,RSSI 仅在 1 秒内取平均值(使用该期间检测到的数据包的所有测量值),而 CLBeacon 精度属性取平均值超过 20 秒。这意味着精度属性(以米为单位测量估计距离)更加稳定。

编辑:修复了两个版本中的错误

所以你可以试试这个:

var closestBeacon: CLBeacon? = nil
for beacon in beacons {
if closesBeacon ==nil || (beacon.rssi < 0 && beacon.rssi > closestBeacon!.rssi) {
closestBeacon = beacon as? CLBeacon
}
}

但是你会得到更稳定的结果:

var closestBeacon: CLBeacon? = nil
for beacon in beacons {
if closesBeacon == nil || (beacon.accuracy > 0 && beacon.accuracy < closestBeacon!.accuracy) {
closestBeacon = beacon as? CLBeacon
}
}

关于ios - Swift 通过 rssi 找到最近的 Beacon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31834641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com