Клуб API Карт

Как привязать событие pixelgeometrychange к пиксельной геометрии?

Пост в архиве.
Как привязывать событие pixelgeometrychange к пиксельной геометрии?

В документации к geometry.pixel.Rectangle написано что есть поле events, но firebug-ом его не видно
(доки: http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/geometry.pixel.Rectangle.xml)

Пример: http://klerik.jino.ru/yamaps/yamaps_wtf_restangle.html


Это мне нужно для того чтобы переопределить геометрию для статичных оверлеев при зуме карты
(http://clubs.ya.ru/mapsapi/replies.xml?parent_id=23783&item_no=23714&with_parent=1#reply-mapsapi-23783)
11 комментариев
Дмитрий Сухоносов
28 января 2016, 04:49
Добавлю: Откройте этот же пример в IE 7: все углы прямоугольников будут
аккуратно скруглены 0о

PS IE 7.0.5730.11, Winхp
Дмитрий Сухоносов
28 января 2016, 04:49
Так что, баг/ не баг ?
Дмитрий Сухоносов
28 января 2016, 04:49
Мне ответят? Яндекс, ау!

У пиксельной геометрии действительно нет поля events.

В обсуждении была оговорка - 

"Геометрия еще кидает "pixelgeometrychange" при смене масштаба карты."

В документации прописано, что событие pixelgeometrychange кидает сам геообъект.

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


Дмитрий Сухоносов
28 января 2016, 04:49
Не получается: проверить события самого элемента - это первое что я подумал,
но у оверлея в отличии от геообьекта нет события pixelgeometrychange,
есть только geometrychange, которое не вызывается при зуме карты и похоже означает что-то другое.

Пример: http://klerik.jino.ru/yamaps/yamaps_wtf_restangle2.html

Мне не очень понятна задача.

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

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

Я правильно поняла?

Дмитрий Сухоносов
28 января 2016, 04:49
Я хочу чтобы при смене зума не пропадали оверлеи, созданные через пиксельную геометрию.

Возможно эту задачу можно решать как-то по другому, но
из комментария chalyu я понял, что надо отслеживать событие pixelgeometrychange и после зума заменять геометрию у оверлея на отресайзенную.

Но попробовав это реализовать я столкнулся с вышеперечисленными проблемами.

В ответе рассматривался случай, когда оверлей является отображением геообъекта. Если у вас просто отдельностоящий оверлей, то ему надо руками перезадавать пиксельные координаты при изменении зума карты.

Дмитрий Сухоносов
28 января 2016, 04:49

Ааа, вот оно как хитро вывернуто:/



В общем, вот пример кода как это надо делать:

        var geometry = new ymaps.geometry.Rectangle([
            [55.4, 37.3],
            [55.9, 37.7]
        ], {
                coordRendering: 'boundsPath',
                projection: map.options.get('projection')
            }
        );

        geometry.setMap(map);

        console.log(geometry.getPixelGeometry().getCoordinates());

        geometry.events.add('pixelgeometrychange', function(e) {
            console.log('geometrychange', e.get('newPixelGeometry').getCoordinates());
        });
Дмитрий Сухоносов
28 января 2016, 04:49
И уберите из документации инфу о том, что у пиксельной геометрии есть поле events

Да, это обязательно исправим. Или геометрии добавим поле, или из доки уберем.