金桔iBeacon应用场景特点解析

iBeacon技术常用于信息推荐和定位服务,如博物馆导览和商场营销。然而,实际应用中面临授权问题、延时、信标数量限制以及定位精度等挑战。遮挡和设备状态会影响定位准确性,而iOS限制了同一时间扫描的信标数量。为优化应用,需充分理解并克服这些技术局限。
摘要由CSDN通过智能技术生成

金桔iBeacon应用场景特点解析

iBeacon在手机端实际应用中有两种应用的方案,一种是基于兴趣点(POI)的信息推荐,核心的应用场景为,在博物馆内的导览、商场的营销等应用,此类方式下,是手机进入某个区域后,自动弹出提醒;另一种场景为定位,即RTLS,导航与位置跟踪,与室外导航相同,需要实时了解目前的位置并提供指引。

两种不同的业务应用,在程序的处理和后台机制上是不同的,基于兴趣点的信息推荐,是手机无需运行相关程序,只要进入相关区域即可实现信息的提醒,而定位场景下,需要手机进行实时的定位。

基于兴趣点的应用场景及不足

在此场景下,通过应用程序可以实时监测进入或离开某个区域(beacon信号覆盖范围),比如在博物馆某个展品附近部署一个ibeacon,您只要走到这个展品附近,手机就自动提醒或播放这个展品的信息,这样可以实现对博物馆的实时导览,当然也可以根据此业务场景来推荐一些优惠或其他信息。

这个业务场景听起来很美好,但实际应用中有那些不足需要注意呢?

授权
若能够自动提醒,就像在室外调用GPS服务一样,在APP中需要授权使用这个服务,并且让此服务处于激活的状态。

延时
设备考虑到功耗的问题,在自动触发的应用中,扫描的频次没有那么高,所以在事件触发中,不会实时触发,在特殊的场景中,时延甚至会达到分钟级别,对部分beacon密集的应用场景很多的触发点难以工作。即使在退出的触发中,也有30s的时延;

数量
理论上在一个区域内的ibeacon的数量是4,294,836,225个,但ios协议在单一时间扫描的数量限制在20个以内,所以若周边的beacon特别多的情况下, 若要扫描到所有的beacon需要多次扫描才可能。

所以在设计兴趣点的业务应用时,需要充分考虑设备自身的特点,从而达到最为理想化的业务应用。

定位

目前基于蓝牙位标的室内定位与导航已经成为最为简单方便的定位方案。但在定位中,需要通过手机的程序,在不断监测周边的信标的RSSI的变化,并通过特定的算法来计算距离。但在测距时同样也存在着不足。

遮挡
Ibeacon运行在2.4GHz频段,这决定了它的穿透性不足,一旦设备有遮挡,就会造成RSSI的不准确从而使位置偏移;

运行
实现测距服务,应用程序必须在运行状态,一旦退出,就需要重新进行计算。

精度
在这里插入图片描述
在ibeacon的官方资料中,并没有基于ibeacon进行测距的程序,仅仅有3个模糊的表述,立即(0-0.6m)、接近(1-8m)远处(10m以上,若没有遮挡,可达40多m),而且从上图显示,不同的设备,对信号强度的采集也是不同的。所以,基于ibeacon的定位,精度并不能达到特别精确,当然若采用较多的信标(6m)一个,采用三角定位的方式,可以获得2m左右的精度。

每种技术都有其局限性,只有我们很好的掌握了技术的特性才能更好的利用此技术为我们服务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
雪花算法是一种生成分布式唯一ID的算法,可以保证生成的ID在分布式系统中的唯一性。而Bitmap算法则是一种数据压缩算法,如何将这两个算法结合起来呢? 实际上,在雪花算法中,每个ID都是由时间戳、机器ID和序列号组成的。因此,我们可以将机器ID和序列号使用Bitmap算法进行压缩,从而减小ID的存储空间。 具体来说,我们可以使用两个Bitmap,一个用于存储机器ID,一个用于存储序列号。假设机器ID和序列号分别需要存储10位和12位,那么我们可以定义两个长度为(2^10)/8=128和(2^12)/8=256的byte数组,分别用于存储机器ID和序列号。 在生成ID时,先根据雪花算法生成一个64位的ID,然后将其中的机器ID和序列号分别使用Bitmap算法进行压缩,最终将压缩后的结果拼接成一个新的ID,并返回。 下面是一个简单的Java实现示例: ```java public class SnowflakeIdGenerator { private long lastTimestamp = -1L; private long sequence = 0L; private long workerId; private Bitmap workerIdBitmap; private Bitmap sequenceBitmap; public SnowflakeIdGenerator(long workerId) { this.workerId = workerId; this.workerIdBitmap = new Bitmap(1 << 10); this.sequenceBitmap = new Bitmap(1 << 12); } public synchronized long nextId() { long timestamp = System.currentTimeMillis(); if (timestamp < lastTimestamp) { throw new RuntimeException("Clock moved backwards"); } if (timestamp == lastTimestamp) { sequence = (sequence + 1) & 0xFFF; if (!sequenceBitmap.get((int) sequence)) { sequenceBitmap.set((int) sequence); } else { return nextId(); } } else { sequence = 0L; sequenceBitmap = new Bitmap(1 << 12); } lastTimestamp = timestamp; if (!workerIdBitmap.get((int) workerId)) { workerIdBitmap.set((int) workerId); } long id = ((timestamp << 22) | (workerId << 12) | sequence); return id; } } ``` 在上面的示例中,我们定义了一个SnowflakeIdGenerator类,其中包含一个机器ID和两个Bitmap。在nextId方法中,先使用雪花算法生成一个原始的64位ID,然后将其中的机器ID和序列号压缩到对应的Bitmap中,最终拼接成一个新的ID,并返回。 需要注意的是,在压缩机器ID和序列号时,我们使用了两个长度分别为1 << 10和1 << 12的Bitmap。这是因为机器ID和序列号的位数分别为10位和12位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值