前言:
  非常幸运, 接触过一个与定位服务有些关联的项目. 虽不清楚定位服务内部的实现机制, 但对定位的几种方式也有较清晰的了解.
  定位不在局限于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. [Golang] 一个简易代理池

    晚上写了一个代理池,就是在一个代理网站上爬取代理ip和端口以及测试是否可用.接下来可能考虑扩展成一个比较大的 golang实现的代理池. 简易版代码: package main import ( &q ...

  2. 后勤模块数据源的增量队列(Delta-Queue)三种更新模式(Update Mode)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. poj 3321 Apple Tree dfs序+线段树

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K       Description There is an apple tree outsid ...

  4. python打怪之路【第三篇】:利用Python实现三级菜单

    程序: 利用Python实现三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 coding: menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{}, ' ...

  5. 20169212《Linux内核原理与分析》第一周作业

    实验 使用touch创建文件: man手册的内容很多,涉及了Linux使用过程中的方方面面,为了便于查找,是做了分册(分区段)处理的,在Research UNIX.BSD.OS X和Linux中,手册 ...

  6. linux 环境变量PATH路径的三种方法

    转:http://www.jb51.net/LINUXjishu/150167.html 总结:修改1.#PATH=$PATH:/etc/apache/bin  或者#vi /etc/profile ...

  7. 自己封装的一个java图片验证码

    验证码生成器: package com.lz.Tools; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...

  8. C#微信公众号开发-高级接口-之网页授权oauth2.0获取用户基本信息(二)

    C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一) 中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法 ...

  9. Java设计模式系列2--工厂方法模式(Factory Method)

    2014-02-26 09:56:45 声明:本文不仅是本人自己的成果,有些东西取自网上各位大神的思想,虽不能一一列出,但在此一并感谢! 工厂方法模式分为三种: 1. 普通工厂模式 建立一个工厂类,对 ...

  10. 黑马程序员——OC语言 类和对象

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...