Как правильно триангулировать сотовые вышки GSM, чтобы получить местоположение?
прежде всего, я пытаюсь сделать все это бедствие в C# (.net 4), поэтому, если вы придумаете какой-то код, чтобы помочь мне, что было бы оценено, но на самом деле что-нибудь поможет на данный момент.
у меня есть ситуация, когда у меня есть устройство, которое может получить только информацию о ячейке GSM (кстати, через AT+KCELL
command), поэтому у меня есть коллекция значений о вышках сотовой связи (каждый из них имеет LAC, MCC, MNC, идентификатор ячейки, силу сигнала и первый шаг синхронизации). Я мыслю, следовательно, я хороший место, чтобы иметь возможность придумать какую-то долготу и координату широты (хотя и неточную, но, хорошо meh). Это когда я обращаюсь за помощью, потому что теперь мой маленький мозг запутался...
Я вижу различные службы, которые предоставляют разрешение кода ячейки (Google, Open Cell ID и т. д.), И они принимают LAC,MCC и т. д. В качестве аргументов и возвращают координату. Я полагаю, что то, что они вернут, будет координатой данной башни, в которой я прохожу. Так что в моем случае я мог бы послать от всех лаков и т. д., которые у меня есть, и получить коллекцию долготы и широт. Блестяще, но мое устройство не там. Теперь я думаю, что мне нужно сделать какую-то триангуляцию, и это то, где мое отсутствие знаний причиняет мне боль.
так я прав до сих пор? Предполагая, что я, как выполнить этот расчет (есть ли что-то там, что скажет мне, что делать со всеми этими числами или, еще лучше, какая-то библиотека с открытым исходным кодом, на которую я могу ссылаться и кормить все это чтобы получить что-то разумное)?
Я предполагаю, что мне нужно будет использовать время заранее, чтобы выработать некоторое приблизительное расстояние от вышки сотовой связи (возможно, используя силу сигнала каким-то образом), но что мне нужно сделать? Как вы можете видеть - я здесь не в своей тарелке!
например, это то, что я мог бы получить от вышеупомянутой команды:
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
ячейка 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 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
Это не ответ на самом деле, но его стартер и я мог бы еще добавить к ней:
идентификаторы ячеек опубликованы кажется:
Я нашел эту ссылку на этой странице wiki, которая имеет ссылки на другие источники данных идентификатора ячейки: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 для общей триангуляции вам нужно знать точное местоположение по крайней мере три башни и ваше точное расстояние от них (это может быть грубое расстояние с силой сигнала, но оно может быть слишком точным).
похоже, Википедия говорит, что это сделано таким образом.. используйте комбинацию того, в какой ячейке вы находитесь, ближайшая башня и сила сигнала, чтобы получить ваше местоположение: