如何正确地对GSM蜂窝塔进行三角测量以获得位置?

kmp*_*kmp 29 gsm geolocation at-command

首先,我试图在c#(.net 4)中做所有这些灾难,所以如果你拿出一些代码来帮助我,那将是值得赞赏的,但实际上任何事情都会有所帮助.

我有一种情况,我有一个设备只能获得GSM Cell信息(顺便通过AT+KCELL命令)所以我有一组关于蜂窝塔的值(每个都有LAC,MCC,MNC,Cell ID,信号强度和第一个时间预先).因此,我认为,我处在一个能够提出某种经度和纬度坐标的好地方(尽管不准确,但是,好吧).这是我寻求帮助的地方,因为现在我的小脑子很困惑......

我可以看到提供单元代码解析的各种服务(Google,Open Cell ID等),他们将LAC,MCC等作为参数并返回一个坐标.因此,我认为他们返回的将是我传入的特定塔的坐标.所以在我的情况下,我可以发送我拥有的所有LAC等,并获得经度和纬度的集合.很棒,但这不是我的设备所在.现在我觉得我需要做一些三角测量,而这正是我缺乏知识伤害了我的地方.

那么到目前为止我是对的吗?假设我是,我该怎么做这个计算(有什么东西可以告诉我如何处理所有这些数字,或者更好的是,一些开源库我可以参考并提供所有这些东西以获得明智的东西) ?

我假设我需要使用定时提前计算出距离手机信号塔一些近似距离(可能以某种方式使用信号强度),但我该怎么做?正如你所知道的那样 - 我在这里超出了我的深度!

例如,我可以从前面提到的AT命令中找到这个:

5,74,33,32f210,157e,8101,50,0,79,3,32f210,157e,80f7,37,64,5,32f210,157e,810b,37,55,32,32f210,157e,9d3,27,41,33,32f210,157e,edf8,15
Run Code Online (Sandbox Code Playgroud)

打破它并解析它我会得到(我希望我解析正确 - 当然我的解析例程中有一个错误,但它看起来很合理):

Number of cells: 5
Run Code Online (Sandbox Code Playgroud)

细胞1

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33025
Signal: 80
ARFCN: 74
BSIC: 33
Timing advance: 0
Longitude: 14.2565389
Latitude: 48.2248439
Run Code Online (Sandbox Code Playgroud)

细胞2

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33015
Signal: 55
ARFCN: 79
BSIC: 3
Longitude: 14.2637736
Latitude: 48.2331576
Run Code Online (Sandbox Code Playgroud)

细胞3

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33035
Signal: 55
ARFCN: 64
BSIC: 5
Longitude: 14.2488966
Latitude: 48.232513
Run Code Online (Sandbox Code Playgroud)

细胞4

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 2515
Signal: 39
ARFCN: 55
BSIC: 32
Longitude: 14.2488163
Latitude: 48.2277972
Run Code Online (Sandbox Code Playgroud)

细胞5

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 60920
Signal: 21
ARFCN: 41
BSIC: 33
Longitude: 14.2647612
Latitude: 48.2299558
Run Code Online (Sandbox Code Playgroud)

所以,所有这些信息如何以最准确的方式找到我实际上的位置?

Jar*_*lls 37

我可以用一点理论来帮助你.

三角测量基本上是找到3个圆的交点.

每个移动塔都是圆的中心.圆的大小与该塔的信号强度有关.

3个圆圈重叠的位置是用户所在的位置.

你可以做一些非常基本的三角测量,如下所示:

3 Towers at 
 tx1,ty1 
 tx2,ty2 
 tx3,ty3

With signal strengths s1, s2, s3

We calculate the weight of each signal. Essentially a number from 0 to 1 for each tower where the sum of the weights adds up to 1.

Weighted signal w1, w2, w3 where:
 w1 = s1/(s1+s2+s3)
 w2 = s2/(s1+s2+s3)
 w3 = s3/(s1+s2+s3)


User will be at
x: (w1 * tx1 + w2 * tx2+ w3 * tx3)
y: (w1 * ty1 + w2 * ty2+ w3 * ty3)

以下是使用您问题中的值的工作示例:


s1 = 80
s2 = 55
s3 = 55
s4 = 55
s5 = 21

w1 = 80 / ( 80 + 55 + 55 + 55 + 21 ) 
w2 = 55 / ( 80 + 55 + 55 + 55 + 21 ) 
w3 = 55 / ( 80 + 55 + 55 + 55 + 21 ) 
w4 = 55 / ( 80 + 55 + 55 + 55 + 21 ) 
w5 = 21 / ( 80 + 55 + 55 + 55 + 21 ) 

w1 = 0.3007519
w2 = 0.2067669
w3 = 0.2067669
w4 = 0.2067669
w5 = 0.0789474

1. Longitude: 14.2565389
1. Latitude: 48.2248439

2. Longitude: 14.2637736
2. Latitude: 48.2331576

3. Longitude: 14.2488966
3. Latitude: 48.232513

4. Longitude: 14.2488163
4. Latitude: 48.2277972


5. Longitude: 14.2647612
5. Latitude: 48.2299558


Location Longitude = 
 14.2565389 * 0.3007519 + 
 14.2637736 * 0.2067669 + 
 14.2488966 * 0.2067669 +
 14.2488163 * 0.2067669 +
 14.2647612 * 0.0789474

Location Latitude: = 
 48.2248439 * 0.3007519 + 
 48.2331576 * 0.2067669 + 
 48.232513 * 0.2067669 +
 48.2277972 * 0.2067669 +
 48.2299558 * 0.0789474

Result Longitude: 14.255507
Result Latitude: 48.2291628

  • 信号通常是dBm的负值.因此,绝对值越低,信号和蜂窝塔越接近越好.在这个答案中,它意味着具有较低绝对值的信号的权重必须更大. (3认同)
  • ...并假设所有塔具有相同的强度,高度,干扰等.只是想知道如何获得误差半径,您可以使用塔的交替选择并寻找三角点中的相似性/差异.也是一段时间(在几秒钟内重复上述几次以减轻错误的尖峰/力量下降) (2认同)

小智 5

这实际上不是一个答案,但它是一个开始,我可能会添加更多内容:

小区 ID 似乎已发布:

http://openbmap.org/

我从此 wiki 页面找到了此链接,该页面具有指向其他单元 ID 数据源的链接:http://en.wikipedia.org/wiki/Cell_ID

请参阅页面底部,这是指向单元 ID 数据的链接:

http://openbmap.org/latest/cellular/raw/input_raw.zip

我还发现了这个 YouTube 视频,其中一个人正在玩一些似乎有手机信号塔位置的应用程序:

http://www.youtube.com/watch?v=CYvVN5dJD7A

可能在小区 ID 和信号强度之间你可以做出猜测。

但据我所知,对于一般三角测量,您需要知道至少三个塔的确切位置以及与它们的确切距离(这可能是信号强度的粗略距离,但可能太准确)。

维基百科似乎说它是以这种方式完成的..使用您所在的小区、最近的塔和信号强度的组合来获取您的位置:

http://en.wikipedia.org/wiki/Mobile_phone_tracking