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

Open in CodeSandbox

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

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

При вызове данного метода браузер пытается определить географическое положение пользователя. В случае успеха результат записывается в поле карты geoObjects, в противном случае возникает сообщение об ошибке.

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

<!DOCTYPE html>
<html>
    <head>
        <title>Создание карты с местоположением пользователя</title>
        <meta
            http-equiv="Content-Type"
            content="text/html; charset=utf-8"
        />
        <!--
        Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
        Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
    -->
        <script
            src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=<ваш API-ключ>"
            type="text/javascript"
        ></script>
        <script
            src="https://yandex.st/jquery/2.2.3/jquery.min.js"
            type="text/javascript"
        ></script>
        <script src="geolocated_map.js" type="text/javascript"></script>
        <style>
            html,
            body,
            #map {
                width: 100%;
                height: 100%;
                padding: 0;
                margin: 0;
            }
        </style>
    </head>
    <body>
        <div id="map"></div>
    </body>
</html>
ymaps.ready(function () {
    var map;
    ymaps.geolocation.get().then(
        function (res) {
            var mapContainer = $("#map"),
                bounds = res.geoObjects.get(0).properties.get("boundedBy"),
                // Рассчитываем видимую область для текущей положения пользователя.
                mapState = ymaps.util.bounds.getCenterAndZoom(bounds, [
                    mapContainer.width(),
                    mapContainer.height(),
                ]);
            createMap(mapState);
        },
        function (e) {
            // Если местоположение невозможно получить, то просто создаем карту.
            createMap({
                center: [55.751574, 37.573856],
                zoom: 2,
            });
        }
    );

    function createMap(state) {
        map = new ymaps.Map("map", state);
    }
});