Клуб API Карт

Пытаюсь привязать стили к карте

ezwebru
21 февраля 2011, 18:07

сабж, но ток не получается. ибо сам не программер... помогите, плиз?

<script type="text/javascript">
YMaps.jQuery(function () {
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
var geocoder = new YMaps.Geocoder("Новосибирск, <?php echo ($adr); ?>");
YMaps.Events.observe(geocoder,
geocoder.Events.Load, function (geocoder) {if (geocoder.length())
{map.setBounds(geocoder.get(0).getBounds());}
});

map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.ToolBar());
map.addControl(new YMaps.Zoom());
map.addControl(new YMaps.MiniMap());
map.addControl(new YMaps.ScaleLine());


            // Создание стиля для значка метки
            var s = new YMaps.Style();
            s.iconStyle = new YMaps.IconStyle();
            s.iconStyle.href = "/img/baloon.png";
            s.iconStyle.size = new YMaps.Point(97, 57);
            s.iconStyle.offset = new YMaps.Point(-32, -57);
            // Создание метки и добавление ее на карту
map.addOverlay(geocoder)
// было так (пытался сюда привязать стиль):
// map.addOverlay(geocoder), {style: s};

});
</script>

не получается со стилями, хоть ты тресни... а плодить метки что-то не хоца.

Заранее спасип

19 комментариев
Подписаться на комментарии к посту

вот эта строка ошибочная

map.addOverlay(geocoder), {style: s};

причем даже с точки зрения JavaScript не говоря уже об логике АПИ

Посмотрите примеры - сравните.

так сравнивал... и что сюда ошибочно прописано тоже понимаю.

как к этой точке приписать стиль?

map.addOverlay(geocoder)

потому как именно так необходимая точка открывается

 
 geocoder.setStyle(s); map.addOverlay(geocoder);

ваще супер!

так всё просто :)

это только когда знаешь :)

+1

:) и ещё в догонку...

про балун...

как имя и описание правильно в данном случае подставить?

 

// Назначение стиля к метке
geocoder.setStyle(s);

// Пытаемся описать
geocoder.name = "Адажио";
geocoder.description = "свадебный салон";

// Создание метки и добавление ее на карту
map.addOverlay(geocoder)

// Задает содержимое балуна наиболее приоритетным способом
geocoder.setBalloonContent("свадебный салон +7 (383) 222-28-68");
// Открывает балун
geocoder.balloonOpen();
почему-то не проканало. а хотел сам разобраться.

А нужно ли вам каждый раз геокодировать?

может хранить координаты у себя и по ним сразу показывать точку на карте?

ну геокодировать нужно на лету, так как объект не один, а их куча. карта открывается в модальном окне...

координат нужно очень много, а так: адрес подставляется через php из базы...

У нас есть пример как прогеокодировать много адресов в базе

http://ymapsapi.ya.ru/replies.xml?item_no=81

спасибо, натравлю на это программера при следующем проекте.

а что же всё-таки делать с содержимым балуна?

Вы хотите перекрыть поля геокодера

и показывать в них свои данные, но вообще то так лучше не делать

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

 

geocoder.Events.Load, function (geocoder) {
if (geocoder.length()) {
    map.setBounds(geocoder.get(0).getBounds());
    pl = new YMaps.Placemark(geocoder.get(0).getGeoPoint, {style: s});
    pl.openBalloon('_тут_ваш_html_');
    map.addOverlay(pl);
}
});

 

 

не работает.

куда это и вместо чего впихнуть?

подскажите, плиз...

geocoder.get(0).getGeoPoint()

скобки на конце

вот так должно получиться в итоге?:

<script type="text/javascript">
YMaps.jQuery(function () {
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
var geocoder = new YMaps.Geocoder("Новосибирск, проспект Димитрова, 12");
YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {if (geocoder.length()) {map.setBounds(geocoder.get(0).getBounds());}
});

// Настройки инструментов
map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.ToolBar());
map.addControl(new YMaps.Zoom());
map.addControl(new YMaps.MiniMap());
map.addControl(new YMaps.ScaleLine());

// Создание стиля для значка метки
var s = new YMaps.Style();
s.iconStyle = new YMaps.IconStyle();
s.iconStyle.href = "/img/baloon.png";
s.iconStyle.size = new YMaps.Point(84, 46);
s.iconStyle.offset = new YMaps.Point(-32, -46);

// Параметры метки и балуна
geocoder.Events.Load, function (geocoder) {
if (geocoder.length()) {
map.setBounds(geocoder.get(0).getBounds());
pl = new YMaps.Placemark(geocoder.get(0).getGeoPoint(), {style: s});
pl.openBalloon('_тут_ваш_html_');
// Создание метки на карте
map.addOverlay(pl);
}
});
script>
именно так - не работает :(

 это убрать
YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {if (geocoder.length()) {map.setBounds(geocoder.get(0).getBounds());}
});
Тут кусок кода неправильный вначале
// Параметры метки и балуна
geocoder.Events.Load, function (geocoder) {
должно быть 
YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
if (geocoder.length()) {
    map.setBounds(geocoder.get(0).getBounds());
    pl = new YMaps.Placemark(geocoder.get(0).getGeoPoint(), {style: s});
    pl.openBalloon('_тут_ваш_html_');
    map.addOverlay(pl);
}
});

ОГРОМНОЕ СПЕСИБО!

а в примерах стили прописаны только к placemark-ам.

можно без них как-либо обойтись? ведь точка-то и так создаётся

Скройте код под врезкой, пожалуйста.
конечно, без проблем. сделано