Разъяснение по информации, предоставленной классом NetworkManager в Android
Я хотел бы определить положение мобильного устройства Android без подключения к интернету. Единственный вариант заключается в том, чтобы использовать информацию из соседних Cell Towers, я хочу знать, можно ли для этого использовать класс TelephonyManager (Предполагая, что широта и долгота позиций ячеек доступны в базе данных)?
Я знаю, что TelephonyManager.getNeighbouringCellInfo() предоставляет список NeighbouringCellInfo.
Мой вопрос: сколько NeighbouringCellInfo возвращает этот метод? и можно ли использовать эту информацию для триангуляции?
Если нет, могу ли я использовать SIM Toolkit для получения необходимой информации и выполнения триангуляции?
Пожалуйста, не стесняйтесь предоставлять любые соответствующие материалы, так как это было бы очень полезно для моей работы.
1 ответ
Прежде всего, вы, конечно, не можете сделать триангуляцию. Триангуляция опирается на углы. Я думаю, что вы имеете в виду трилатерацию. Трилатерация, напротив, зависит от расстояния.
Для трилатерации на основе расстояний вам нужна база данных с конкретными координатами и расстоянием до трех или более из этих координат (в данном случае, вышек сотовой связи). Однако, если вы посмотрите на документацию для NeighboringCellInfo
, вы увидите, что вы не получите расстояние чтения. Вы получаете RSSI. Связь между RSSI и расстоянием не является линейной, не очень понятной или очень точной. Он может сильно различаться в зависимости от ориентации антенны, погодных условий и т. Д. Таким образом, если учесть, что вы просто сможете выбрать три ячейки и использовать их относительные RSSI для трилатерации пользователя, в конечном итоге окажется очень подверженным ошибкам (то есть в значительной степени совершенно неправильно в большинстве случаев). Наряду со всем этим, я не верю, что getNeighboringCellInfo
всегда можно гарантировать возвращение трех или более башен (вы можете посмотреть реализацию кода низкого уровня здесь). Таким образом, мой вердикт состоит в том, что лучшее, что вы можете сделать, - это выяснить, какая из башен обладает наибольшей силой, и сказать, что вы несколько "близки" к ней, я действительно сомневаюсь, что вы можете сделать что-то лучше этого.
Вместо этого, гораздо лучший вариант, о котором вы наверняка подумали, - это использовать GPS, но я полагаю, у вас есть причина не хотеть этого делать.
Я не уверен, если вы тоже знаете, но TelephonyManager
имеет реализацию, которая также даст вам обновления местоположения: здесь.
(Кстати, я однажды делал подобный проект трилатерации, и, по моему опыту, без высокоточных приемников и измерений, он просто не работает. У меня также были необработанные данные RSSI, и даже на коротких и средних диапазонах ошибок в данных были дико неприемлемы.)