Клуб API Карт

Почему не отображается имя балуна?

N7K
18 марта 2012, 14:00



YMaps.jQuery(function () {

map = new YMaps.Map(document.getElementById("YMapsID"));
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 4);

// кнопки и шкала масштаба располагаем как хотим
map.addControl(new YMaps.Zoom(),
new YMaps.ControlPosition(
YMaps.ControlPosition.TOP_LEFT, // в какой угол поставить
new YMaps.Size (5, 5) // сколько от него отступ в пикселах (x, y)
)
);

// Включаем масштабирование скроллингом мыши
map.enableScrollZoom();

// миникарта
map.addControl(new YMaps.MiniMap(),
new YMaps.ControlPosition(
YMaps.ControlPosition.BOTTOM_RIGHT,
new YMaps.Size (5, 5)
)
);

// выбор типа карты
map.addControl(new YMaps.TypeControl());

// линейка с расстоянием
map.addControl(new YMaps.ScaleLine(),
new YMaps.ControlPosition(
YMaps.ControlPosition.BOTTOM_LEFT,
new YMaps.Size (5, 20)
)
);



// Добавляем метку в координаты, полученные по указанному адресу


// Создаем собственную метку
var s = new YMaps.Style(); // Создаем стиль
s.iconStyle = new YMaps.IconStyle(); // Создает стиль значка метки
s.iconStyle.offset = new YMaps.Point(-10, -35); // Сдвиг
s.iconStyle.href = "template/g3c/image/g3cformap.png"; // Указываем путь к картинке
s.iconStyle.size = new YMaps.Point(35, 35); // Размеры картинки
var tableOfValues = [["Москва Москва ул Краснодарская 35", "gOFREe"], [" Москва Бакинская 19", "Vils"], ["Киров Мира 12а", "zulus"], [" Санкт-Петербург богатырский 58 3", "Gabriel"], [" Москва Дмитриевского, 7", "-=FLASH=-"], [" Москва Коровинское ш. д.7 корп.3", "rihter"], ["Санкт-Петербург Санкт-Петербург Гражданский 19", "esvaf"], ["Новосокольники ленинградская д 15", "kucheri"], [" Москва Москва, ул Ставропольская д 36", "Tatisha"], ["Пенза Московская 72", "cbcom"], ["Орел Орел 2-я пушкарная д.5", "san4es"], ["Рязань 3 Новопавловский проезд дом 4", "LyustR"], ["Шарья адмирала виноградова 13", "milsdar"], ["Железнодорожный Носовихинское шоссе 1", "xxxxxxxxx26"], ["Санкт-Петербург Школьная", "KICKER26"], ["Приозерск ул. Ленинградская д.24", "alleop"], ["Санкт-Петербург В.Ш. 25", "Alsik"], ["Санкт-Петербург Шуваловский проспект дом 61 корпус2", "VictorRed"], ["Москва Затонная 9", "smokin"], ["Каменск-Шахтинский красная 7", "golfik "], ["Нижнекамск Химиков 94-143", " DustOfWheels"], ["Химки Проспект Мельникова д.10", "Fred"], ["Санкт-Петербург ул. Турку", "kallega"], ["Санкт-Петербург Кантемировская д.35", "Basil_88"], ["Петрозаводск Ленинградская 20", "Brudroz"]];
for (var i=0; i < tableOfValues.length; i++) {
var geocoder = new YMaps.Geocoder(tableOfValues[i][0]);
YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
var geoCoords = geocoder.get(0).getGeoPoint(),
geoPlacemark = new YMaps.Placemark(geoCoords, {
style: s // Указываем какой стиль применить
});geoPlacemark.name = tableOfValues[i][1];
map.addOverlay(geoPlacemark);
});
}
});

3 комментария
Подписаться на комментарии к посту
Вы очевидно недавно с javascript
не надо знать АПИ чтобы понять что "i" внутри обработчика Load всегда будет равна
tableOfValues.length
YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
     var geoCoords = geocoder.get(0).getGeoPoint(),
     geoPlacemark = new YMaps.Placemark(geoCoords, {
            style: s // Указываем какой стиль применить
    });
    geoPlacemark.name = tableOfValues[i][1];
    map.addOverlay(geoPlacemark);
});
Вы правы. Не подскажите какое может быть решение вывода данных из массива? И еще почему то, он не все метки ставит.

 

Вы правы. Не подскажите какое может быть решение вывода данных из массива?

Решение - обернуть обработчик события в замыкание

(function (index) {YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {     var geoCoords = geocoder.get(0).getGeoPoint(),     geoPlacemark = new YMaps.Placemark(geoCoords, {             style: s // Указываем какой стиль применить    });    geoPlacemark.name = tableOfValues[index][1];    map.addOverlay(geoPlacemark); });}(i));

 

 И еще почему то, он не все метки ставит.

Ну скажем геокодирование большого списка адресов на клиенте - вообще плохой вариант (большое количество запросов, траффик, медленно, etc),

Если адреса одни и теже - лучше прогекодировать их один раз на сервере и сложить координаты в БД вместе с адресом. Затем создавать метки уже по координатам - что будет сильно быстрее и проще

Прочитайте статью "Получение координат для списка адресов"

 

Если все-таки необходимо геокодировать на клиенте - лучше воспользоваться этим примером