Это отличается от триангуляции

Трилатерация Wi-Fi (также называемая множественной задержкой) - это метод, используемый для оценки положения клиентского устройства на основе относительного расстояния . с позиций доступных точек доступа Wi-Fi. Это отличается от триангуляции Wi-Fi, которая определяет местоположение на основе углов прихода (AoA) сигналов, принимаемых антеннами точки доступа.

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

Для трилатерации Wi-Fi вы можете представить эти спутники как точки беспроводного доступа, и вы сможете связаться со всеми из них. Это означает, что ваше устройство находится в зоне действия всех этих точек доступа. Пространство, в котором встречаются эти точки доступа, - это пространство, в которое попадает ваше устройство.

Представьте себе этот сценарий. Вы пытаетесь создать сценарий, который будет определять географическое положение пользователя (широту и долготу) и использовать эти координаты, чтобы рекомендовать ближайшие рестораны. Чтобы сделать это в браузере, вы должны использовать объект Location. Однако вы не можете получить доступ к местоположению браузера через командную строку.

Как мы можем использовать JavaScript для получения координат устройства пользователя без браузера? Если мы сможем собрать различные точки беспроводного доступа вокруг устройства пользователя, мы сможем использовать трилатерацию Wi-Fi для получения координат устройства.

Вот что нам понадобится.

node-wifiscanner - этот пакет npm будет использоваться для сбора точек беспроводного доступа рядом с вами. Вы можете установить его, выполнив npm install node-wifiscanner.

node-fetch - Как только мы получим наши точки беспроводного доступа, мы сделаем POST-запрос, используя выборку. Поскольку API извлечения не реализован в Node.js, нам нужно будет запустить npm install node-fetch, чтобы загрузить пакет npm. Как только вы это сделаете, мы сможем отправить запрос в Google Geolocation API.

API геолокации Google

Мы будем использовать Google Geolocation API, чтобы найти наши координаты, как только мы соберем точки доступа Wi-Fi. В теле запроса POST есть атрибут wifiAccessPoints, который принимает массив объектов. Для этих объектов требуется только один параметр: macAddress. Это будут MAC-адреса собранных точек беспроводного доступа.

Чтобы использовать API геолокации, вам необходимо перейти в раздел учетных данных Google Cloud Platform. Оказавшись там, нажмите кнопку Создать учетные данные и выберите Ключ API.

Теперь, когда у нас есть зависимости, перейдем к коду. Создайте файл trilateration.js и вставьте в него приведенный ниже код.

Ответ от wifi-scanner может выглядеть примерно так:

Чтобы получить MAC-адрес, нам нужно получить значение в ключе mac. Этот формат отличается от формата API геолокации. См. Ниже на вводной странице.

{
  "macAddress": "00:25:9c:cf:1c:ac", <-- DIFFERENT KEY FORMAT
  "signalStrength": -43,
  "age": 0,
  "channel": 11,
  "signalToNoiseRatio": 0
}

Прежде чем сделать наш запрос, нам нужно вернуть новую коллекцию объектов MAC-адресов с ключом macAddress, который указывает на адрес.

var macs = data.map(x=>{
  var obj = {}
  obj['macAddress'] = x.mac
  return obj
})

После того, как мы переформатировали наши MAC-адреса, теперь мы можем инициировать запрос к API геолокации.

Выше приведен довольно стандартный вызов API Google, который возвращает объект, содержащий атрибут location. Этот атрибут указывает на объект, содержащий lat и lng. Они соответствуют широте и долготе (координатам) устройства. Ответ также содержит атрибут accuracy, который представляет точность расчета в метрах.

Примечание. Хотя 150 м - это не очень точное значение, я пробовал этот сценарий в нескольких разных местах, и каждый раз, когда запрос возвращал координаты здания, в котором я находился в то время. Ваши результаты могут отличаться.

Резюме

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

Трилатерация отличается от триангуляции, которая использует углы прихода (AoA) сигналов, принимаемых точками беспроводного доступа.

Вы не можете получить доступ к местоположению браузера из сценария командной строки. Следовательно, нам нужно найти MAC-адреса точек беспроводного доступа, окружающих устройство. Эти адреса можно найти с помощью пакета node-wifiscanner.

Получив MAC-адреса, отформатируйте их так, чтобы их можно было усваивать с помощью Google Geolocation API.

Используйте node-fetch для отправки запроса POST в API с отформатированными MAC-адресами в качестве значения wifiAccessPoints в теле запроса.

Благодаря трилатерации Wi-Fi мы можем определять географическое положение устройства с достаточной точностью.

Весь приведенный выше код можно найти на GitHub. Спасибо за прочтение!

Обновите бесплатную подписку на Medium до платной здесь, и всего за 5 долларов в месяц вы получите неограниченное количество рассказов без рекламы от тысяч авторов из самых разных публикаций. Это партнерская ссылка, и часть вашего членства помогает мне получать вознаграждение за контент, который я создаю. Спасибо!

использованная литература