如何根据LAC(TAC)/CELLID(ECI)区分2G/3G/4G基站

很多人询问如何根据一个基站的lac和cellid区分这个基站是2G,3G还是4G基站,这里做一下总结。

国内运营商在建网初期就对LAC代码按省进行了分配,每个省/自治区/直辖市都分配到了一定数量的LAC代码区间。当时的2G网络规定了LAC使用的是BCD编码,所以2G的LAC范围是十六进制的 [0x1000-0x1999], [0x2000-0x2999], [0x3000-0x3999]…, [0x9000-0x9999],这一范围对移动联通都适用。

到了3G时代,没有了LAC必须是BCD编码的限制,同时为避免冲突,WCDMA和TD-SCDMA分配了[0xa000-0xffff]的区间分配3G网络的LAC。

4G网络中,LAC被TAC(Tracking Area Code)取代,TAC的分配方式和2G网络下的LAC分配保持一致。那么如何根据这个值区分2G和4G基站呢?这就需要借助CELLID(ECI)字段了,在2G网络中CELLID定义为16位二进制值,范围是[0-65535],4G网络的ECI是28位的二进制值,由20位的enodeb id和8位的cellid组成,而enodeb id是大于256的,因此可以通过判断CELLID(ECI)字段的值来区分2G基站和4G基站。

总结:
LAC(TAC)>=40960 -> 3G基站
LAC(TAC)<40960 并且 CELLID(ECI) > 65535 -> 4G基站
LAC(TAC)<40960 并且 CELLID(ECI) <= 65535 -> 2G基站
这一规则适用于移动联通基站。

免费基站定位数据库下载

推荐一个免费的基站定位数据库:OpenCellID。

OpenCellID是一个开源项目,目标就是收集并公开全球的基站位置数据。和大多数同类项目一样,OpenCellID也是通过众包(crowdsource)来采集数据的,它依靠的是自家另一个开源地图项目OpenStreetMap,使用这个App的用户会上传基站ID、经纬度、信号强度等信息到OpenCellID的服务器。每一个用户上传的数据会被服务器记录为一个测量点(measurement),当服务器收集了足够的针对同一个基站的测量点后,就可以根据这些经纬度和信号强度信息计算出一个综合位置。由于国内很少有人使用OpenStreetMap,所以该项目收录的国内基站并不是很多。

OpenCellID提供免费数据库下载,不过需要先在网站上注册apikey。

除了OpenCellID之外,Mozilla Location Service也同样提供了类似的服务,它们的数据库里集成OpenCellID的基站数据。这些数据每日更新,下载地址在这里。

https://location.services.mozilla.com/downloads

截止2015年10月21日,Mozilla Location Service共收录了全球16254816条基站数据,其中中国大陆部分收录了321371条。这样的数据规模在国内显然无法覆盖足够多的基站来提供有效的查询服务,不过对于一些只需要部分基站数据采样的应用场景(如App位置伪装),这个数据规模也已经足够了。

全国基站数量与基站定位数据库数据量

全国三大运营商的基站数量有公开可查的数据。根据工信部2015年3月发布的数据:

(2015年)1-3月,基础电信企业加大以4G为主的移动通信网络建设,新增移动通信基站14.2万个,总数达353.9万个,其中3G/4G基站总数达227.3万个,占比提升至64.2%,3G/4G网络服务质量和覆盖继续提升。

那是否意味着基站定位数据库中的条目数量不应该超过353.9万呢?不是这样的,原因在于基站数据库中的条目是按MCC/MNC/LAC/CELLID编号的,而在统计数据中,基站数量是按站址(site)计算的。实际上,同一站址的一个基站通常会对应多个CELLID编码,因此在基站定位数据库中也就会对应多个条目。产生这种一对多的对应关系主要有以下几种原因:

同一基站可以同时工作在2G/3G/4G模式,对应不同的LAC/CELLID编码
同一基站的不同扇区对应不同的CELLID
同一基站的不同载波对应不同的CELLID
实际上,一个基站对应1至10个甚至10个以上的LAC/CELLID编码都是有可能的。所以一个覆盖率较高的基站数据库,其中的条目总量至少应该达到千万级别。

基站定位

本站提供移动联通基站定位查询接口和离线数据库。

数据来源权威可靠,每月更新。

目前数据更新至2014年6月,共计7551501条,其中

移动2G/3G基站数据:3554237条
联通2G基站数据:1997418条
联通3G基站数据:1999846条