web-dev-qa-db-ja.com

GSMセルタワーを適切に三角測量して位置を取得する方法

まず、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

それを分割して解析します(これを正しく解析することを望みます-もちろん、解析ルーチンにバグがある可能性がありますが、合理的に見えます):

Number of cells: 5

セル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

セル2

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33015
Signal: 55
ARFCN: 79
BSIC: 3
Longitude: 14.2637736
Latitude: 48.2331576

セル

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33035
Signal: 55
ARFCN: 64
BSIC: 5
Longitude: 14.2488966
Latitude: 48.232513

セル4

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 2515
Signal: 39
ARFCN: 55
BSIC: 32
Longitude: 14.2488163
Latitude: 48.2277972

セル5

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 60920
Signal: 21
ARFCN: 41
BSIC: 33
Longitude: 14.2647612
Latitude: 48.2299558

それで、そのすべての情報で、私が実際にどこにいるのか、最も正確な方法でどのように見つけるのですか?

29
kmp

少し理論を教えてあげましょう。

三角形分割は、基本的に3つの円の交点を見つけることです。

各モバイルタワーは円の中心です。円のサイズは、そのタワーの信号強度に関連しています。

3つの円が重なる場所は、ユーザーがいる場所です。

次のように、非常に基本的な三角測量を行うことができます。

 3タワー
 tx1、ty1 
 tx2、ty2 
 tx3、ty3 
 
信号強度s1、s2、s3 
 
各信号の重みを計算します。基本的に、重みの合計が1になる合計タワーの0〜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 = 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。経度:14.2565389 
 1。緯度:48.2248439 
 
 2。経度:14.2637736 
 2。緯度:48.2331576 
 
 3。経度:14.2488966 
 3。緯度:48.232513 
 
 4。経度:14.2488163 
 4。緯度:48.2277972 
 
 
 5。経度:14.2647612 
 5。緯度: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.2291628 
 
36
Jared Kells

これは実際には答えではありませんが、それはスターターであり、私はそれにさらに追加するかもしれません:

セルIDが公開されているようです:

http://openbmap.org/

他のセルIDデータソースへのリンクがあるこのWikiページからこのリンクを見つけました: 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と信号強度の間で推測することができます。

ただし、一般的な三角測量の場合、少なくとも3つのタワーの正確な位置とそれらからの正確な距離を知る必要があります(これは信号強度のあるおおよその距離かもしれませんが、正確すぎるかもしれません)。

ウィキペディアはこの方法で完了したと言っているようです。現在のセル、最も近いタワー、信号強度の組み合わせを使用して、現在地を取得します。

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

3
user359135