当前位置: 首页 > news >正文

MTK基于基站和小区的定位技术研究

我们的移动网络是通过一个个基站连接起来的,而一个基站又被划分成若干小区以方便查找。因为基站的位置相对比较固定,所以我们可以通过基站的编号cell_id和小区的编号LAC来定位地理位置。

具体的理论原理大概是这样的。根据GSM协议通信管理过程,我们大致可以知道呼叫建立的过程首先是用户定位,查找被呼叫人的位置信息。在GSM协议中,我们知道,用户的位置信息由MSC/VLR管理,MSC/VLR被划分成若干个较小的区域。假设定义被叫人的区域为LA,则每一个LA由一个位置区标识(LAI)识别,它们结构如下:
LAI=MCC+MNC+LAC

·MCC=移动国家代码(被访问国家)

·MNC=移动网代码(服务的PLMN)

·LAC=位置区代码
比如中国的MCC:460(注意不是+86,+86是中国区号),移动的MNC:00,联通的MNC:01。LA的数据可以从VLR,下面让我们看看VLR中的数据。

VLR

IMSI:460001234567890

LAC: 262 15 0987

Data: abc..

MCRN: 358 50 456456

IMSI是全世界唯一的,可以唯一标志一张SIM卡,通俗一些说,就是SIM的身份证,所以IMSI号可以用来设计防盗追踪或者检查SIM是否被更换。其结构如下:

IMSI=MCC+MNC+MSIN

·MCC=移动网国家代码(三位)

·MNC=移动网代码(两位)

·MSIN=移动用户识别码(十位)

不过与本文无关,做不做过多介绍。

既然通信网络可以通过LAI查找到被叫者,我们应该也可以使用LAI来确定被叫者的位置,既然LAI可以确定被叫者位置,当然也可以确定我们自己的位置,只不过这个位置信息不是特别的精确,与当地基站分布的密度有关。当然在这个结构中,国家代码和网络代码只能确定国家和使用的网络,我们能够使用的应该是LAC,LAC大概由基站信息和小区编号组成。

其具体算法就是首先获取本机所处位置的LAI数据,然后建立一张查找表,表中用基站编号和小区编号对应一个地理位置。通过查表就可以知道自己的地理位置。

读MTK代码时发现一个形如下的结构:

typedef struct {
kal_uint8 mcc1; /* MCC DIGIT1*/
kal_uint8 mcc2; /* MCC DIGIT2*/
kal_uint8 mcc3; /* MCC DIGIT3*/
kal_uint8 mnc1; /* MNC DIGIT1*/
kal_uint8 mnc2; /* MNC DIGIT2*/
kal_uint8 mnc3; /* MNC DIGIT3 Always 1111*/
kal_uint8 la_code[2];
kal_uint8 ra_code; /* RA CODE*/
kal_uint16 cell_id; /* CELL ID*/
} cell_info_struct;

该结构描述了基站的信息,恰好与GSM协议相对应,该结构可以通过发消息获。网上也能找来基站与地理位置的数据信息,看来实现起来应该无啥难度。该功能在没有GPS的情况下实现粗略定位,相较GPS可以几乎无成本的使用,对于喜欢猎奇又不愿意花钱的朋友,无异是一个不错的选择。但由于网上流行的基站数据并不完整,对于基站和地理位置的对应,如果能建立一个共享的WAP网站,发动大众的力量实现动态更新升级,那可就是利国利民,造福世人的好事。不过刚刚在网上看贴子听说,基站与地理位置对应的信息属于国家机密,不知是真是假,要是那样的话,我们也就只能自己做了玩玩,却是不能推广的。把自己推广到监狱里了,那可就得不偿失了,玩的朋友们注意了。

相关文章:

  • 第一次交叉编译基于群晖 213j(CPU:Armada 370)的iperf过程
  • MTK界面设计中消除PNG图片的杂色背景
  • 知道这20个正则表达式,能让你少写1,000行代码
  • MTK一些有用的层函数
  • 基于SWOOLE的分布式SOCKET消息服务器架构
  • MTK的铃声修改与替换
  • 基于SWOOLE的高可用分布式SOKET服务器系统搭建V2.0
  • 美化MTK的拨号窗口
  • javascript 18位身份证校验程序
  • MTK的DM应用实例
  • 优酷KUX格式转码
  • 推荐一款全面的系统性能监控工具 -- glances
  • 再转载一篇---引用 MTK的高亮机制
  • 解决加密的HLS(m3u8)视频转换问题
  • 再谈MTK的History机制
  • Apache的80端口被占用以及访问时报错403
  • co模块的前端实现
  • js ES6 求数组的交集,并集,还有差集
  • Laravel Mix运行时关于es2015报错解决方案
  • Python十分钟制作属于你自己的个性logo
  • swift基础之_对象 实例方法 对象方法。
  • text-decoration与color属性
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue-loader 源码解析系列之 selector
  • windows-nginx-https-本地配置
  • 记一次用 NodeJs 实现模拟登录的思路
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 微信公众号开发小记——5.python微信红包
  • 正则表达式
  • ​​​​​​​​​​​​​​Γ函数
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (1)(1.13) SiK无线电高级配置(六)
  • (27)4.8 习题课
  • (C语言)逆序输出字符串
  • (分布式缓存)Redis哨兵
  • (力扣)1314.矩阵区域和
  • (转)Unity3DUnity3D在android下调试
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .net 简单实现MD5
  • .net6Api后台+uniapp导出Excel
  • .NET文档生成工具ADB使用图文教程
  • .Net小白的大学四年,内含面经
  • .net专家(高海东的专栏)
  • @EnableWebSecurity 注解的用途及适用场景
  • []指针
  • [ASP]青辰网络考试管理系统NES X3.5
  • [C puzzle book] types
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [DM复习]关联规则挖掘(下)
  • [HackMyVM]靶场Crossbow
  • [iHooya]2023年1月30日作业解析
  • [LeetCode]Reverse Linked List II