我想检测没有互联网连接的Android移动设备的位置。 唯一的选择是,使用附近Cell Towers的信息,我想知道TelephonyManager类是否可用于此(假设单元格的lat和long位置在数据库中可用)?
我知道TelephonyManager.getNeighbouringCellInfo()提供了一个NeighbouringCellInfo列表。
我的问题是,这种方法返回了多少个NeighbouringCellInfo?这个信息可以用来进行三角测量吗?
如果没有,我可以使用SIM工具包获取所需信息并进行三角测量吗?
请随意提供任何相关信息,因为这对我的会议记录非常有用。
答案 0 :(得分:1)
首先,你当然不能做三角测量。三角测量依赖于角度。我认为你的意思是 trilateration 。相反,三边测量依赖于距离。
要根据距离进行三边测量,您需要一个具有具体坐标的数据库,以及与这些坐标中的三个或更多个坐标的距离(在本例中为单元格塔)。但是,如果您查看NeighboringCellInfo
的文档,您会看到不获取距离读数。你得到一个RSSI。 RSSI和距离之间的连接不是线性的,并且不是很好理解或非常准确。它可以根据天线方向,天气条件等而有很大差异......所以认为你只需要选择三个单元并使用它们的相对RSSI来对用户进行三边测量将最终证明是非常容易出错的(即,相当多)大部分时间都是彻头彻尾的错误。除此之外,我不相信getNeighboringCellInfo
始终可以保证返回三个或更多塔(您可以查看低级代码here的实现)。因此,我的判断是,你能做的最好的事情就是找出哪个塔具有最高的强度,并说你有点“接近”它,我真的怀疑你能做得更好。
相反,一个更好的选择,我相信你已经想到的,是使用GPS,但我猜你有理由不想这样做。
我不确定您是否也知道,但TelephonyManager
还有一个实施功能,可以为您提供位置更新:here.
(顺便说一下,我做了一次类似的三角测量项目,根据我的经验,没有高度精确的接收器和测量,它只是不起作用。我也有原始RSSI数据,甚至在中短距离数据中的错误是非常不可接受的。)