Как в Яндекс.Картах получить полный адрес по координатам

Если у вас есть 2 координаты, то рассмотрим вариант получения полного адреса в текстовом виде.

Полный адрес по координатам Яндекс API

Если вы уже получили координаты приступим к нашей задаче:

ymaps.ready(function(){
	var myReverseGeocoder = ymaps.geocode([coordinates[0],coordinates[1]]);
		myReverseGeocoder.then(function (res) {
		   console.log(res.geoObjects.get(0).properties.get('text'));
		});
});

Обратите внимание на параметры coordinates[0] и coordinates[1].

Где это может пригодится? Например, в оформлении заказа, когда кликаем по карте, происходит событие добавления точки placeMark.events.add (пример приведен из компонента оформления 1С-Битрикс). Стандартно он выглядит так:

if (this.propsMap.geoObjects.getLength() === 0)
{
	placeMark = new ymaps.Placemark([coordinates[0], coordinates[1]], {}, {
		draggable:true,
		preset: 'islands#redDotIcon'
	});
	placeMark.events.add(['parentchange', 'geometrychange'], function() {
		var orderDesc = BX('orderDescription'),
			coordinates = placeMark.geometry.getCoordinates(),
			ind, before, after, string;

		if (orderDesc)
		{
			ind = orderDesc.value.indexOf(BX.message('SOA_MAP_COORDS') + ':');
			if (ind === -1)
			{
				orderDesc.value = BX.message('SOA_MAP_COORDS') + ': ' + coordinates[0] + ', '
					+ coordinates[1] + '\r\n' + orderDesc.value;
			}
			else
			{
				string = BX.message('SOA_MAP_COORDS') + ': ' + coordinates[0] + ', ' + coordinates[1];
				before = orderDesc.value.substring(0, ind);
				after = orderDesc.value.substring(ind + string.length);
				orderDesc.value = before + string + after;
			}
		}
	});

	this.propsMap.geoObjects.add(placeMark);
}

Немного перепишем код скрипта оформления заказа:

placeMark.events.add(['parentchange', 'geometrychange'], function() {
	var orderDesc = BX('orderDescription'),
		coordinates = placeMark.geometry.getCoordinates(),
		ind, before, after, string;

		//ymaps.ready(function(){
			var myReverseGeocoder = ymaps.geocode([coordinates[0],coordinates[1]]);
				myReverseGeocoder.then(function (res) {
					console.log(res.geoObjects.get(0).properties.get('text'));
				});
		//});
});

В консоле видим полный адрес:
“Россия, Московская область, городской округ Щёлково, садовые участки”.
Немного кастомизировав компонент оформления заказа битрикса, можем добиться попадания полного адреса в поле “Адрес доставки”.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

2 коментаря

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

    Пользоваться API Яндекс.Карт можно бесплатно, если соблюдать условия.Все данные должны отображаться на карте, размещённой на общедоступном сайте или в приложении. Сохранять или изменять данные нельзя, но можно кэшировать запросы к геокодеру и маршрутизатору на срок до 30 дней.

    На сколько я понял согласно пользовательскому соглашение, такое использование апи яндекса в оформлении заказа запрещено. Не могли бы вы подсказать, правильно ли я все понял? И если да, то какие видите альтернативы?

    1. Да, там действительно постоянно меняют условия использования API, как, к примеру, заблокировали доступ к отзывам на Яндекс.Маркете. Что касается карт и работы с ними, то после создания ключа в кабинете разработчика, вы всё таки сможете отправлять запросы.

Залишити відповідь