前言:
  非常幸运, 接触过一个与定位服务有些关联的项目. 虽不清楚定位服务内部的实现机制, 但对定位的几种方式也有较清晰的了解.
  定位不在局限于GPS, 基站这种需要硬件支持的, 基于wifi的方式更流行, 而且定位精度很高.
  但问题来了, wifi并非公共基础设施, 为何定位服务能基于wifi提供定位服务呢? 本文来简单的谈一谈其背后的故事和技术.

原理:
  定位的本质很简单: 寻找固定的参考物. 这是我个人所理解和认识的.
  当设备没GPS组件/关闭GPS功能, 往往会采用电信移动运营商的基站来定位, 如下图所示:
  
  基站的覆盖范围, 标识了用户潜在可能的位置. 基站越多, 其相交面积大大缩小了潜在位置可能性. 然而一方面单个基站的覆盖范围较大, 另一方面信号强度很难去标识有效的距离. 因此某种程度上, 定位精度与基站覆盖范围正相关. 当然基站密度和距离算法也决定定位精度, 在城市里, 精度还是很高的.
  从基站定位中, 我们可以发现一个规律: 参照物越密集, 且参照物的覆盖范围越小, 那么定位越准确.
  是否存在类似的参考物呢? 其实它就在我们身边, 那就是无线AP(wifi).
  它具有何种特点呢? 我们一一来枚举下:
  1). 无线AP位置相对固定
  2). 无线AP其有一个全球唯一的MAC地址
  3). 其信号覆盖范围半径小, 远远小于基站
  4). 无线AP的普及率高
  如果定位服务器拥有这些wifi和其位置信息, 那么上述的特点决定基于WIFI的定位更精确.
  这些wifi和位置信息是如何被定位服务商采集和利用的呢?
  一般有两种方式:
  1). 主动采集
  定位服务商, 利用街景车主动去采集街道上wifi列表和其定位的位置信息.
  2). 用户提交
  借助各类终端, 先由GPS进行精确定位, 然后收集到的附近Wifi列表, "偷偷"提交GPS的位置信息和WIFI列表. 并让之相关联. 用户越多, 数据越多, 最后简单通过提交的wifi即可确定其位置信息了.

架构:
  对于基于wifi的定位服务器, 让我们来猜测下其背后的架构.
  整理的架构大致可以分为两部分: 在线查询服务和离线数据处理服务.
  1). 在线查询服务
  其提供实时, 高可靠/高性能的定位查询服务.
  该服务可由以下几个子服务构成:
  • wifi存储服务
  其保存了wifi的 MAC/SSID 到 经纬度的映射关系, 由于MAC地址的全球唯一性. 这边可以借助key/value服务来实现, 比如HBase也是一个很适合的选择.
  • 基础地图服务
  提供了基于经纬度, 检索区县/街道, 附近商家的服务. 往往采用R-tree, M-tree等等高端的地理空间索引存储结构.
  • 位置计算服务
  依据多个参考点及相对距离, 计算一个精确经纬度位置的服务.
  其基础架构图可如下所示:
  
  注: 位置计算服务可以和服务的逻辑接入层合并.
  2). 离线数据处理服务
  该服务收集用户提交上的数据, 进行清洗(去除噪音)后, 导入wifi存储服务中.
  我不太清楚定位服务提供商, 采用的是增量更新的方式, 还是全量替换的方式. 两者都是可接受的.

总结:
  wifi定位也是种创新的定位方式, 可以说:"取之于民, 用之于民". 其背后的架构和实现, 相比之下也很简单. 最重要的估计还是基础地图服务了. 但无论如何, 其也算是一个大数据处理的案例. 大数据时代即将来临.

写在最后:
  
如果你觉得这篇文章对你有帮助, 请小小打赏下. 其实我想试试, 看看写博客能否给自己带来一点小小的收益. 无论多少, 都是对楼主一种由衷的肯定.

  

移动互联网实战--wifi定位和架构的更多相关文章

  1. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  2. 在Android里完美实现基站和WIFI定位

    来自:http://www.cnblogs.com/coffeegg/archive/2011/10/01/2197129.html 众所周知的,在OPhone和大部分国产的Android定制机里不支 ...

  3. 百度定位SDK:弥补Android基站WIFI定位缺失

    http://tech.qq.com/a/20120524/000347.htm 如今,基于位置信息的移动应用越来越多,从餐饮.购物等本地生活服务,到定向广告的匹配.移动社交网络的构建,LBS类应用的 ...

  4. wifi定位原理

    wifi定位和手机基站定位类别似,两者都需要收集wifi位置信息接入点. 其实WIFI奇妙,它靠的是侦測附近周围全部的无线网路基地台 (WiFi Access Point) 的 MAC Address ...

  5. Gps定位和wifi定位和基站定位的比较

    现在手机定位的方式是:Gps定位,wifi定位,基站定位 Gps定位的前提,手机开启Gps定位模块,在室外,定位的精度一般是几米的范围 wifi定位的前提,手机要开启wifi,连不连上wifi热点都可 ...

  6. Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结

    Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结 Coolshell 称号.理论与c++ 阮一峰:: 理论高手与js高手 王银:理论高手 赵劼,网名老赵,c#高手 与理 ...

  7. Node.js 实战 & 最佳 Express 项目架构

    Node.js 实战 & 最佳 Express 项目架构 Express Koa refs https://github.com/xgqfrms/learn-node.js-by-practi ...

  8. 移动互联网实战--Web Restful API设计和基础架构

    前言: 在移动互联网的大潮中, Web Restful API逐渐成为Web Server重要的一个分支. 移动端和服务端的交互, 主流的方式还是通过Http协议的形式来进行. 请求以Get/Post ...

  9. 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构

    本篇承接上篇内容,如果你不小心点击进来,建议重新从第一篇开始完整阅读. 构建NetCore应用框架之实战篇索引 一.BitAdminCore框架简介 从前篇论述我们知道,我们接下来将要去做一个管理系统 ...

随机推荐

  1. java 导出Excel 大数据量,自己经验总结!(二)

    在上一次的基础上加上了样式,以及中文列名 package com.tommy.fundation.util; import java.io.OutputStream; import java.util ...

  2. 用TCGA收集的mRNA表达数据作差异表达

    做差异表达的软件DEseq和edgeR所需要的数据格式必须是原始counts,经过normalization和log2后的数据都不适合,所以对于做差异表达计算的童鞋可以使用ExperimentHub下 ...

  3. 如何很好的使用Linq的Distinct方法

    Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name=&quo ...

  4. 《BI项目笔记》基于雪花模型的维度设计

    GBGradeCode 外键关系: 1 烟叶等级 T_GBGradeCode.I_DistinctionID=T_Distinction.I_DistinctionID 烟叶等级分为:上等烟.中等烟. ...

  5. ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)

    最近在做一个电商项目,其中商品搜索中出现一个奇怪的现象,根据某个字段排序的时候会出现商品数量减少的情况.按照一般路要么查不出来,要么正常显示,为什么增加了按照销量排序就会出现查询结果减少的情况. 查了 ...

  6. myeclipse maven pom.xml 配置错误

    http://www.oschina.net/question/2265006_219341#tags_nav maven pom.xml 配置文件错误       腾讯云消息队列CMQ架构解析> ...

  7. 读javascript高级程序设计03-函数表达式、闭包、私有变量

    一.函数声明和函数表达式 定义函数有两种方式:函数声明和函数表达式.它们之间一个重要的区别是函数提升. 1.函数声明会进行函数提升,所以函数调用在函数声明之前也不会报错: test(); functi ...

  8. iis 301重定向

    把www.a.com重定向到www.b.com 只需在www.a.com上面右键属性---主目录,重定向到url,下面填上www.b.com,再把资源永久重定向勾选上即可. 注意,如果你需要把域名后面 ...

  9. Oracle 差异增量和累计增量备份

    网址: http://www.eygle.com/digest/2009/04/oracle_rman_incremental_backup.html 在rman增量备份中,有差异增量和累积增量的概念 ...

  10. iptables基本规则

    注意:iptables只能被拥有超级权限的用户设置.   重启 清空 iptables 规则:在终端输入:   iptables -F iptables -X iptables -t nat -F i ...