Определение адреса клика на карте с помощью обратного геокодирования

Open in CodeSandbox

В примере при клике на карте появляется метка с адресом точки, в которой произошло нажатие.

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

  <!DOCTYPE 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="event_reverse_geocode.js" type="text/javascript"></script>
    <style type="text/css">
        html, body {
            width: 100%;
            height: 95%;
            margin: 0;
            padding: 0;
            font-family: Arial;
            font-size: 14px;
        }
        #map {
            width: 100%;
            height: 95%;
        }
        .header {
            padding: 5px;
        }
    </style>
</head>
<body>
<p class="header">Кликните по карте, чтобы узнать адрес</p>
<div id="map"></div>
</body>
</html>
ymaps.ready(init);

function init() {
    var myPlacemark,
        myMap = new ymaps.Map(
            "map",
            {
                center: [55.753994, 37.622093],
                zoom: 9,
            },
            {
                searchControlProvider: "yandex#search",
            }
        );

    // Слушаем клик на карте.
    myMap.events.add("click", function (e) {
        var coords = e.get("coords");

        // Если метка уже создана – просто передвигаем ее.
        if (myPlacemark) {
            myPlacemark.geometry.setCoordinates(coords);
        }
        // Если нет – создаем.
        else {
            myPlacemark = createPlacemark(coords);
            myMap.geoObjects.add(myPlacemark);
            // Слушаем событие окончания перетаскивания на метке.
            myPlacemark.events.add("dragend", function () {
                getAddress(myPlacemark.geometry.getCoordinates());
            });
        }
        getAddress(coords);
    });

    // Создание метки.
    function createPlacemark(coords) {
        return new ymaps.Placemark(
            coords,
            {
                iconCaption: "поиск...",
            },
            {
                preset: "islands#violetDotIconWithCaption",
                draggable: true,
            }
        );
    }

    // Определяем адрес по координатам (обратное геокодирование).
    function getAddress(coords) {
        myPlacemark.properties.set("iconCaption", "поиск...");
        ymaps.geocode(coords).then(function (res) {
            var firstGeoObject = res.geoObjects.get(0);

            myPlacemark.properties.set({
                // Формируем строку с данными об объекте.
                iconCaption: [
                    // Название населенного пункта или вышестоящее административно-территориальное образование.
                    firstGeoObject.getLocalities().length
                        ? firstGeoObject.getLocalities()
                        : firstGeoObject.getAdministrativeAreas(),
                    // Получаем путь до топонима, если метод вернул null, запрашиваем наименование здания.
                    firstGeoObject.getThoroughfare() ||
                        firstGeoObject.getPremise(),
                ]
                    .filter(Boolean)
                    .join(", "),
                // В качестве контента балуна задаем строку с адресом объекта.
                balloonContent: firstGeoObject.getAddressLine(),
            });
        });
    }
}