Как определить местоположение по сетям сотовой связи (Cell ID)

f3152e8d47cbf6d55631c63c803b1457.png Существует множество способов определения местоположения, такие как спутниковая навигация (GPS), местоположение по беспроводным сетям WiFi и по сетям сотовой связи. В данном посте мы попытались проверить насколько хорошо работает технология определения местоположения по вышкам сотовой связи в городе Минске (при условии использования только открытых баз данных координат передатчиков GSM). Принцип действия заключается в том, что сотовый телефон (или модуль сотовой связи) знает, каким приемопередатчиком базовой станции он обслуживается и имея базу данных координат передатчиков базовой станции можно приблизительно определить своё местоположение. bf8d9c672600ae1c506d657b1fa36c1b.jpg Как указано на странице Cell ID, открытых баз данных с координатами передатчиков сотовой связи не так уж и много. Например, это OpenCellID.org, содержащая 2 611 805 передатчиков (13042 из них в Беларуси) и openbmap.org, содержащая 695 294 передатчиков. Ниже приведен скриншот с обозначенными передатчиками в западной части Минска. Как видно число базовых станций не равно нулю, что вселяет оптимизм и возможный положительный исход эксперимента. 8490f62d0809d0eb3849c42bd7b71757.png Теперь немного о том, что такое передатчик в понимании OpenCellID и каким образом наполняется база данных OpenCellID. Эта БД наполняется различными способами, наиболее простой — это установка на смартфон приложения, которое записывает координаты телефона и обслуживающую базовую станцию, а затем отсылает на сервер все измерения. На сервере OpenCellID происходит вычисление приблизительного местоположения базовой станции на основании большого числа измерений (см. рисунок ниже). Таким образом, координаты беспроводной сети вычисляются автоматически и являются очень приблизительными. 037fdedb17d233fac51ccbf668b187b1.png Теперь перейдем к вопросу о том, как использовать эту базу данных. Есть два варианта: использовать сервис перевода Cell ID в координаты, который предоставляется сайтом OpenCellID.org, либо выполнять локальный поиск. В нашем случае локальный способ предпочтительней, т.к. мы собираемся проехать по 13-километровому маршруту, и работа через веб будет медленной и неэффективной. Соответственно нам необходимо скачать базу данных на ноутбук. Это можно сделать, скачав файл cell_towers.csv.gz c сайта downloads.opencellid.org. d80da36ff74bf7e03cfe8658cc4da54e.png База данных представляет собой таблицу в CSV-формате, описанном ниже:  1867feeeb846c3094efea22711874556.png Нас интересуют следующие параметры:  — код страны;  — код оператора;  — код зоны;  — идентификатор передатчика;  — долгота передатчика;  — широта передатчика. С базой данных все понятно, теперь можно переходить к определению Cell ID. Все сотовые модули поддерживают следующие команды: AT+CREG, AT+COPS (обслуживающая базовая станция), AT+CSQ (уровень синала от базовой станции). Некоторые модули позволяют узнать кроме обслуживающего передатчика также и соседние, т.е. выполнять мониторинг базовых станций с помощью команд AT^SMONC для Siemens и AT+CCINFO для Simcom. У меня в распоряжении был модуль SIMCom SIM5215Е. a6e648c76a9473cf78d7a9c2ff95a166.jpg Соответственно мы воспользовались командой AT+CCINFO, ее формат приведен ниже. 5ba5181eed15c5267a8020578be248d1.png 56a62d848408400a666c5458bf376cea.png Нас интересуют следующие параметры:  — индикатор обслуживающего передатчика;  — индикатор соседнего передатчика;  — код страны;  — код оператора;  — код зоны;  — идентификатор передатчика;  — мощность принимаемого сигнала в дБм. Подключив сотовый модуль к ноутбуку, мы получили следующий лог:  df100864aecaa42c6b4ae0306f2d7891.png Мониторинг работает — можно ехать. Маршрут пролег в западной части Минска по ул. Матусевича, пр. Пушкина, ул. Пономаренко, ул. Шаранговича, ул. Максима Горецкого, ул. Лобанка, ул. Кунцевщина, ул. Матусевича. 2abb73295b664478eafdff4c4e7a57df.png Запись лога велась с интервалом в 1 секунду. Выполняя преобразование CellID в координаты, выяснилось что 6498 обращений к базе данных OpenCellID были результативными, а 3351 обращений не нашли соответствий в БД.Т. е. hit rate для Минска составляет примерно 66%. На рисунке ниже показаны все передатчики, которые встречались в логе и были в БД. f52d3afc0b8d8d03910099f308747206.png На рисунке ниже показаны все обслуживающие передатчики, которые встречались в логе и были в базе данных. Т.е. подобный результат можно получить на любом сотовом модуле или телефоне. a41cb4444454456fa181ec1b5e69a185.png Как видим, в один из моментов нас обслуживал передатчик, находящийся за транспортной развязкой на пересечении ул. Притыцкого и МКАД. Скорее всего, это загородная базовая станция, обслуживающая абонентов на расстоянии в несколько километров, что ведет к значительным ошибкам в определении местоположения по 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) Здесь мы допустили, что мощность всех передатчиков одинаковая, это допущение ошибочно. Но ввиду отсутствия информации о мощности передатчика базовой станции приходится идти на заведомо грубые допущения. В результате получаем более подробную картину местоположений. fff3c6928f7df86fa5961ce0bd76bb1d.png По итогу маршрут оказался неплохо прочерчен за исключением выброса в сторону развязки на МКАД, по ранее описанной причине. Кроме того, со временем база данных координат будет наполнятся, что также должно повысть точнось и доступность технологии опрееделения местоположения по Cell ID. Спасибо за внимание. Вопросы и комментарии приветствуются.

© Habrahabr.ru