Клуб API Карт

Проблема с адресами при изменении стиля метки.

yaroslav.bezruchko
7 августа 2013, 16:41

Суть в следующем:

Есть 2 маршрута на одной карте. Нужно, чтобы они отличались цветом. При попытке установить стиль - стиль меняется, но пропадает адрес точки.

 

var router1 = new YMaps.Router(['Украина, Киев, Адрес№1',

'Київ, Адрес№2',

'м.Київ, Адрес№3',

'Украина, Киев, Адрес№4'

], [1],{ viewAutoApply: true });

map.addOverlay(router1);

 

 

var router2 = new YMaps.Router(['Украина, Киев, Адрес№11',

'Київ, Адрес№12',

'м.Київ, Адрес№13',

'Украина, Киев, Адрес№14'

map.addOverlay(router2);

 

  

 

 

var s1 = new YMaps.Style("default#lightbluePoint");

s1.lineStyle = new YMaps.LineStyle();

s1.lineStyle.strokeColor = "00FFFFFF";

s1.lineStyle.strokeWidth = 2;

YMaps.Styles.add("example#customPoint1", s1);

router1.setStyle("example#customPoint1");

 

 

var s2 = new YMaps.Style("default#redPoint");

s2.lineStyle = new YMaps.LineStyle();

s2.lineStyle.strokeColor = "FF0000FF";

s2.lineStyle.strokeWidth = 3;

YMaps.Styles.add("example#customPoint2", s2);

router2.setStyle("example#customPoint2");

 

  

Подскажите, пожалуйста, в чём может быть дело?

Я где-то попадал на статью, что это нужно делать через Template. Что адрес записан в поле "text". Если так, то как правильно написать  template стиля, чтобы можно было сохранить адрес точки и изменить цвет метки и как с ним работать?

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

Почему бы не сделать это в версии 2.0?

Даже не знаю. Просто пример попался на 1.1, вот на нём и начал играться. А в 2.0 это проще делается?

Лично я уже и не помню как это делается в первом.

Зачем писать на старой версии, если она уже не поддерживается и не развивается?

и во второй нет ключей!!!

Перепишу под 2.0.

Почитаю, как в 2.0 можно менять стиль метки.

Примеры можно смотреть в песочнице

Да, спасибо, я уже нашёл!

Даже .по моему, нашёл часть кода, которая мне нужна:

        var points = route.getWayPoints(),

            lastPoint = points.getLength() - 1;

        // Задаем стиль метки - иконки будут красного цвета, и

        // их изображения будут растягиваться под контент.

        points.options.set('preset', 'twirl#redStretchyIcon');

Переписал под 2.0 - всё отлично. Но не могу "перевести" на 2.0 функцию:

function showAddress (value) {
// Удаление предыдущего результата поиска
map.removeOverlay(geoResult);

// Запуск процесса геокодирования
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

// Создание обработчика для успешного завершения геокодирования
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
// Если объект был найден, то добавляем его на карту
// и центрируем карту по области обзора найденного объекта
if (this.length()) {
geoResult = this.get(0);
map.addOverlay(geoResult);
map.setBounds(geoResult.getBounds());
}else {
alert("Ничего не найдено")
}
});

// Процесс геокодирования завершен неудачно
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
alert("Произошла ошибка: " + error);
})
}

 

 

 value - текстовое предсталение адреса.

Суть функции - по адресу добавляет метку, позиционирует карту по этй метке, подгоняет масштаб и открывает балун.

На 2.0 написал:

function showAddress (value) {
// Удаление предыдущего результата поиска
var myGeocoder = ymaps.geocode(
// Строка с адресом, который нужно геокодировать
value, {
/* Опции поиска:
- область поиска */
//boundedBy: myMap.getBounds(),
// - искать только в этой области
//strictBounds: true,
// - требуемое количество результатов
results: 1
}
);

/* После того, как поиск вернул результат, вызывается
callback-функция */
// Результат поиска передается в callback-функцию
myGeocoder.then(
function (res) {
if (res.geoObjects.getLength()) {
// point - первый элемент коллекции найденных объектов
var point = res.geoObjects.get(0);
// Добавление полученного элемента на карту
myMap.geoObjects.add(point);
// Центрирование карты на добавленном объекте
myMap.panTo(point.geometry.getCoordinates());
}
},
// Обработка ошибки
function (error) {
alert("Возникла ошибка: " + error.message);
}
)
}
};

 

Не позиционирует на найденную точку.

 

 Строка с вызовом функции:

АНГ ТОВ м. Київ, Адрес№1

 

Может подскажите, где ошибся?

 

 

 

 

 

 

 

function showAddress(value) {

    var myGeocoder = ymaps.geocode(value, {

        results: 1

    });

 

    myGeocoder.then(function (res) {

        var point = res.geoObjects.get(0);

        if (point) {

            myMap.geoObjects.add(point);

            myMap.setBounds(point.properties.get('boundedBy'));

        }

    }, function (error) {

        alert("Возникла ошибка: " + error.message);

    });

}

ОГРОМНОЕ СПАСИБО!!! :)))) Реально выручили.

Не так давно этим занимаюсь и пока нет опыта.