Як визначити місце розташування по мережах стільникового зв'язку (cell id)

Існує безліч способів визначення місцеположення, такі як супутникова навігація (GPS), місце розташування по бездротових мережах WiFi і по мережах стільникового зв'язку.

У даній статті ми спробували перевірити, наскільки добре працює технологія визначення місця розташування по вишок стільникового зв'язку в місті Мінську (за умови використання тільки відкритих баз даних координат передавачів GSM).


Як визначити місце розташування по мережах стільникового зв'язку (cell id)

Як зазначено на сторінці 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.

Як визначити місце розташування по мережах стільникового зв'язку (cell id)

База даних являє собою таблицю в CSV-форматі, описаному нижче:

Як визначити місце розташування по мережах стільникового зв'язку (cell id)

Нас цікавлять такі параметри:

  • - код країни;
  • - код оператора;
  • - код зони;
  • - ідентифікатор передавача;
  • - довгота передавача;
  • - широта передавача.

З базою даних все зрозуміло, тепер можна переходити до визначення Cell ID.

Всі мобільні модулі підтримують наступні команди: AT + CREG, AT + COPS (обслуговуюча базова станція), AT + CSQ (рівень сигналу від базової станції). Деякі модулі дозволяють дізнатися крім обслуговуючого передавача також і сусідні, тобто виконувати моніторинг базових станцій за допомогою команд AT ^ SMONC для Siemens і AT + CCINFO для Simcom. У мене в розпорядженні був модуль SIMCom SIM5215Е.

Як визначити місце розташування по мережах стільникового зв'язку (cell id)

Відповідно ми скористалися командою AT + CCINFO, її формат наведено нижче.

Як визначити місце розташування по мережах стільникового зв'язку (cell id)

Як визначити місце розташування по мережах стільникового зв'язку (cell id)

Нас цікавлять такі параметри:

  • - індикатор обслуговуючого передавача;
  • - індикатор сусіднього передавача;
  • - код країни;
  • - код оператора;
  • - код зони;
  • - ідентифікатор передавача;
  • - потужність сигналу в дБм.

Підключивши стільниковий модуль до ноутбука, ми отримали наступний лог:

Як визначити місце розташування по мережах стільникового зв'язку (cell id)

Моніторинг працює - можна їхати.

Маршрут проліг в західній частині Мінська по вул. Матусевича, пр. Пушкіна, вул. Пономаренко, вул. Шаранговича, вул. Максима Горецького, вул. Лобанков, вул. Кунцевщіна, вул. Матусевича.

Запис логу велася з інтервалом в 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.

Схожі статті