通过cellId,LAC,MCC和MNC Android从当前移动台获取相邻小区塔的距离和方向?

时间:2016-12-10 09:06:05

标签: java android gsm wireless rssi

我想制作一个能够找到接收信号强度和相邻蜂窝塔的应用程序。我成功地获得了每个相邻细胞塔的细胞,mnc,mcc,lac和信号强度。但我想通过使用cellid,lac,mnc,mcc计算每个蜂窝塔的距离和当前移动的方向。我不想使用互联网连接来做到这一点。 有可能计算? 请尽可能建议。

1 个答案:

答案 0 :(得分:0)

没有互联网连接,这将是困难的(不可能?)。但是,如果您能够使用互联网连接,则可以使用Mozilla Location Service查找相邻小区ID(您提到的已经获得)并获得纬度/经度。

关于获取移动设备的当前位置,有很多关于SO的答案。这是一个很好的例子:Get current latitude and longitude android

现在,一旦你有移动lat / long和相邻单元lat / long,使用余弦定律来找到相邻单元和移动设备之间的距离:

d = acos( sin φ1 ⋅ sin φ2 + cos φ1 ⋅ cos φ2 ⋅ cos Δλ ) ⋅ R

可以像这样实现,例如:

var φ1 = lat1.toRadians(), φ2 = lat2.toRadians(), Δλ = (lon2-lon1).toRadians(), R = 6371e3; // gives d in metres
var d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;

关于标题,请使用以下公式:

θ = atan2( sin Δλ ⋅ cos φ2 , cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ )
where   φ1,λ1 is the start point, φ2,λ2 the end point (Δλ is the difference in longitude)

可以像这样实现,例如:

var y = Math.sin(λ2-λ1) * Math.cos(φ2);
var x = Math.cos(φ1)*Math.sin(φ2) -
        Math.sin(φ1)*Math.cos(φ2)*Math.cos(λ2-λ1);
var brng = Math.atan2(y, x).toDegrees();

(距离/标题公式由website提供)

从相邻小区中寻找信号强度是另一回事。取决于技术(LTE / WCDMA / GSM),这可能是也可能是不可能的。 Here是如何执行此操作的一个示例,但它可能不适用于所有技术类型。