Как правильно триангулировать вышки сотовой связи GSM для определения местоположения?

Прежде всего, я пытаюсь совершить всю эту катастрофу в C# (.net 4), поэтому, если вы придумаете какой-нибудь код, чтобы помочь мне, это будет оценено, но на самом деле что-нибудь поможет в этой точке.

У меня есть ситуация, когда у меня есть устройство, которое может только получать информацию о сотовой сети GSM (случайно через AT+KCELL команда), поэтому у меня есть коллекция значений о вышках сотовой связи (каждая имеет LAC, MCC, MNC, идентификатор ячейки, мощность сигнала и первое опережающее время). Поэтому я думаю, что я нахожусь в хорошем месте, чтобы иметь возможность придумать какую-то долготу и координату широты (хотя и неточно, но, ну, ладно). Вот где я обращаюсь за помощью, потому что теперь мой маленький мозг в замешательстве...

Я вижу различные службы, которые обеспечивают разрешение кода ячейки (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

Cell 2

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

Ячейка 3

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

Итак, со всей этой информацией, как мне найти наиболее точным образом, где я на самом деле?

2 ответа

Решение

Я могу помочь вам с небольшой теорией.

Триангуляция в основном находит точку пересечения 3 кругов.

Каждая мобильная башня является центром круга. Размер круга зависит от силы сигнала этой башни.

Место, где перекрываются 3 круга, - это место, где находится пользователь.

Вы можете сделать очень простую триангуляцию следующим образом:

3 башни в 
 TX1, Ty1 
 tx2, Ty 2 
 TX3, 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)
у: (w1 * ty1 + w2 * ty2+ w3 * ty3)

Вот рабочий пример, использующий значения из вашего вопроса:

s1 = 80 с2 = 55 с3 = 55 с4 = 55 с5 = 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.26476 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 + 48,267 066 067 067 067 067 067 067 067 067 067 067 067 067 067 032322% месторасположения места проживания: широта: 48.2299558 Долгота результата: 14.255507 Широта результата: 48.2291628

Это не ответ на самом деле, но это стартер, и я мог бы добавить к нему больше:

Идентификаторы ячейки опубликованы, кажется:

http://openbmap.org/

Я нашел эту ссылку на этой вики-странице, на которой есть ссылки на другие источники данных идентификатора ячейки: http://en.wikipedia.org/wiki/Cell_ID)

см. внизу страницы ссылка на данные идентификатора ячейки:

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

Кроме того, я нашел это видео на YouTube, где ребята играют с некоторыми приложениями, которые, кажется, имеют сотовую вышку:

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

возможно, между идентификаторами ячеек и силой сигнала вы можете сделать предположение..

но для AFAIK для общей триангуляции вам нужно знать точное местоположение как минимум трех башен и ваше точное расстояние от них (это может быть грубое расстояние с силой сигнала, но оно может быть слишком точным).

похоже, что википедия говорит, что все сделано таким образом... используйте комбинацию ячейки, в которой вы находитесь, ближайшей башни и уровня сигнала, чтобы получить ваше местоположение:

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

Другие вопросы по тегам