Клуб API Карт

Обойти асинхронное геокодирование!

marj-erokhova
11 июня 2015, 09:39

Здравствуйте!

Вопрос наверное уже был, найти не могу:( Прошу понять и простить.

 

Тривиальная задача - создать карту с объектами.

Объекты беру через API Портала открытых данных.

Там координат объектов нет,а  есть почтовые адреса, следовательно пользоваться надо геокодированием.

Пишу:

 

//идем по массиву объектов полученых с Портала

for (i = 0; i < objects.length; i++)
    {

//Составляю запрос по почтовому адресу
        response = 'Вологодская область, ' + objects[i][3];   
        ymaps.geocode(response, {results: 1}).then(
            function (results) {
                var res = results.geoObjects.get(0);     

           //Хочу добавить метку с данными по объекту, взятыми из массива
                placemark = new ymaps.Placemark(res.geometry.getCoordinates(), {
                    balloonContentHeader:objects[i][1],
                    balloonContentBody: "dfhf",
                    balloonContentFooter:objects[i][3]
                }, {
                     preset: 'islands#nightDotIcon'
                });
                clusterer.add(placemark);       
            },
            function (err)
            {
            }
        );
    }

 

Но в связи с тем что геокодирование является асинхронным, в метку с результатми геокодера я не могу написать ифнормацию об объекте, взятую из массива, те objects[i][3] уже нет.

 

Как быть? Направьте на путь истинный?

(п.с. БД нет, и не должно быть по постановке задачи, написать в массив координаты я не против, но вопрос все арвно остается, что как обратится к НУЖНОМУ эелементу, если геокодер асинхронен)

6 комментариев
Подписаться на комментарии к посту
Не надо ходить в цикле напрямую в геокодер с каждого клиента.
Совсем скоро за это будут банить.
Нужно ходить в геокодер через свой сервер и кэшировать на нем запросы на месяц

Нууу я понимаю что не дело творю. Ппрочиатала про множественное геокодирование, все ок.

Но как привезать результаты к конкретному объекту, я во этого не нашла...

Те если мне не надо просто разместить их на карте.... мне надо координаты потом в балун то что хочу  итд. "пошлите" меня куд анибудь)

 

Нужно ходить в геокодер через свой сервер и кэшировать на нем запросы на месяц.

На секунду, каждый ymaps.geocode это http-запрос.

Склейте все свои адреса через тильду "~" и отправьте один запрос на свой сервер , а с него уже берите из кэша (или геокодируйте с сохранением в кэш, если такой адрес еще не запрашивали)

ухххх...

Будем пробовать!

Здравствуйте еще раз!

Хотела бы спросить еще раз.

На локальном серверер ставлю в папку с проектом с помощью нужно команды multi-geocoder.

Затем если подключаю пример из пакета то браузер в консоли пишет, что не знает require/

А если всях руковдств "npm для чайников" запускаю пример с помощью node index.js то выдает ошибки в файле mode.js.

 

Я понимаю что разжовывать всем все просто не реально, но возможно есть минутка чтобы направить  в нужное русло?

 

 

Также хотелось бы уточнить, что при реализации моего проекта данные берутся  сдругого ресурса(но на этом ресурсе они обновляются, те не статичны). В связи с этим хоетлось бы уточнить точно ли нужно все таки использовать серверное геокодирование?

Здравствуйте!

очень жду вашего комментария:

 

marj-erokhova

24 июня, 11:10

Здравствуйте еще раз!

Хотела бы спросить еще раз.

На локальном серверер ставлю в папку с проектом с помощью нужно команды multi-geocoder.

Затем если подключаю пример из пакета то браузер в консоли пишет, что не знает require/

А если всях руковдств "npm для чайников" запускаю пример с помощью node index.js то выдает ошибки в файле mode.js.

 

Я понимаю что разжовывать всем все просто не реально, но возможно есть минутка чтобы направить  в нужное русло?

 

 

Также хотелось бы уточнить, что при реализации моего проекта данные берутся  сдругого ресурса(но на этом ресурсе они обновляются, те не статичны). В связи с этим хоетлось бы уточнить точно ли нужно все таки использовать серверное геокодирование?