Клуб API Карт

Значок для метки результата геокодера

IanDarken
2 ноября 2010, 10:10

Возможно, я что-то делаю не так, но. Мне нужно сменить значок метки, которую вешает YMaps.Geocoder. Код такой

s = new YMaps.Style();
s.iconStyle = new YMaps.IconStyle();
s.iconStyle.href = "/img/oil.png";
s.iconStyle.size = new YMaps.Point(18, 29);
s.iconStyle.offset = new YMaps.Point(-9, -29);
map.removeOverlay(geoResult);

    geoResult = new YMaps.Geocoder("Москва, Дмитровское шоссе 157", {style: s, results: 1, boundedBy: map.getBounds()});
    geoResult.style=s;
                map.addOverlay(geoResult);

Но стиль метки все равно не меняется. Где, кроме ДНК, у меня ошибка?

8 комментариев
Подписаться на комментарии к посту
Вы все делали верно, кроме одной строчки:

geoResult.style=s;

Вы, наверное, сделали по аналогии с полем style у DOM объектов, но в API для присваения стиля у нас есть специальный метод - setStyle(). Таким образом, код будет выглядеть так:

geoResult.setStyle(s);

За более подробной информацией можете обратиться в руководство разработчика:
http://api.yandex.ru/maps/jsapi/doc/dg/concepts/overlay_appearance.xml#styles
Да, все, спасибо огромное )) Я просто ни капли не веб-дизайнер/веб-программист, не дочитал мануалы до конца.
Внимательности не хватило на чуть-чуть ;)
Удачи!
Черт. Еще вопрос. После определения стиля из балуна пропадает то, что там по умолчанию было (адрес, по которому ставилась метка). Пробовал

    var template = new YMaps.Template(
    "Я - $[name|объект]\
    $[description|Информация недоступна]\
    Подробнее http://api.yandex.ru/maps/jsapi/doc/$[metaDataProperty.moreLink]\">здесь");

            s = new YMaps.Style();
            s.iconStyle = new YMaps.IconStyle();
            s.iconStyle.href = "http://everestgroup.ru/img/oil.png";
            s.iconStyle.size = new YMaps.Point(9, 24);
            s.iconStyle.offset = new YMaps.Point(-9, -29);
            s.balloonContentStyle = new YMaps.BalloonContentStyle(template);


                geoResult.name = "Тра-ляляля!";
                geoResult.description = "Тра-ляляля!";

- то есть хотя бы просто пример из мануала - тогда в балуне всегда только "объект" и "информация недоступна", будто полей .name и .descritpion нет. Без определения стиля балуна там просто пустота.
Адрес в виде строки содержится в поле text. Соответственно нужно в шаблоне использовать переменную $[text] для вывода адреса.
Ага, спасибо. Просто в описании YMaps.GeocoderResult написано, что он наследует description и name от одного из родителей. Я вроде явно их задавал, но все равно ноль реакции. Непривычно после delphi )
И тем не менее - есть ли возможность сделать отдельное описание? Просто из таблицы mysql берется куча адресов, и на балунах меток нужно описание, а не только адрес
А для YMaps.GeocodeResult свой шаблон для содержимого балуна, в котором не отображаются поля name и description.

Чтобы вывести в балуне содержимое трех полей, можно создать вот такой шаблон:

var myTemplate = new YMaps.Template('$[name]Адрес: $[text]$[description]');

А потом применить этот шаблон к результату геокодирования:

geoResult.setStyle({
    balloonContentStyle : {
        template : myTemplate
    }
});
И в таком случае куда приписывать name и description? В варианте

geoResult = new YMaps.Geocoder("'.$record['yaadress'].'", {results: 1, boundedBy: map.getBounds()});
geoResult.name="'.$record['name'].'";
geoResult.description="'.$record['info'].'";
geoResult.setStyle({
    balloonContentStyle : {
    template : myTemplate
    };
map.addOverlay(geoResult);';
(myTemplate объявлен)
все так же не работает

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