Ios Swift通过rssi查找最近的信标

Ios Swift通过rssi查找最近的信标,ios,iphone,ibeacon,Ios,Iphone,Ibeacon,我正在努力成为一名iBeacon,我从Youtube上学到了一些东西。这是通过接近来找到最近的信标,但不是很准确。所以我想通过rssi找到最近的一个。我应该如何修改代码?rssi的值总是负值,这是否意味着rssi越大,最接近 func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) { //print(bea

我正在努力成为一名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代表更强的信号(通常是更近的信标)

您当然可以使用RSSI计算最近的信标,而不是使用
CLBeacon
accurity属性,但您不会得到更一致的结果。这是因为在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?=无
信标中的信标{
如果closesBeacon==nil | |(beacon.rssi<0&&beacon.rssi>closestBeacon!.rssi){
closestBeacon=信标为CLBeacon
}
}
但您将通过以下方式获得更稳定的结果:

var closestBeacon: CLBeacon? = nil
for beacon in beacons {
  if closesBeacon == nil || (beacon.accuracy > 0 && beacon.accuracy < closestBeacon!.accuracy) {
    closestBeacon = beacon as? CLBeacon
  }
}
var closestBeacon:CLBeacon?=无
信标中的信标{
如果closesBeacon==nil | |(beacon.accurity>0&&beacon.accurity
谢谢,这很有帮助。我想问一下,如果我想要一个包含所有信标的数组,按精度升序排列,我需要自己在Swift1.2中编写排序吗?我知道Swift2.0中有Array.sort,但这在IOS 8中似乎不起作用。实际上,您甚至不需要进行排序,因为IOS会自动按精度升序返回测距回调中的信标。我现在有了一个数组,所以我想使用beacon.minor对数组进行配对,并在tableview上显示数组中的内容,但它不起作用。Xcode表示找不到接受所提供参数的“subscript”的重载。cell.textlab?.text=self.Array[self.beaconArray[indexPath.row].minor]由于这是另一个问题,请打开一个新问题,而不是在评论中提问。您可以从评论链接到新问题。