Клуб API Карт

Запутался с геокодером

danies
6 декабря 2009, 17:27

На странице с регионом вывожу карту этого региона:

<script src="http://api-maps.yandex.ru/1.1/index.xml?key=APunF0sBAAAAu7lmPAIAgoBNYq0CPjkYXpmvTWZhT5_GCYEAAAAAAAAAAACKh3Smw1L9gpD_Hf9Q26IwQgw30g==" type="text/javascript"></script>
 <script type="text/javascript">
 window.onload = function () {
 var map = new YMaps.Map(document.getElementById("YMaps1"));
 map.addControl(new YMaps.ToolBar());
 map.addControl(new YMaps.Zoom());
 map.addControl(new YMaps.MiniMap());
 map.addControl(new YMaps.TypeControl());
 map.addControl(new YMaps.ScaleLine());
 var gc = new YMaps.Geocoder("$CAT_NAME$");
 YMaps.Events.observe(gc, gc.Events.Load, function () {
 if (this.length()) {
 map.setBounds(this.get(0).getBounds());
 map.addOverlay(new YMaps.Geocoder("все адреса", {results: $NUM_ENTRIES$, boundedBy: map.getBounds()}));
 
 }
 });
 }

 Где $CAT_NAME$ - название региона, те.е карта сама показывает регион.

Теперь мне нужно вывести на этой карте n штук балунов, адрес каждого из которых находится в n-м (количестве штук) div-ов с одинаковыми id, например все адреса должны вытаскиваться из 5 штук <div id="idid"> и чтобы из каждого балуна вела ссылка на соответсвующий id


Страниц таких много.

Код карты нужен универсальный.


Помогите пожалуйста

6 комментариев
Подписаться на комментарии к посту
ID у html должен быть уникальным в пределах документа (см. Спецификация HTML 4.01).

Можно для этих целей воспользоваться атрибутом "class". Создадим HTML-код со списком адресов и одинаковым классом (например, "address"):
Москва
Санкт-Петербург
Нижний Новгород
Екатеринбург
Ростов

Добавить их на карту можно так:
YMaps.jQuery(function () {
    var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 4);
    
    // Проходим по списку адресов
    YMaps.jQuery(".address").each(function () {
    
        // Геокодируем адрес
        var geocoder = new YMaps.Geocoder(YMaps.jQuery(this).html(), {results: 1});
        
        // При окончании геокодирования производим дополнительные действия
        YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
        
            // Получаем первый результат геокодирования
            var geoResult = geocoder.get(0);
            
            // На щелчок по диву с соответствующим адресом - открываем балун
            YMaps.jQuery(this).bind("click", function () {
                geoResult.openBalloon();
            });
            
            // Добавляем результат на карту
            map.addOverlay(geoResult);
        }, this);
    });
});

Однако, я бы посоветовал геокодиривать список адресов заранее и закэшировать их координаты. Во-первых, тогда будут быстрее отображаться метки на карте (не будет идти дополнительных запросов к серверу Яндекса) и, во-вторых, по ПС у нас существует ограничение на геокодирование: 25000 запросов в сутки (если Ваш проект посещает достаточное количество пользователей, то этот лимит может быстро ичерпаться).
Спасибо все работает.
выводятся нужные объекты.
Но я теперь не могу инициализировать карту по результатам геокодирования.
Раньше я делал так:
var gc = new YMaps.Geocoder("Нужный город");
А теперь оно не работает. Подскажите пожалуйста, как это прицепить.
Прописывать геоточки вручную нецеллессобразно, тк.к я не знаю, какие в итоге города будут, тк посетители сами указывают свой город.
 
YMaps.jQuery(function () {
 var map = new YMaps.Map(YMaps.jQuery("#YMaps1")[0]);
             var gc = new YMaps.Geocoder("Москва");
            YMaps.Events.observe(gc, gc.Events.Load, function () {
                if (this.length()) {
                    map.setBounds(this.get(0).getBounds());
        
 
 // Проходим по списку адресов
 YMaps.jQuery(".address").each(function () {
 
 // Геокодируем адрес
 var geocoder = new YMaps.Geocoder(YMaps.jQuery(this).html(), {results: 1});
 
 // При окончании геокодирования производим дополнительные действия
 YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
 
 // Получаем первый результат геокодирования
 var geoResult = geocoder.get(0);
 
 // На щелчок по диву с соответствующим адресом - открываем балун
 YMaps.jQuery(this).bind("click", function () {
 geoResult.openBalloon();
 });
 
 // Добавляем результат на карту
 map.addOverlay(geoResult);
 }, this);
 });
});
 так карта не работает. наверное я не туда что-то вставил.
Помогите пожалуйста, все еще не могу разобраться, как заставить карту инициироватся по заданному городу и при этом чтобы выводились нужные объекты. (вернее с объектами-то уже помогли, теперь нужно заставить карту работать)

Дайте ссылку на страницу.