如何正确三角测量 GSM 蜂窝塔以获取位置? [英] How to properly triangulate GSM cell towers to get a location?
问题描述
首先,我试图在 c# (.net 4) 中完成所有这些灾难,所以如果你想出一些代码来帮助我,那将不胜感激,但在这一点上任何事情都会有所帮助.
我的情况是,我的设备只能获取 GSM 蜂窝信息(顺便通过 AT+KCELL
命令),所以我收集了有关蜂窝塔的值(每个都有 LAC,MCC、MNC、小区 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
将其分解并解析我会得到(我希望我能正确解析 - 当然,我的解析例程中可能存在错误,但看起来很合理):
单元格数:5
单元 1
LAC:5502跨国公司:1中冶:232小区编号:33025信号:80ARFCN:74标准:33时间提前:0经度:14.2565389纬度:48.2248439
单元 2
LAC:5502跨国公司:1中冶:232小区编号:33015信号:55ARFCN:79基本信息:3经度:14.2637736纬度:48.2331576
单元 3
LAC:5502跨国公司:1中冶:232手机号:33035信号:55ARFCN:64标准:5经度:14.2488966纬度:48.232513
细胞 4
LAC:5502跨国公司:1中冶:232小区编号:2515信号:39ARFCN:55标准:32经度:14.2488163纬度:48.2277972
单元 5
LAC:5502跨国公司:1中冶:232小区编号:60920信号:21ARFCN:41标准:33经度:14.2647612纬度:48.2299558
有了所有这些信息,我如何才能以最准确的方式找到我的实际位置?
我可以为您提供一些理论方面的帮助.
三角剖分基本上就是找到3个圆的交点.
每个移动塔都是一个圆的中心.圆圈的大小与那座塔的信号强度有关.
三个圆圈重叠的地方就是用户所在的地方.
您可以进行一些非常基本的三角测量,如下所示:
<前>3 塔在tx1,ty1tx2,ty2tx3,ty3信号强度为 s1、s2、s3我们计算每个信号的权重.本质上是每个塔的从 0 到 1 的数字,其中权重之和为 1.加权信号 w1, w2, w3 其中:w1 = s1/(s1+s2+s3)w2 = s2/(s1+s2+s3)w3 = s3/(s1+s2+s3)用户将在x: (w1 * tx1 + w2 * tx2+ w3 * tx3)y: (w1 * ty1 + w2 * ty2+ w3 * ty3)这是一个使用您问题中的值的工作示例:
<前>s1 = 80s2 = 55s3 = 55s4 = 55s5 = 21w1 = 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.3007519w2 = 0.2067669w3 = 0.2067669w4 = 0.2067669w5 = 0.07894741.经度:14.25653891.纬度:48.22484392.经度:14.26377362.纬度:48.23315763.经度:14.24889663.纬度:48.2325134.经度:14.24881634.纬度:48.22779725.经度:14.26476125.纬度:48.2299558位置经度 =14.2565389 * 0.3007519 +14.2637736 * 0.2067669 +14.2488966 * 0.2067669 +14.2488163 * 0.2067669 +14.2647612 * 0.0789474位置纬度:=48.2248439 * 0.3007519 +48.2331576 * 0.2067669 +48.232513 * 0.2067669 +48.2277972 * 0.2067669 +48.2299558 * 0.0789474结果经度:14.255507结果纬度:48.2291628First of all, I am trying to do all this disaster in c# (.net 4) so if you come up with some code to help me that would be appreciated but really anything would help at this point.
I have a situation where I have a device that can only get GSM Cell information (incidentally via the AT+KCELL
command) so I have a collection of values about cell towers (each has LAC, MCC, MNC, Cell ID, Signal Strength and the first Timing Advance). I think, therefore, I am in a good place to be able to come up with some sort of longitude and latitude coordinate (albeit inaccurate, but, well meh). This is where I am reaching out for help because now my little brain is confused...
I can see various services that provide cell code resolution (Google, Open Cell ID, etc) and they take LAC,MCC etc as arguments and return a coordinate. I figure that what they return would, therefore, be the coordinate of the given tower I pass in. So in my case I could send off all the LACs etc that I have and get back a collection of longitude and latitudes. Brilliant, but that is not where my device is. Now I think I need to do some kind of triangulation and this is where my lack of knowledge is hurting me.
So am I right so far? Assuming I am, how do I perform this calculation (is there something out there that will tell me what to do with all these numbers or, even better, some open source library I can reference and feed all this stuff into to get something sensible)?
I'm assuming that I would need to use the timing advance to work out some approximate distance from a cell tower (maybe using the signal strength somehow) but what do I have to do? As you can tell - I am way out of my depth here!
For example, this is something I might get back from the aforementioned AT command:
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
breaking it up and parsing it I would get (I hope I parse this right - there is a chance there is a bug in my parsing routine of course but it looks reasonable):
Number of cells: 5
Cell 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
Cell 2
LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33015
Signal: 55
ARFCN: 79
BSIC: 3
Longitude: 14.2637736
Latitude: 48.2331576
Cell 3
LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33035
Signal: 55
ARFCN: 64
BSIC: 5
Longitude: 14.2488966
Latitude: 48.232513
Cell 4
LAC: 5502
MNC: 1
MCC: 232
Cell ID: 2515
Signal: 39
ARFCN: 55
BSIC: 32
Longitude: 14.2488163
Latitude: 48.2277972
Cell 5
LAC: 5502
MNC: 1
MCC: 232
Cell ID: 60920
Signal: 21
ARFCN: 41
BSIC: 33
Longitude: 14.2647612
Latitude: 48.2299558
So with all that information how do I find, in the most accurate way, where I actually am?
I can help you with a bit of the theory.
Triangulation is basically finding the intersection point of 3 circles.
Each mobile tower is the center of a circle. The size of the circle is relative to the signal strength of that tower.
The place where the 3 circles overlap is where the user is.
You can do some very basic triangulation as follows:
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)
Here is a working example using the values from your question:
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
这篇关于如何正确三角测量 GSM 蜂窝塔以获取位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!