Клуб API Карт

Своя метка и кликабельная область

nazar-pc
13 февраля 2014, 00:04

Добавляю Placemark с кастомной иконкой:

 

new ymaps.Placemark(
    [
        lat
        lng
    ]
    {}
    {
        iconLayout            : 'default#image'
        iconImageHref        : '/map-icons.png'
        iconImageSize        : [60, 58]
        iconImageOffset        : [-24, -58]
        iconImageClipRect    : [[60 * icon_number, 0], [60 * (icon_number + 1), 58]]
    }
)

Но клик по иконке распознается только в "силуете" стандартной иконки. Используя иконки вдвое большего размера или меньшего не удобно, так как клик по верхней части большой иконки просто не работает. При этом отображается всё вполне корректно.

Как пример большой иконки - синие на cherrytea.org

Использую API 2.1 beta

8 комментариев
Подписаться на комментарии к посту
Нужно задать метке shape, соответствующий ее форме: http://api.yandex.ru/maps/doc/jsapi/beta/ref/reference/GeoObject.xml#param-iconImageShape
В placemark можно прописать шейп через опцию iconImageShape

Я видел это в документации, но

Если не задана, то автоматически будет рассчитана прямоугольная фигура на основе размера и смещения картинки

фигура не соответствует размеру, и не прямоугольная.

Можно какой-то пример? (желательно и в документацию добавить)

Да, можно описать метку полигоном.
Шейп нашей метки (запятая) описывается так:
var iconShapeCoords = [
            [
                [12, 27],
                [8, 39],
                [10, 41],
                [23, 24],
                [26, 20],
                [27, 15],
                [27, 12],
                [25, 6],
                [22, 3],
                [19, 1],
                [15, 0],
                [12, 0],
                [8, 1],
                [5, 3],
                [2, 6],
                [0, 12],
                [0, 15],
                [2, 21],
                [5, 24],
                [8, 26],
                [12, 27]
            ]
        ];

var iconShape = new ymaps.shape.Polygon(new ymaps.geometry.pixel.Polygon(iconShapeCoords))

Можете просто упрощенно обрисовать в каком-нибудь векторном редакторе и скопировать координаты, проследив, чтобы они были корректны (начало координат).

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

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

Автоматический расчет добавим в одной из следующих версий. Спасибо!

Свою форму активной области можно задать через опцию iconImageShape

Мне удалось заставить его работать, всё это весьма криво.

1) Почему массив координат в ещё одном массиве? (как по мне - избыточно)

2) iconImageShape полностью игнорирует iconImageOffset, что дико неудобно, и приходится к полученным координатам по очереди прибавлять смещение

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

if (arr[0] && arr[0][0] && !arr[0][0][0]) {
    arr = [arr]
}