Існує безліч способів визначення місцеположення, такі як супутникова навігація (GPS), місце розташування по бездротових мережах WiFi і по мережах стільникового зв'язку.
У даній статті ми спробували перевірити, наскільки добре працює технологія визначення місця розташування по вишок стільникового зв'язку в місті Мінську (за умови використання тільки відкритих баз даних координат передавачів GSM).
Як зазначено на сторінці Cell ID. відкритих баз даних з координатами передавачів стільникового зв'язку не так вже й багато. Наприклад, це OpenCellID.org. містить 2 611 805 передавачів (13042 з них в Білорусі) і openbmap.org, що містить 695 294 передавачів.
Нижче наведено скріншот з позначеними передавачами в західній частині Мінська. Як видно число базових станцій не дорівнює нулю, що вселяє оптимізм і можливий позитивний результат експерименту.
Тепер перейдемо до питання про те, як використовувати цю базу даних. Є два варіанти: використовувати сервіс перекладу Cell ID в координати, який надається сайтом OpenCellID.org. або виконувати локальний пошук. У нашому випадку локальний спосіб краще, тому що ми збираємося проїхати по 13-кілометровому маршруту, і робота через веб буде повільною і неефективною. Відповідно нам необхідно завантажити базу даних на ноутбук. Це можна зробити, скачавши файл cell_towers.csv.gz c сайту downloads.opencellid.org.
База даних являє собою таблицю в CSV-форматі, описаному нижче:
Нас цікавлять такі параметри:
- код країни; - код оператора; - код зони; - ідентифікатор передавача; - довгота передавача; - широта передавача.
З базою даних все зрозуміло, тепер можна переходити до визначення Cell ID.
Всі мобільні модулі підтримують наступні команди: AT + CREG, AT + COPS (обслуговуюча базова станція), AT + CSQ (рівень сигналу від базової станції). Деякі модулі дозволяють дізнатися крім обслуговуючого передавача також і сусідні, тобто виконувати моніторинг базових станцій за допомогою команд AT ^ SMONC для Siemens і AT + CCINFO для Simcom. У мене в розпорядженні був модуль SIMCom SIM5215Е.
Відповідно ми скористалися командою AT + CCINFO, її формат наведено нижче.
Нас цікавлять такі параметри:
- індикатор обслуговуючого передавача; - індикатор сусіднього передавача; - код країни; - код оператора; - код зони; - ідентифікатор передавача; - потужність сигналу в дБм.
Підключивши стільниковий модуль до ноутбука, ми отримали наступний лог:
Моніторинг працює - можна їхати.
Маршрут проліг в західній частині Мінська по вул. Матусевича, пр. Пушкіна, вул. Пономаренко, вул. Шаранговича, вул. Максима Горецького, вул. Лобанков, вул. Кунцевщіна, вул. Матусевича.
Запис логу велася з інтервалом в 1 секунду. Виконуючи перетворення CellID в координати, з'ясувалося що 6498 звернень до бази даних OpenCellID були результативними, а 3351 звернень не знайшли відповідників в БД. Тобто hit rate для Мінська становить приблизно 66%.
На малюнку нижче показані всі передавачі, які зустрічалися в балці і були в БД.
Як бачимо, в один з моментів нас обслуговував передавач, що знаходиться за транспортною розв'язкою на перетині вул. Прітицкого і МКАД. Швидше за все, це заміська базова станція, що обслуговує абонентів на відстані в кілька кілометрів, що веде до значних помилок у визначенні місця розташування по Cell ID.
Оскільки наш SIMCom SIM5215Е в кожен момент часу показує не тільки обслуговуючий передавач, але також сусідні і рівні сигналу від них, то спробуємо розрахувати координати апарату на підставі всіх даних, наявних в конкретний момент часу.
Розрахунок координат абонента будемо виконувати як зважене середнє координат передавачів:
Latitude = Sum (w [n] * Latitude [n]) / Sum (w [n])
Longitude = Sum (w [n] * Longitude [n]) / Sum (w [n])
Як відомо з теорії поширення радіохвиль, загасання радіосигналу в вакуумі пропорційно квадрату відстані від передавача до приймача. Тобто при видаленні в 10 разів (наприклад, з 1 км до 10 км) сигнал стане в 100 разів слабкіше, тобто зменшиться на 20 дБ за потужністю. Відповідно вага при кожному доданку визначається як:
w [n] = 10 ^ (RSSI_in_dBm [n] / 20)
Тут ми допустили, що потужність всіх передавачів однакова, це припущення помилково. Але через відсутність інформації про потужності передавача базової станції доводиться йти на свідомо грубі припущення.
В результаті отримуємо більш детальну картину розташування.
За підсумком маршрут виявився непогано прокреслені за винятком викиду в сторону розв'язки на МКАД, по раніше описаної причини. Крім того, з часом база даних координат буде наповнюватися, що також повинно підвищити точність і доступність технології визначення місця розташування по Cell ID.