Определение адреса клика на карте с помощью обратного геокодирования
В примере при клике на карте появляется метка с адресом точки, в которой произошло нажатие.
Здесь слушаются два события: клик на карте и перетаскивания метки. При наступлении одного из них происходит обращение к геокодеру с координатами точки, в которой произошло событие. Полученный адрес будет записан в качестве содержимого метки.
index.html
event_reverse_geocode.js
<!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&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(),
});
});
}
}