Клуб API Карт

Мульти геокодирование

Борис Моисеев
15 августа 2014, 16:21

Уважаемые, подскажите опжалуйста.

Есть массив адресов, порядок от 1 до 50, которые меняется конечно же в зависимости от выборки из БД, по которым требуется опеределить координаты, точнее требуется расставить метки, с подписями, ну там дальше обработки всякие, не суть.

 

Суть в том - как обработать весь этот список разом?

 

Прочитав документацию определил два способа

1. npm install multi-geocoder

2.MultiGeocoder

 

1. не подошел, потому как я так и не понял что за npm и как его устанавливать. поисковики показывает ссылки с людьми у которых убунты всякие...

2. второй у меня не заработал, ругнулся с ошибкой ListCollection() - не определен , тут я и сел...

 

Подскажите, есть ли еще варианты?

Либо как сделать чтобы работал один из описанных методов. Заранее благодарю.

у меня все крутится на IIS 6.0 (это в контексте варианта с npm)

3 комментария
Подписаться на комментарии к посту
Всеволод Шмыров
15 августа 2014, 19:13
Добрый вечер.
Первый вариант описывает как совершить обращение к геокодеру при помощи node.js. Этот вариант используется для единичного обращения за большим кол-вом адресов. После обращения рекомендуется закешировать где-нибудь полученные координаты и работать уже с ними. Я точно не знаю, но вроде бы есть возможность установить node.js на IIS http://technet.microsoft.com/ru-ru/jj134113.aspx
Есть ли пример кода второго варианта?

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

Геокодирование доступно по протоколу http.

Напишите на чем удобно вам код, который будет ходить по http, получать результат и сохранит его в вашу БД.

 

1. Node.js и npm работают на windows

2. Этот вариант мы не рекомендуем, как и любое другое множественное гекодирование на клиенте. (ошибка возникает оттого что вы не подключили файл list-collection.js)

Борис Моисеев
19 августа 2014, 07:03

Вообще задача как таковая решена c geocode, суть в том что геокодирование на клиенте в целом не вызовет затруднений, и вообще сойдет на нет, так как все распознаные точки адресов я планирую заполнить координатами в БД - это одна из задач. И далее появление точек адресов без координат будет носить единичный характер.

В общем проблема одна и скорее всего связана с непониманием работы асинхронного метода и создание объектов на основании geocode.

Дело в том,что в цикле при создании объекта метки на основе геокодирования, не удается работать с объектом, проставить ему текст в балун например, точнее он проставляется, но на все точки последний из цикла 

myPdArray = массив {text:, pd: } где text описание в балун, pd адрес.

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

      var pnt = myPdArray[i];

        ymaps.geocode(pnt.pd, { results: 1 }).then(function(res){

        if(res.geoObjects.get(0))

        {

         clusterer.add(new ymaps.Placemark(res.geoObjects.get(0).geometry.getCoordinates(),{balloonContentBody: 'Клиент: ' + pnt.text + ''},{preset: 'twirl#darkgreenIcon'}));

        } 

        else 

         {

             log.innerHTML ='Адрес не определен: ' + pnt.pd + '
' + log.innerHTML;

       }

       });

 

      };  

То есть цикл пробегает все строки не дожидаясь обработки запросов, а их например 10(условно). И записывается последний текст на все точки из цикла {balloonContentBody: 'Клиент: ' + pnt.text + ''}.

По мимо того, что нужно обработать эту метку на предмет понимания пользователем, что это за метка. Мне нужно соответсвенно получить обратный массив {мой идентификтаор: 1111, coords:координаты геокодирования} чтобы сохранить их в БД.


Вот такие задачки.

Натолкните на мысль пожалуйста.