Определение местоположения пользователя

API позволяет отмечать на карте местоположение пользователя. Это может быть полезно, например, когда нужно построить маршрут от текущего местоположения пользователя или показать ему объекты, расположенные поблизости (геотаргетинг).

Определение местоположения пользователя называется геолокацией. API поддерживает два способа геолокации — с помощью браузерного Geolocation API, либо по ip-адресу. Подробнее про способы геолокации.

Как определить местоположение пользователя

Для получения текущего местоположения пользователя используется метод geolocation.get(). Запрос обрабатывается асинхронно. В случае успешной обработки запроса ответ содержит коллекцию GeoObjectCollection с одной меткой, соответствующей местоположению пользователя. В противном случае возвращается сообщение об ошибке.

var location = ymaps.geolocation.get();

// Асинхронная обработка ответа.
location.then(
  function(result) {
    // Добавление местоположения на карту.
    myMap.geoObjects.add(result.geoObjects)
  },
  function(err) {
    console.log('Ошибка: ' + err)
  }
);

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

Внимание. Запросы на обратное геокодирование тарифицируются. Чтобы отключить обратное геокодирование, задайте для опции autoReverseGeocode значение false.

Способы геолокации

В API доступно два способа определения местоположения пользователя:
  • По ip-адресу

    Геолокация выполняется согласно ip-адресу по данным Яндекса. Использование ip-адреса не гарантирует высокую точность данных. Как правило, можно определить местоположение с точностью до города или региона. Этот способ геолокации не требует взаимодействия с пользователем.

  • По данным Geolocation API

    Геолокация выполняется с помощью Geolocation API. Это метод предоставляет высокую точность (до дома), но пользователь должен явно разрешить веб-странице получить сведения о его местоположении.

    Примечание. В Google Chrome и браузерах на основе Chromium геолокация возможна только при работе по протоколу HTTPS.
Способ геолокации можно выбрать с помощью опции provider. По умолчанию API использует значение auto, то есть выбирает оптимальный способ геолокации автоматически. Чтобы явно задать способ, укажите для опции значение yandex или browser.
// В примере задается способ геолокации с помощью браузера.
var location = geolocation.get({
        provider: 'browser'
    });

location.then{
//     ...
};
Открыть пример в песочнице

Примеры

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

var location = ymaps.geolocation;
var myMap = new ymaps.Map('map', {
    center: [55.76, 37.64],
    zoom: 10
}, {
    searchControlProvider: 'yandex#search'
});

// Получение местоположения и автоматическое отображение его на карте.
location.get({
        mapStateAutoApply: true
    })
.then(
    function(result) {
        // Получение местоположения пользователя.
        var userAddress = result.geoObjects.get(0).properties.get('text');
        var userCoodinates = result.geoObjects.get(0).geometry.getCoordinates();
        // Пропишем полученный адрес в балуне.
        result.geoObjects.get(0).properties.set({
            balloonContentBody: 'Адрес: ' + userAddress +
                                '<br/>Координаты:' + userCoodinates
    });
        myMap.geoObjects.add(result.geoObjects)
    },
    function(err) {
        console.log('Ошибка: ' + err)
    }
);

Дополнительные примеры доступны в песочнице: