Я разрабатываю приложение для Android, в котором есть модуль для поиска всех ближайших/обнаруженных точек доступа Wi-Fi.
я могу получить всю информацию из найденной точки доступа Wi-Fi, например, SSID, BSSID, возможности, частоту, уровень и отметку времени
с этой информацией мне также нужно расстояние Wi-Fi (расстояние между точкой доступа Wi-Fi и мобильным устройством)
я использую строки ниже, чтобы получить Distance.
double exp = (27.55 - (20 * Math.log10(freqInMHz)) + Math.abs(levelInDb)) / 20.0;
double distanceM = Math.pow(10.0, exp);
это вернет расстояние в метрах.
я получил этот код по поиску в Google со многих страниц.
но я думаю, что ошибаюсь, этот код возвращает неправильное расстояние. Я также много пробовал в поиске Google, но не получал точных результатов.
Пожалуйста помогите. как я могу получить расстояние между точкой доступа Wi-Fi и мобильным устройством?
Ответ 1 · рейтинг 4 · datenwolf
Этот код:
double exp = (27,55 - (20 * Math.log10(freqInMHz)) + Math.abs(levelInDb)) / 20,0; двойное расстояниеM = Math.pow(10.0, exp);
Работает в предположении затухания на трассе в свободном пространстве между двумя изотропными антеннами и точкой доступа, передающей при мощности 20 дБм (и математика даже неверна; частотная зависимость потерь на трассе в свободном пространстве другая; это не имеет значения для диапазонов W-LAN, использует, исправление в 27,55).
В действительности вы имеете дело с анизотропными антеннами, препятствиями на пути, дифракционными эффектами и точкой доступа, изменяющей выходную мощность для экономии энергии, если не требуется высокая пропускная способность.
Или, другими словами: совершенно непрактично получить надежное значение расстояния, просто взглянув на полученную мощность. Это может дать вам примерное значение порядка величины, но не что-то отдаленно точное. Это просто элементарная физика.
Единственным надежным способом измерения расстояния является время полета. Для этого необходимо измерить время прохождения сигнала между устройством и точкой доступа. Поскольку мы имеем дело со скоростью света и расстояниями порядка метров до 100 м (вверху), это означает измерение в наносекундах. Можно сделать, но требует некоторой работы. См. ссылку, которую дал вам SatelliteSD (она на немецком языке, но диаграммы и ключевые слова должны быть понятны).
Ответ 2 · рейтинг 1 · sschrass
Возможно, вы могли бы использовать подход Time-of-Flight. Имейте в виду, что вы не можете полагаться на полученные сообщения, но на полученные служебные данные (например, ACK) я могу найти только эту ссылку (на немецком языке) измерение времени работы сигнала Из беглого чтения я думаю это очень утомительное занятие.
Ответ 3 · AADProgramming
Нет, это невозможно.
Вы не сможете определить расстояние между точками доступа от текущего местоположения вашего устройства до фактической точки доступа.
Похоже, точки доступа не сообщают свои координаты.
Проверьте ссылку с более подробной информацией.