Клуб API Карт

Как правильно создать PlaceMark к геоточке, полученной от геокодера?

vtk81
1 марта 2010, 15:11

Здравствуйте! Я геокодирою массив адресов points и вывожу на карту метки с соответствующими подписями. Возникла такая проблема: периодически содержимое подписи не соответствует геометке на карте.


        var points = ["ул.Предславинская, 19, Киев","пр-т Победы, 65, Киев","ул.Б.Хмельницкого, 41, Киев","ул.Фрунзе, 104-А, Киев"];
        var names = ["ПЕЧЕРСКИЙ ФИЛИАЛ","ФИЛИАЛ РАСЧЕТНЫЙ ЦЕНТР","КИЕВСКОЕ ГЛАВНОЕ РЕГИОНАЛЬНОЕ УПРАВЛЕНИЕ","Центральное отделение ФИЛИАЛА КИЕВСИТИ"];
        YMaps.jQuery(function () {
            var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
            for (var i = 0, l = points.length; i < l; i++) {
                var geocoder = new YMaps.Geocoder(points[i]);
                var pos = 0;
                YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
                    if (geocoder.length()) {
                        var placemark = new YMaps.Placemark(geocoder.get(0).getGeoPoint());
                        placemark.name = names[pos];
                        placemark.description = points[pos];
                        map.addOverlay(placemark);
                        map.setBounds(geocoder.get(0).getBounds());
                        map.setZoom(10);
                        pos++;
                    }
                });
            }
            map.addControl(new YMaps.Zoom());
        });


Подскажите пожалуйста решение проблемы, заранее благодарен.


3 комментария
Подписаться на комментарии к посту
Геокодер работает асинхронно, а названия у вас "цепляются" по переменной цикла. Отсюда и все проблемы. Решение в принципе можно найти - но у вас изначально задача решается не совсем корректным путем. У вас фиксированные адреса - воспользуйтесь любой утилитой и определите для них координаты - и именно координаты "зашейте" в скрипт. И вставляйте точки в цикле без всякого геокодера. Так всем будет лучше :)
Эх, жаль конечно, что так нельзя. Буду искать другой способ
Спасибо за ответ :)
Множественное геокодирование на JavaScript - это не самый лучший выход. При достаточной посещаемости страницы с картой вы очень легко можете привысить порог в 25000 запросов.

Но если вы все же точно хотите это сделать, то можете посмотреть на пример:
http://api.yandex.ru/maps/jsapi/examples/multiplygeocoding.html