Как передать свой параметр при множественном геокодировнии Яндекс?

Есть список адресов в массиве с дополнительным полем status. Необходимо на сайте вывести карту с пометками и флажками определенного цвета в зависимости от статуса. Через геокодирование координаты получаю, на карту все выводится через коллекцию меток. А как можно передать внутрь geocoder.then(); параметр уникальный для каждой итерации?
Попытался через увеличение глобальной переменной а получать изнутри функции текущий элемент массива, но получается несоответствие координат и меток с флажками.

Пример кода:
// Создаем коллекцию.
        myAdressCollection = new ymaps.GeoObjectCollection();
        // Создаем массив с данными.

		myAdressPoints = [
			{ adress: 'Сыктывкар, ул.Новый Север, 19/1', status : '1'},
			{ adress: 'Сыктывкар, ул.Пальшина, 16', status : '1'},
			{ adress: 'Сыктывкар, ул.Пионерская, 35', status : '1'},
			{ adress: 'Сыктывкар, с.Выльгорт, ул.Домны Каликовой, 107/1а', status : '3'},
			{ adress: 'Сыктывкар, ул.Шудалун, 38', status : '1'},
			{ adress: 'Сыктывкар, ул.Ольховая, 35', status : '1'}
        ];



 // Заполняем коллекцию данными.
    for (var i = 0, l = myAdressPoints.length; i < l; i++) {
        var point = myAdressPoints[i];
		geocoder = ymaps.geocode(point.adress);

geocoder.then(
	function (res) {
	       var coordinates = res.geoObjects.get(0).geometry.getCoordinates();
		addr = myAdressPoints[a].adress;
		m = myAdressPoints[a].status;
		if (m == '1'){metka='/single-window-service/tselevaya-model-podklyuchenie-k-setyam-gazoraspredeleniya/red_flag.png'};
		if (m == '2'){metka='/single-window-service/tselevaya-model-podklyuchenie-k-setyam-gazoraspredeleniya/green_flag.png'};
		if (m == '3'){metka='/single-window-service/tselevaya-model-podklyuchenie-k-setyam-gazoraspredeleniya/blue_flag.png'};


		console.log("Координаты:", a);
            // Добавление метки (Placemark) на карту
	      myAdressCollection.add(new ymaps.Placemark(
	          coordinates, {
				  'hintContent': addr -Сюда нужно вставить адрес из массива
	          }, {
					'iconLayout': 'default#image',
				  'iconImageHref': '/single-window-service/tselevaya-model-podklyuchenie-k-setyam-gazoraspredeleniya/red_flag.png',
            		'iconImageSize': [20, 30],
            		'iconImageOffset': [-5, -38]
	          }
	      ));
		a++;
	  }
	);
    }
    // Добавляем коллекцию меток на карту.
	map.geoObjects.add(myAdressCollection);
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
У тебя есть исходный адрес как в твоём массиве, так и в ответе яндекса. По нему сопоставляешь.
Ответ написан
@Afdenis Автор вопроса
Проблема решилась следующим способом:
Нужно заменить for (var i = 0 на for (let i = 0. Дело в асинхронности.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы