Поиск по координатам — обратное геокодирование

Open in CodeSandbox

API позволяет определять координаты объекта по его названию и название объекта по его координатам (прямое и обратное геокодирование).

Оба вида геокодирования производятся с помощью функции geocode. Результат, возвращаемый этой функцией, может быть сразу размещён на карте.

В данном примере используется обратное геокодирование: по заданным координатам производится поиск ближайших станций метро.

<!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="reverse_geocode.js" type="text/javascript"></script>
        <style type="text/css">
            html,
            body,
            #map {
                width: 100%;
                height: 100%;
                margin: 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
        <div id="map" />
    </body>
</html>
ymaps.ready(init);

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

    // Поиск станций метро.
    ymaps
        .geocode(myMap.getCenter(), {
            /**
             * Опции запроса
             * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/geocode.xml
             */
            // Ищем только станции метро.
            kind: "metro",
            // Запрашиваем не более 20 результатов.
            results: 20,
        })
        .then(function (res) {
            // Задаем изображение для иконок меток.
            res.geoObjects.options.set("preset", "islands#redCircleIcon");
            res.geoObjects.events
                // При наведении на метку показываем хинт с названием станции метро.
                .add("mouseenter", function (event) {
                    var geoObject = event.get("target");
                    myMap.hint.open(
                        geoObject.geometry.getCoordinates(),
                        geoObject.getPremise()
                    );
                })
                // Скрываем хинт при выходе курсора за пределы метки.
                .add("mouseleave", function (event) {
                    myMap.hint.close(true);
                });
            // Добавляем коллекцию найденных геообъектов на карту.
            myMap.geoObjects.add(res.geoObjects);
            // Масштабируем карту на область видимости коллекции.
            myMap.setBounds(res.geoObjects.getBounds());
        });
}