Яндекс локатор: Локатор — Технологии Яндекса

Содержание

Запрос — Яндекс.Локатор. Руководство разработчика

Чтобы получить ответ о местоположении мобильного устройства, отправьте POST-запрос к ресурсу geolocation. Передайте данные в формате JSON:

  • в стандартном виде;

  • в сжатом виде.

Локатор обработает данные из запроса в следующей последовательности:

  1. Точки доступа Wi-Fi.

  2. Сигналы сетей мобильной связи.

  3. IP-адрес.

Если Локатор успешно определит местоположение, он вернет ответ с координатами точки и радиусом погрешности. В противном случае вы получите сообщение об ошибке.

Передайте данные о мобильном устройстве и его окружении в параметре запроса json.
Host: api.lbs.yandex.net
POST /geolocation
json={
   "Описание

\n

Метаданные запроса.

\n

Обязателен

Да

"}}">": { "Описание

\n

Версия API Локатора: 1.0.

\n

Обязателен

Да

"}}">": "1.0", "Описание

\n

Ключ доступа к API Локатора.

\n

Обязателен

Да

"}}">": "ABM6WU0BAAAANfFuIQIAV1pUEYIBeogyUNvVbhNaJPWeM-AAAAAAAAAAAACRXgDsaYNpZWpBczn4Lq6QmkwK6g==" }, "Описание

\n

Массив объектов, каждый из которых описывает одну соту. Необходим хотя бы один объект в массиве.

\n

Обязателен

Нет

"}}">": [ { "Описание

\n

Код страны.

\n

Обязателен

Да

"}}">": 250, "Описание

\n

Код сети мобильной связи.

\n

Обязателен

Да

"}}">": 2, "Описание

\n

Идентификатор соты.

\n

Обязателен

Да

"}}">": 197403650, "Описание

\n

Код местоположения.

\n

Обязателен

Да

"}}">": 9900, "Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": -80, "Описание

\n

Время в миллисекундах с момента получения данных через программный интерфейс мобильного устройства. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": 1000 } ], "Описание

\n

Массив объектов, каждый из которых описывает одну точку доступа Wi-Fi. Необходим хотя бы один объект.

\n

Обязателен

Нет

"}}">": [ { "Описание

MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC.

Обязателен

Да

"}}">": "2CD02D814C80", "Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": -68, "Описание

\n

Время в миллисекундах с момента получения данных через программный интерфейс мобильного устройства. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": 500, }, { "Описание

MAC-адрес в символьном представлении без разделителей. Например:

123456789ABC.

Обязателен

Да

"}}">": "E4AA5DE28CD0", "Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": -60, "Описание

\n

Время в миллисекундах с момента получения данных через программный интерфейс мобильного устройства. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": 500, } ], "Описание

\n

Содержит IP-адрес.

\n

Обязателен

Нет

"}}">": { "Описание

\n

IP-адрес мобильного устройства, назначенный оператором мобильного интернета.

\n

Если IP-адрес отсутствует или некорректен, Локатор будет использовать адрес отправителя из заголовка IP-пакета. Этот адрес может быть подменен прокси-сервером, через который прошел IP-пакет.

\n

Обязателен

Да

"}}">": "95.108.173.231" } }
curl -X POST 'http://api.lbs.yandex.net/geolocation' -d 'json={"Описание

\n

Метаданные запроса.

\n

Обязателен

Да

"}}">": {"Описание

\n

Версия API Локатора:

1.0.

\n

Обязателен

Да

"}}">": "1. 0", "Описание

\n

Ключ доступа к API Локатора.

\n

Обязателен

Да

"}}">": "ABM6WU0BAAAANfFuIQIAV1pUEYIBeogyUNvVbhNaJPWeM-AAAAAAAAAAAACRXgDsaYNpZWpBczn4Lq6QmkwK6g=="}, "Описание

\n

Массив объектов, каждый из которых описывает одну соту. Необходим хотя бы один объект в массиве.

\n

Обязателен

Нет

"}}">": [ { "Описание

\n

Код страны.

\n

Обязателен

Да

"}}">": 250, "Описание

\n

Код сети мобильной связи.

\n

Обязателен

Да

"}}">": 2, "Описание

\n

Идентификатор соты.

\n

Обязателен

Да

"}}">": 197403650, "Описание

\n

Код местоположения.

\n

Обязателен

Да

"}}">": 9900, "Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": -80, "Описание

\n

Время в миллисекундах с момента получения данных через программный интерфейс мобильного устройства. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": 1000} ], "Описание

\n

Массив объектов, каждый из которых описывает одну точку доступа Wi-Fi. Необходим хотя бы один объект.

\n

Обязателен

Нет

"}}">": [ {"Описание

MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC.

Обязателен

Да

"}}">": "2CD02D814C80", "Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": -68, "Описание

\n

Время в миллисекундах с момента получения данных через программный интерфейс мобильного устройства. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": 500}, {"Описание

MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC.

Обязателен

Да

"}}">": "E4AA5DE28CD0", "Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": -60, "Описание

\n

Время в миллисекундах с момента получения данных через программный интерфейс мобильного устройства. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">": 500} ], "Описание

\n

Содержит IP-адрес.

\n

Обязателен

Нет

"}}">": {"Описание

\n

IP-адрес мобильного устройства, назначенный оператором мобильного интернета.

\n

Если IP-адрес отсутствует или некорректен, Локатор будет использовать адрес отправителя из заголовка IP-пакета. Этот адрес может быть подменен прокси-сервером, через который прошел IP-пакет.

\n

Обязателен

Да

"}}">": "95.108.173.231"}}'
Ключи
Объект Описание Обязателен
common

Метаданные запроса.

Да
version

Версия API Локатора: 1.0.

Да
api_key

Ключ доступа к API Локатора.

Да
gsm_cells

Массив объектов, каждый из которых описывает одну соту. Необходим хотя бы один объект в массиве.

Нет
countrycode

Код страны.

Да
operatorid

Код сети мобильной связи.

Да
cellid

Идентификатор соты.

Да
lac

Код местоположения.

Да
signal_strength

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

Нет
age

Время в миллисекундах с момента получения данных через программный интерфейс мобильного устройства. Элемент зарезервирован для будущего использования.

Нет
wifi_networks

Массив объектов, каждый из которых описывает одну точку доступа Wi-Fi. Необходим хотя бы один объект.

Нет
mac MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC. Да
signal_strength

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

Нет
age

Время в миллисекундах с момента получения данных через программный интерфейс мобильного устройства. Элемент зарезервирован для будущего использования.

Нет
ip

Содержит IP-адрес.

Нет
address_v4

IP-адрес мобильного устройства, назначенный оператором мобильного интернета.

Если IP-адрес отсутствует или некорректен, Локатор будет использовать адрес отправителя из заголовка IP-пакета. Этот адрес может быть подменен прокси-сервером, через который прошел IP-пакет.

Да

Сожмите JSON с данными утилитой gzip и передайте его в запросе, указав заголовок Content-Type: multipart/from-data и параметр gzip с любым непустым значением.

Включите в запрос с типом multipart/from-data две части:

  1. gzip — индикатор запроса с сжатыми данными;

  2. json — параметр, содержащий сжатые данные JSON.

В каждой части запроса укажите значение одного параметра после разделителя boundary и заголовка Content-Disposition с именем параметра. Значение параметра отделите от предшествующих заголовков пустой строкой.

Отправьте POST-запрос к ресурсу geolocation.

POST /geolocation?gzip=1
Host: api.lbs.yandex.net
Обозначает, что содержимое запроса следует принимать в любой кодировке."}}">
Тип запроса для передачи файлов внутри HTTP-запроса.

Разделитель boundary — произвольная строка из латинских букв и цифр.

"}}"> Длина запроса в байтах начиная со второй строки после этого заголовка."}}"> --YANDEXLOCATORBOUNDARY Начало части запроса для передачи параметра, объявленного в name. Предваряется разделителем.

Значение параметра указывается после дочерних заголовков и пустой строки.

"}}"> 1 --YANDEXLOCATORBOUNDARY Начало части запроса для передачи параметра, объявленного в name. Предваряется разделителем.

Значение параметра указывается после дочерних заголовков и пустой строки.

"}}"> Обозначает, что вложенные данные представляют собой файл неуказанного типа."}}"> Обозначает, что содержимое — это бинарные данные."}}"> СЖАТЫЕ ДАННЫЕ --YANDEXLOCATORBOUNDARY--
curl -X POST 'http://api.lbs.yandex.net/geolocation?gzip=1' -H 'Content-Type: multipart/form-data' -F [email protected]
Ключи
Заголовок Описание
Accept-Encoding: identity
Обозначает, что содержимое запроса следует принимать в любой кодировке.
Content-Type: multipart/form-data; 
boundary=разделитель
Тип запроса для передачи файлов внутри HTTP-запроса.

Разделитель boundary — произвольная строка из латинских букв и цифр.

Content-length: целое число
Длина запроса в байтах начиная со второй строки после этого заголовка.
Content-Disposition: form-data; 
name="имя_параметра"
Начало части запроса для передачи параметра, объявленного в name. Предваряется разделителем.

Значение параметра указывается после дочерних заголовков и пустой строки.

Content-Type: application/octet-stream
Обозначает, что вложенные данные представляют собой файл неуказанного типа.
Content-Transfer-Encoding: binary
Обозначает, что содержимое — это бинарные данные.

Запрос — Яндекс.Локатор. Руководство разработчика

Чтобы получить ответ о местоположении мобильного устройства, отправьте POST-запрос к ресурсу geolocation. Передайте данные в формате XML:

  • в стандартном виде;

  • в сжатом виде.

Локатор обработает данные из запроса в следующей последовательности:

  1. Точки доступа Wi-Fi.

  2. Сигналы сетей мобильной связи.

  3. IP-адрес.

Если Локатор успешно определит местоположение, он вернет ответ с координатами точки и радиусом погрешности. В противном случае вы получите сообщение об ошибке.

Передайте данные о мобильном устройстве и его окружении в параметре запроса xml.

Host: api.lbs.yandex.net
POST /geolocation
xml=<Описание

Корневой элемент.

Обязателен

Да

"}}">> <Описание

\n

Метаданные запроса.

\n

Обязателен

Да

"}}">> <Описание

\n

Версия API Локатора: 1.0.

\n

Обязателен

Да

"}}">>1. 0</version> <Описание

\n

Ключ доступа к API Локатора.

\n

Обязателен

Да

"}}">>ABM6WU0BAAAANfFuIQIAV1pUEYIBeogyUNvVbhNaJPWeM-AAAAAAAAAAAACRXgDsaYNpZWpBczn4Lq6QmkwK6g==</api_key> </common> <Описание

\n

Содержит один или несколько элементов cell с данными о соте.

\n

Обязателен

Нет

"}}">> <Описание

\n

Содержит идентификационные коды одной соты, а также данные об уровне сигнала.

\n

Обязателен

Хотя бы один элемент

"}}">> <Описание

\n

Код страны.

\n

Обязателен

Да

"}}">>250</countrycode> <Описание

\n

Код сети мобильной связи.

\n

Обязателен

Да

"}}">>2</operatorid> <Описание

\n

Идентификатор соты.

\n

Обязателен

Да

"}}">>197403650</cellid> <Описание

\n

Код местоположения.

\n

Обязателен

Да

"}}">>9900</lac> <Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>-80</signal_strength> <Описание

\n

Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>1000</age> </cell> </gsm_cells> <Описание

\n

Содержит один или несколько элементов network с данными о точках доступа Wi-Fi.

\n

Обязателен

Нет

"}}">> <Описание

\n

Содержит MAC-адрес точки доступа. Дополнительно может содержать данные об уровне сигнала.

\n

Обязателен

Хотя бы один элемент

"}}">> <Описание

\n

MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC.

\n

Обязателен

Да

"}}">>2CD02D814C80</mac> <Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>-68</signal_strength> <Описание

\n

Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>500</age> </network> <Описание

\n

Содержит MAC-адрес точки доступа. Дополнительно может содержать данные об уровне сигнала.

\n

Обязателен

Хотя бы один элемент

"}}">> <Описание

\n

MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC.

\n

Обязателен

Да

"}}">>E4AA5DE28CD0</mac> <Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>-60</signal_strength> <Описание

\n

Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>500</age> </network> </wifi_networks> <Описание

\n

Содержит элемент address_v4.

\n

Обязателен

Нет

"}}">> <Описание

\n

IP-адрес мобильного устройства, назначенный оператором мобильного интернета.

\n \n

Если IP-адрес отсутствует или некорректен, то Локатор будет использовать адрес отправителя из заголовка IP-пакета. Этот адрес может быть подменен прокси-сервером, через который прошел IP-пакет.

\n \n

Обязателен

Да

"}}">>95.108.173.231</address_v4> </ip> </ya_lbs_request>
curl -X POST 'http://api.lbs.yandex.net/geolocation' -d 'xml=<Описание

Корневой элемент.

Обязателен

Да

"}}">><Описание

\n

Метаданные запроса.

\n

Обязателен

Да

"}}">><Описание

\n

Версия API Локатора: 1. 0.

\n

Обязателен

Да

"}}">>1.0</version><Описание

\n

Ключ доступа к API Локатора.

\n

Обязателен

Да

"}}">>ABM6WU0BAAAANfFuIQIAV1pUEYIBeogyUNvVbhNaJPWeM-AAAAAAAAAAAACRXgDsaYNpZWpBczn4Lq6QmkwK6g==</api_key></common><Описание

\n

Содержит один или несколько элементов cell с данными о соте.

\n

Обязателен

Нет

"}}">><Описание

\n

Содержит идентификационные коды одной соты, а также данные об уровне сигнала.

\n

Обязателен

Хотя бы один элемент

"}}">><Описание

\n

Код страны.

\n

Обязателен

Да

"}}">>250</countrycode><Описание

\n

Код сети мобильной связи.

\n

Обязателен

Да

"}}">>2</operatorid><Описание

\n

Идентификатор соты.

\n

Обязателен

Да

"}}">>197403650</cellid><Описание

\n

Код местоположения.

\n

Обязателен

Да

"}}">>9900</lac><Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>-80</signal_strength><Описание

\n

Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>1000</age></cell></gsm_cells><Описание

\n

Содержит один или несколько элементов network с данными о точках доступа Wi-Fi.

\n

Обязателен

Нет

"}}">><Описание

\n

Содержит MAC-адрес точки доступа. Дополнительно может содержать данные об уровне сигнала.

\n

Обязателен

Хотя бы один элемент

"}}">><Описание

\n

MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC.

\n

Обязателен

Да

"}}">>2CD02D814C80</mac><Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>-68</signal_strength><Описание

\n

Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>500</age></network><Описание

\n

Содержит MAC-адрес точки доступа. Дополнительно может содержать данные об уровне сигнала.

\n

Обязателен

Хотя бы один элемент

"}}">><Описание

\n

MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC.

\n

Обязателен

Да

"}}">>E4AA5DE28CD0</mac><Описание

\n

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>-60</signal_strength><Описание

\n

Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования.

\n

Обязателен

Нет

"}}">>500</age></network></wifi_networks><Описание

\n

Содержит элемент address_v4.

\n

Обязателен

Нет

"}}">><Описание

\n

IP-адрес мобильного устройства, назначенный оператором мобильного интернета.

\n \n

Если IP-адрес отсутствует или некорректен, то Локатор будет использовать адрес отправителя из заголовка IP-пакета. Этот адрес может быть подменен прокси-сервером, через который прошел IP-пакет.

\n \n

Обязателен

Да

"}}">>95.108.173.231</address_v4></ip></ya_lbs_request>'
Элементы
Элемент Описание Обязателен
ya_lbs_request Корневой элемент. Да
common

Метаданные запроса.

Да
version

Версия API Локатора: 1.0.

Да
api_key

Ключ доступа к API Локатора.

Да
gsm_cells

Содержит один или несколько элементов cell с данными о соте.

Нет
cell

Содержит идентификационные коды одной соты, а также данные об уровне сигнала.

Хотя бы один элемент
countrycode

Код страны.

Да
operatorid

Код сети мобильной связи.

Да
cellid

Идентификатор соты.

Да
lac

Код местоположения.

Да
signal_strength

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

Нет
age

Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования.

Нет
wifi_networks

Содержит один или несколько элементов network с данными о точках доступа Wi-Fi.

Нет
network

Содержит MAC-адрес точки доступа. Дополнительно может содержать данные об уровне сигнала.

Хотя бы один элемент
mac

MAC-адрес в символьном представлении без разделителей. Например: 123456789ABC.

Да
signal_strength

Уровень сигнала, измеренный в месте нахождения мобильного устройства. Отрицательное число, выраженное в децибелах к милливатту — dBm. Элемент зарезервирован для будущего использования.

Нет
age

Время в миллисекундах с момента получения данных мобильным устройством. Элемент зарезервирован для будущего использования.

Нет
ip

Содержит элемент address_v4.

Нет
address_v4

IP-адрес мобильного устройства, назначенный оператором мобильного интернета.

Если IP-адрес отсутствует или некорректен, то Локатор будет использовать адрес отправителя из заголовка IP-пакета. Этот адрес может быть подменен прокси-сервером, через который прошел IP-пакет.

Да

Сожмите XML с данными утилитой gzip и передайте его в запросе, указав заголовок Content-Type: multipart/from-data и параметр gzip с любым непустым значением.

Включите в запрос с типом multipart/from-data две части:

  1. gzip — индикатор запроса с сжатыми данными;

  2. xml — параметр, содержащий сжатые данные XML.

В каждой части запроса укажите значение одного параметра после разделителя boundary и заголовка Content-Disposition с именем параметра. Значение параметра отделите от предшествующих заголовков пустой строкой.

Отправьте POST-запрос к ресурсу geolocation.

POST /geolocation?gzip=1
Host: api.lbs.yandex.net
Обозначает, что содержимое запроса следует принимать в любой кодировке."}}">
Тип запроса для передачи файлов внутри HTTP-запроса.

Разделитель boundary — произвольная строка из латинских букв и цифр.

"}}"> Длина запроса в байтах начиная со второй строки после этого заголовка."}}"> --YANDEXLOCATORBOUNDARY Начало части запроса для передачи параметра, объявленного в name. Предваряется разделителем.

Значение параметра указывается после дочерних заголовков и пустой строки.

"}}"> 1 --YANDEXLOCATORBOUNDARY Начало части запроса для передачи параметра, объявленного в name. Предваряется разделителем.

Значение параметра указывается после дочерних заголовков и пустой строки.

"}}"> Обозначает, что вложенные данные представляют собой файл неуказанного типа."}}"> Обозначает, что содержимое — это бинарные данные."}}"> СЖАТЫЕ ДАННЫЕ --YANDEXLOCATORBOUNDARY--
curl -X POST 'http://api.lbs.yandex.net/geolocation?gzip=1' -H 'Content-Type: multipart/form-data' -F [email protected]
Заголовки
Заголовок Описание
Accept-Encoding: identity
Обозначает, что содержимое запроса следует принимать в любой кодировке.
Content-Type: multipart/form-data; 
boundary=разделитель
Тип запроса для передачи файлов внутри HTTP-запроса.

Разделитель boundary — произвольная строка из латинских букв и цифр.

Content-length: целое число
Длина запроса в байтах начиная со второй строки после этого заголовка.
Content-Disposition: form-data; 
name="имя_параметра"
Начало части запроса для передачи параметра, объявленного в name. Предваряется разделителем.

Значение параметра указывается после дочерних заголовков и пустой строки.

Content-Type: application/octet-stream
Обозначает, что вложенные данные представляют собой файл неуказанного типа.
Content-Transfer-Encoding: binary
Обозначает, что содержимое — это бинарные данные.

Была ли статья полезна?

как работает Яндекс.Локатор / Блог компании Яндекс / Хабр Одни просто не имеют смысла без знания местонахождения пользователя, другие с ним становятся удобнее. Это так называемые геолокационные сервисы (LBS): навигаторы, форс-скверы, инстаграммы с геотегами фото и даже приложения-напоминания, работающие рядом с конкретным местом, например, возле офиса или магазина.

Для сервисов и приложений Яндекса мы создали собственную реализацию метода определения местоположения без GPS — Яндекс. Локатор. Это экономит время пользователя и делает наши приложения немного умнее. В Навигаторе и Картах избавляет от необходимости вводить начальную точку маршрута, даже если вы находитесь на крытой стоянке. А при выборе фильма в Kinoafish или товара в Mobile Market помогает сразу показать, где их найти в вашем районе города. Ну и конечно при поиске кафе и банкоматов — позволяет показать сразу ближайшие, даже когда находишься в метро.

Мы давно открыли технологию как бесплатный API. Сегодня мы хотим рассказать, как это устроено.

Почему без GPS и как иначе

Спутниковые навигационные системы (ГНСС), в нашем случае GPS и ГЛОНАСС, на сегодняшний день являются наиболее точным методом геоопределения. Соответствующие модули есть практически во всех современных смартфонах. Но не всегда и не везде он может решить проблемы LBS.

Во-первых, поиск спутников иногда занимает несколько минут, и бывают ситуации, в которых важна скорость определения даже с потерей точности. Например, когда нужно построить предварительный маршрут в навигаторе или заехать. Во-вторых, спутники обычно не «видны» в помещении или под землей. В-третьих, не в каждом мобильном телефоне или планшете есть GPS-модули, а в ноутбуках они практически отсутствуют. То есть LBS нужны альтернативы.

Ну и конечно же есть альтернативы — определить местоположение можно по ближайшим GSM-вышкам, сетям Wi-Fi и даже по IP-адресу. Точность каждого из этих методов намного хуже, чем у GPS. Но если их совместить, вместе они дадут приемлемое качество. При этом некоторые недостатки одного нивелируются возможностями другого. Вышки GSM есть почти везде, а сетей Wi-Fi нет. При этом точность Wi-Fi лучше. Поэтому комбинированный метод по полноте и точности лучше, чем каждый в отдельности. Менее известен тот факт, что два роутера в разных частях города могут иметь одинаковый MAC-адрес. Сочетание GSM и Wi-Fi решает такие коллизии. Скорее всего, рядом с этими роутерами будут вышки с разными идентификаторами — ведь вероятность совпадения в пределах квартала гораздо меньше, чем в масштабах всего города.

В мире существует несколько реализаций такого комбинированного метода геоопределения. И, похоже, первый вопрос, который встал перед всеми разработчиками, — откуда брать информацию о расположении сетей Wi-Fi и вышек сотовой связи.

База сетевого местоположения

В дилемме «купить или создать» мы в конечном итоге предпочли последнее. Основная причина в том, что с собственными данными и алгоритмами гораздо проще контролировать качество результата. В сборе информации нам помогли пользователи мобильных Яндекс.Карт.

Когда мы начинали разработку Локатора, на улицах городов уже были сотни тысяч людей с включенными Яндекс.Картами в телефонах. С согласия пользователя приложение постоянно передает его GPS-координаты — Яндекс.Трекы строятся на основе этой информации. Мы подумали, что вместе с этим приложение может отметить, на какой базовой станции обслуживается телефон в этих координатах, какие сети Wi-Fi видны (при этом, конечно, не подключаясь к самим сетям — чтобы не создавать риски для конфиденциальности) .

Для участия в таком краудсорсинге человеку не нужно ничего делать специально — достаточно воспользоваться приложением. А также координаты, данные об окружающих сетях Wi-Fi и станциях GSM анонимизируются. Они практически ничего не «весят», и батарея от их переноса, соответственно, не садится быстрее.

Таким образом, пользователи стали помогать друг другу:

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

База собрана и регулярно обновляется. И здесь мы сталкиваемся со следующей проблемой.

«Подвижные» сети

Опыт показывает, что идентификаторы вышек сотовой связи постоянно меняются — номер, который вчера был в центре города, завтра может оказаться на окраине. Wi-Fi роутеры также могут перемещаться вместе со своими владельцами. И получается, что при каждом перемещении нужно инвалидировать значительную часть данных.

Вот как нам удалось одновременно решить проблемы с перемещением и вышек, и роутеров. Пользователь получает запрос местоположения вместе с данными о том, какие сети он видит. Если в списке сетей есть та, которая была замечена в разных частях города, алгоритм учитывает, сколько сигналов от нее аккумулировано в каждой зоне и возраст последней. Каждый плотный кластер сигналов от сети Wi-Fi или вышки сотовой связи — это то, что мы называем «облаком». Чем больше в облаке сигналов и чем они свежее, тем оно достовернее. Ответ будет, соответственно, наибольшим и самое свежее, а облако, в котором нет сигналов более месяца, мы считаем устаревшим — даже если для этой сети нет более свежего облака в другом районе.

Радиус облака

Так как положение определяется приблизительно, то точку показать нельзя — нужно нарисовать круг (т.к. радиосигнал при отсутствии помех распределяется одинаково во все стороны). Хотя, если посмотреть на реальную картину сигналов, чаще всего это эллипс. Ведь автомобилисты чаще всего пользуются мобильными картами. Их GPS-треки остаются на дорогах, а из дворов и, тем более, из зданий сигналы практически не поступают.

Чтобы ответ был предельно точным, радиус окружности должен быть минимальным. Если просто обвести все сигнальные точки той или иной сети, то радиус получится слишком большим. Мат помог уменьшить его. статистика. Плотность сигнала подчиняется нормальному распределению, т. е. применяется правило трех сигм. В окрестности такого радиуса попадают 99,7% точек.

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

Облачные сигналы

К сожалению, не все сигналы GPS от пользователей просто компилируются в облака. Оказалось, что если на карту наложить все сигналы одной сети, то помимо «эллипсов» на ней появятся точки и линии. Это, соответственно, одиночные сигналы, далеко удаленные от скопления сигналов одной и той же сети, и очень длинные GPS-треки (т.е. цепочки GPS-сигналов).

«Одиночки» появляются, например, когда человек передвигается в метро. Телефон теряет связь с сотой на одной станции, а переходя на другую, все равно считает, что его обслуживает та сота. Локатор отфильтровывает такие сигналы. Кроме того, мы устанавливаем минимальный порог для облаков, чтобы не полагаться на слишком мало сигнальных кластеров.

Длинные GPS-треки появляются, например, когда человек едет на машине по городу. Телефон «тащит» идентификатор вышки с начала маршрута и сообщает, что якобы видит его всю дорогу. Известно, что базовые станции имеют ограниченный радиус действия, поэтому Локатор также отфильтровывает такие GPS-треки. Следы, длина которых находится в пределах досягаемости башни, остаются. Как правило, они заметны в областях, где мало данных. Там они становятся цепочкой маленьких облаков.

Одиночные сигналы, небольшие облака и длинные следы мы считаем «шумом». Когда пользователь видит одну-единственную сеть, для которой мы знаем только такие сигналы, он получает ответ, что местоположение определить не удалось. Мы считаем это более правильным, чем давать заведомо неверный результат.

Когда данных накопилось мало, возникла еще одна сложность с объединением всех сигналов в одно облако. Бывало, что сигналы с вышки из одного города приходили и из другого. Нам помогло наличие кода зоны местоположения в идентификаторах сетей GSM — LAC (Location Area Code). Поскольку вышки с одинаковым кодом должны быть рядом со стандартом, облакам, которые находились «за городом» (то есть среди облаков с другим LAC), Локатор стал придавать малый вес.

Повышение точности определения…

… по сетям GSM

Когда-то приложениям была доступна информация только об одной базовой станции, хотя телефон чаще всего видит несколько. После появления платформы Android приложения научились видеть их все (кроме подключения к стандарту 3G, который позволяет распознавать только одну вышку сотовой связи). Местоположение стало определяться точнее — не по одному облаку, а по совокупности нескольких. Оказалось, что для многих облаков можно использовать тот же подход, что и для одного. Радиус вычисляется по стандартному отклонению сигналов, входящих в набор облаков, а центр вычисляется по среднему значению их координат.

… по сетям Wi-Fi

Когда смартфон находится в зоне действия нескольких сетей Wi-Fi, он может сообщать не только их список, но и уровень сигнала каждой из них. Мы использовали знания об этой силе, чтобы уточнить центр круга, в котором находится пользователь. Мы стали подвешивать воображаемые пружины к центрам наблюдаемых облаков — чем туже, тем сильнее сигнал. А их свободные концы — соединить. Точка, в которой эти пружины уравновешены, является утонченным центром.

Результирующее качество

Сначала несколько слов о том, как мы оцениваем качество нашего решения. Как уже было сказано, от пользователей, у которых в устройствах есть модуль GPS, Локатор получает как координаты, так и список сетей, которые видят устройства. Для оценки качества он сначала определяет примерное местоположение, ориентируясь только на эти сети. А затем он проверяет, находятся ли истинные координаты пользователя в круге, предложенном локатором.

Используя эту методику, мы получили следующие числа:

  • на 83% запросов в день, местоположение определяется правильно — координаты GPS устройства находятся в области под названием Latitude
  • 14% сигналов — с ошибкой :
    • 7% — ошибка менее 100 метров
    • 5,6% — от 100 метров до нескольких километров
    • 1,4% — Локатор ошибается на город
  • на остальные 3% запросов приходит ответ «Местоположение не найдено»


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

Но есть технологические ограничения:

  • если телефон сообщает только об одной GSM вышке, то минимальный радиус будет несколько сотен метров в городе, и несколько километров за городом
  • если телефон видит несколько вышек — центр можно определить точнее, но уменьшить радиус вряд ли получится
  • если видна сеть Wi-Fi — минимальный радиус будет 10 метров
Объем вычислений

Чтобы быстро ответить пользователю, нужно заранее подготовить весь ответ или хотя бы содержательную часть. Каждую ночь кластер на базе нашей распределенной вычислительной системы YAMR агрегирует полученные до вчерашнего дня сигналы, получая готовые к ответу «облака». На момент запроса Локатор может только правильно их совместить. Так терабайты «сырых сигналов» сжимались до 1,5-2 ГБ готовых ответов, которые легко сохраняются в памяти. И подготовка ответа почти всегда укладывается в 1 мс, а каждый сервер в кластере выдерживает 10 тысяч RPS.

А чтобы продолжительность суточного расчета не росла линейно с ростом истории сигналов GPS, мы добились «аддитивности» облаков. Теперь достаточно хранить всего несколько показателей для каждого облака, и не нужно каждый день заново обрабатывать всю старую историю.

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

Аналоги

Не только у Яндекса есть сервисы определения местоположения без GPS, как мы уже говорили. Разработчики могут обратиться к коммерческому провайдеру (например, Altergeo в России и Skyhook Wireless в мире) или использовать API мобильной платформы или браузера.

Вообще собрать такую ​​базу можно тремя способами:

  • ездить по интересующим городам на машине, сканируя сети, а потом периодически объезжать заново для обновления базы
  • создать массовое мобильное приложение (для например, Яндекс.Карты)
  • создать мобильную платформу (например, iOS или Android)

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

Правда, не всегда может выбирать разработчик. В iOS и WindowsMobile приложение может использовать только функции определения местоположения, встроенные в операционную систему. В приложении нет текущей базовой станции и/или списка сетей WiFi, кроме текущей.

Другая ситуация с веб-сервисами. Все современные браузеры имеют встроенный API геолокации. А меняя браузер, пользователь меняет геолокатор. Firefox и Google Chrome используют реализацию Google, Safari использует Apple, IE использует Microsoft. Наш Локатор работает в Яндекс браузере.

6 лучших GPS-приложений для поиска и отслеживания семьи и друзей

Вычисления

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

GPS-приложение Glympse

Glympse — это приложение, предназначенное для обмена данными о местоположении. Приложение стало очень успешным в Google Play. Поскольку это одно из приложений, специально разработанных для этой цели, вы можете рассчитывать на отличный опыт, если хотите поделиться местоположением с друзьями и семьей. Одним из самых больших плюсов этого приложения является то, что его функция отслеживания не требует, чтобы отслеживающее лицо загружало приложение. Поэтому, если вы хотите срочно поделиться своим местоположением с кем-либо, вы можете просто отправить им ссылку, и они смогут отслеживать ваше местоположение. Им не нужно ничего скачивать. Приложение автоматически отключает обмен данными о местоположении по истечении заданного периода времени. Это делается для того, чтобы ваше местоположение не подвергалось воздействию нежелательных людей или в течение нежелательных периодов времени.

Geo Tracker 

Geo Tracker – еще одно отличное приложение для GPS-слежения для Android, которое вам следует рассмотреть. И хотя оно работает в любой среде, приложение в основном предназначено для работы в дикой местности. Приложение устанавливает ваше местоположение на карте. Он также показывает вашу скорость, высоту и даже наклон склона, что полезно для туристов и альпинистов. Треки можно сохранять в автономном режиме для последующего использования или импортировать в другое приложение, такое как Google Earth и Ozi Explorer, используя форматы GPX и KML. Он также поддерживает карты Яндекса для местоположений, в которых карты доступны. Это означает, что Яндекс добавил больше полезных функций для маркировки местоположения. Приложение также поддерживает регулярный обмен местоположением с друзьями и семьей в любом месте.

Карты Google

Карты Google — наиболее широко используемое навигационное приложение для Android. Это потому, что он исходит от Google, компании, разработавшей Android, и предустановлен почти на каждом Android-устройстве. Удобство использования и надежность Google Maps также являются одной из причин, по которой люди не пробуют другие приложения GPS. Среди многих функций, предлагаемых приложением, есть обмен данными о местоположении. Он работает очень хорошо и полезен во многих сценариях. Например, группа друзей или коллег, которые где-то встречаются, может поделиться своим местоположением, чтобы узнать, где находятся их друзья. Существует также еще одна функция под названием «Семейная группа Google». Добавление участников в эту группу (например, ваших детей) даст вам возможность отслеживать их местоположение. Это полезно для обеспечения безопасности ваших детей в любое время.

GPS-приложение Geozilla

Семейный GPS-локатор Geozilla — еще одно отличное приложение для обмена данными о местоположении. Приложение создано для умного обмена информацией о местоположении, чтобы сэкономить заряд батареи телефона. Когда вы делитесь своим местоположением с кем-либо, Geozilla обновляет ваше местоположение только тогда, когда изменение расстояния превышает определенный порог. Это означает, что приложение будет потреблять меньше энергии, поскольку ему не нужно постоянно обновлять ваше местоположение. Еще одна замечательная функция — функция оповещений, которая уведомляет вас, когда член вашей семьи или друг достигает заранее определенного пункта назначения. Приложение также сохраняет историю вашего местоположения за целую неделю. Кроме того, вы можете назначать задачи на основе местоположения участникам вашей группы. Поэтому, когда участник достигает определенного места, приложение уведомляет его о том, что ему нужно выполнить определенную задачу.

Family Locator

Как следует из названия, Family Locator — это GPS-приложение для Android, предназначенное для обмена данными о местоположении между членами семьи. Что хорошо в этом приложении, так это то, что оно позволяет всем членам семьи присоединиться, а затем они могут просматривать местоположение друг друга в режиме реального времени через приложение в любой момент. Это может работать для детей, но также может работать для семей, которым нужно что-то, что работает именно так, чтобы все участники знали свое местоположение в любое время. Кроме того, приложение предлагает встроенную службу обмена сообщениями для связи с другими членами семьи. Приложение также имеет функцию SOS, которая представляет собой простую кнопку, которая после нажатия сообщает местонахождение ребенка или члена семьи другим членам на карте.

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

Приложение Life360 GPS

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *