Разъяснение по информации, предоставленной классом NetworkManager в Android

Я хотел бы определить положение мобильного устройства Android без подключения к интернету. Единственный вариант заключается в том, чтобы использовать информацию из соседних Cell Towers, я хочу знать, можно ли для этого использовать класс TelephonyManager (Предполагая, что широта и долгота позиций ячеек доступны в базе данных)?

Я знаю, что TelephonyManager.getNeighbouringCellInfo() предоставляет список NeighbouringCellInfo.

Мой вопрос: сколько NeighbouringCellInfo возвращает этот метод? и можно ли использовать эту информацию для триангуляции?

Если нет, могу ли я использовать SIM Toolkit для получения необходимой информации и выполнения триангуляции?

Пожалуйста, не стесняйтесь предоставлять любые соответствующие материалы, так как это было бы очень полезно для моей работы.

1 ответ

Решение

Прежде всего, вы, конечно, не можете сделать триангуляцию. Триангуляция опирается на углы. Я думаю, что вы имеете в виду трилатерацию. Трилатерация, напротив, зависит от расстояния.

Для трилатерации на основе расстояний вам нужна база данных с конкретными координатами и расстоянием до трех или более из этих координат (в данном случае, вышек сотовой связи). Однако, если вы посмотрите на документацию для NeighboringCellInfo, вы увидите, что вы не получите расстояние чтения. Вы получаете RSSI. Связь между RSSI и расстоянием не является линейной, не очень понятной или очень точной. Он может сильно различаться в зависимости от ориентации антенны, погодных условий и т. Д. Таким образом, если учесть, что вы просто сможете выбрать три ячейки и использовать их относительные RSSI для трилатерации пользователя, в конечном итоге окажется очень подверженным ошибкам (то есть в значительной степени совершенно неправильно в большинстве случаев). Наряду со всем этим, я не верю, что getNeighboringCellInfo всегда можно гарантировать возвращение трех или более башен (вы можете посмотреть реализацию кода низкого уровня здесь). Таким образом, мой вердикт состоит в том, что лучшее, что вы можете сделать, - это выяснить, какая из башен обладает наибольшей силой, и сказать, что вы несколько "близки" к ней, я действительно сомневаюсь, что вы можете сделать что-то лучше этого.

Вместо этого, гораздо лучший вариант, о котором вы наверняка подумали, - это использовать GPS, но я полагаю, у вас есть причина не хотеть этого делать.

Я не уверен, если вы тоже знаете, но TelephonyManager имеет реализацию, которая также даст вам обновления местоположения: здесь.

(Кстати, я однажды делал подобный проект трилатерации, и, по моему опыту, без высокоточных приемников и измерений, он просто не работает. У меня также были необработанные данные RSSI, и даже на коротких и средних диапазонах ошибок в данных были дико неприемлемы.)

Другие вопросы по тегам