您的位置:首页 > 移动开发 > IOS开发

iOS技术浅谈之第二篇 (iBeacon技术概述)

2015-03-06 08:49 302 查看
首先iBeacon是什么呢?iBeacon 是基于当前最新的蓝牙低功耗4.0技术的,可以用它来打造一个信号基站,当用户持有 iOS 设备进入该区域时,就会得到获得该基站的推送信息。然后有人会问它有什么用了,比如,在店铺里设置iBeacon通信模块的话,便可让iPhone和iPad上运行一资讯告知服务器,或者由服务器向顾客发送折扣券及进店积分。此外,还可以在家电发生故障或停止工作时使用iBeacon向应用软件发送资讯。其实,我个人认为最具有商业价值的还是属于室内定位。当然与推广商用,也是百万商户的最佳选择!
今天要讲的重点就是iBeacon的室内导航,说到这个,其实我很是头疼,因为我已经研究它一个多月了。目前可以做到在室内定位精度误差在2米范围内,但这仅仅只是开始,要想做到导航,还差那么一点点。毕竟iBeacon的信号受影响的因数太多。下面就谈谈我利用iBeacon做室内导航的大概思路,第一步:绘出一张室内地图,建立坐标系。
第二步:部署iBeacon(当然部署它也有一定的技巧)第三步:在地图上描出iBeacon的位置,通过坐标系换算,提醒这里有一个比例尺(就是地图和实际距离的比例)第四步:就是利用三点定位(这里需要算法)如下:

- (CGPoint)getCoordinateWithBeaconA:(CGPoint)a beaconB:(CGPoint)b beaconC:(CGPoint)c distanceA:(CGFloat)dA distanceB:(CGFloat)dB distanceC:(CGFloat)dC {
CGFloat W, Z, x, y, y2;
W = dA*dA - dB*dB - a.x*a.x - a.y*a.y + b.x*b.x + b.y*b.y;
Z = dB*dB - dC*dC - b.x*b.x - b.y*b.y + c.x*c.x + c.y*c.y;

x = (W*(c.y-b.y) - Z*(b.y-a.y)) / (2 * ((b.x-a.x)*(c.y-b.y) - (c.x-b.x)*(b.y-a.y)));
y = (W - 2*x*(b.x-a.x)) / (2*(b.y-a.y));
//y2 is a second measure of y to mitigate errors
y2 = (Z - 2*x*(c.x-b.x)) / (2*(c.y-b.y));

y = (y + y2) / 2;
return CGPointMake(x, y);
}

算法还有待优化,希望有大神指点一二。下面附上一张室内定位模拟图:



下面介绍国外一家做得比较的公司:Estimote算是国外最早开始研究和推广iBeacon技术的厂商,并且成功的获得了一大笔的风险投资,目前来说在业界做的也算是比较成熟好用的。提供了从iBeacon产品,软件SDK,移动端APP一整套完整的解决方案。



当然目前我现在的公司也在想打造这样一套完整的解决方案,正处于起步阶段,希望接下来的时间里,对iBeacon技术感兴趣的可以多多交流。待续...

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: