Клуб API Карт

Кастомные иконки для различных объектов из LoadingObjectManager

Пост в архиве.

Через LoadingObjectManager загружается большое количество Point объектов, которые отличаются координатами и полем "properties.name". Как можно разбить объекты по группам в зависимости от имени и присвоить каждой группе свою иконку на карте? Или может лучше ввести какое-то поле в JSON-описании объекта для того, чтобы можно было раличать их? Может быть можно добавить поле в JSON с url картинки и подгружать её во время добавления на карту?

Объекты добавляю так же как в примере из песочницы:
 

var tileUrlTemplate = 'http://localhost:8080/?bbox=%b&zoom=%z';
var loadingObjectManager = new ymaps.LoadingObjectManager(tileUrlTemplate,
                    {
                        clusterize: false,
                        clusterHasBalloon: false, 
                        geoObjectOpenBalloonOnClick: true,
                    });

myMap.geoObjects.add(loadingObjectManager);

12 комментариев
В json описании объектов должно поддерживаться поле options
dimik,
Вы не могли бы уточнить какую структуру должно иметь поле options?
SWYD,
Объект, список полей есть в документации на GeoObject.
https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/GeoObject-docpage/
Вам нужно указать layout: "default#image", а также все поля iconImageHref, iconImageSize, iconImageOffset
dimik,
Спасибо, это помогло!
Дмитрий Емельянов
11 ноября 2016, 16:15
Бьюсь над решением той же проблемы. Есть карта, на которую через loadingObjectManager может выводится до 10-50 тысяч объектов. Объекты разделены на 3-4 типа, в соответствии с которыми необходимо проставлять разные иконки. Есть ли какой-то более культурный (компактный) способ это сделать, чем прописывать каждому из объектов свойства через options?
Например, сгруппировать объекты каждого типа в свой контейнер FeatureCollection, которому как-то задать свойства, или хотя бы указать ссылку на стиль каждого объекта, не перечисляя все необходимые свойства в явном виде?
Дмитрий Емельянов,
mynovosel, Надо создать свой preset с нужными опциями и передавать в объектах только его


типа
ymaps.presetStorage.add('group1#icon', {
iconLayout: ymaps.templateLayoutFactory.createClass(...),
....
});


и потом в данных Feature:
options: {
preset: 'group1#icon'
}
https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/option.presetStorage-docpage/#methods-summary
Дмитрий Емельянов
11 ноября 2016, 22:56
dimik,
Спасибо большое! Уже что-то работает.
А подскажите, можно ли хотя бы такой финт ушами сделать, чтобы ещё больше сократить объём передаваемых данных:
Выбираем группу объектов, которых на карте больше всего, и прописываем где-то их стиль, как стиль для всех меток карты по умолчанию. А уже для остальных объектов стиль передаём для каждого в JSON. Вроде бы в LoadingObjectManager есть свойство options.preset, но что-то не меняет оно ничего. :(
Дмитрий Емельянов
11 ноября 2016, 23:04
Дмитрий Емельянов,
Вернее, на системный стиль можно поменять вот так:
loadingObjectManager.options.set('preset', 'islands#redClusterIcons');
а на пользовательский нет.
Дмитрий Емельянов,
Оно?
 objectManager.objects.options.set('preset', 'islands#greenDotIcon');
Дмитрий Емельянов,
Пресеты Cluster* они только для кластеров.
В песочнице же есть пример

Дмитрий Емельянов
13 ноября 2016, 22:19
dimik,
Да, большое спасибо. С .objects всё заработало.