ObjectManager
Расширяет ICustomizable, IEventEmitter, IGeoObject, IParentOnMap.
Менеджер объектов. Позволяет оптимально отображать, кластеризовать и управлять видимостью объектов. Обратите внимание, что у объектов, отрисованных на карте через данный менеджер, нельзя включать режимы редактирования и перетаскивания.
Конструктор | Поля | События | Методы
Конструктор
ObjectManager([options])
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: Object Опции.
|
|
false |
Тип: Boolean Флаг, показывающий, нужно ли кластеризовать объекты. Обратите внимание, что на данный момент кластеризация работает только для точечных объектов. При включенном режиме кластеризации все неточечные объекты будут игнорироваться. |
|
false |
Тип: Boolean Флаг, разрешающий создавать оверлеи для объектов синхронно. Обратите внимание, что при синхронном создании оверлея нужно самостоятельно обеспечить загрузку нужного класса, реализующего интерфейс IOverlay. По умолчанию оверлеи создаются асинхронно, при этом класс оверлея загружается по требованию. |
|
128 |
Тип: Number|Number[] Отступ для области, в которой показываются объекты. С помощью данной опции область показа объектов расширяется по отношению к видимой области карты. |
Пример:
var objectManager = new ymaps.ObjectManager({
// Включаем кластеризацию.
clusterize: true,
// Опции кластеров задаются с префиксом 'cluster'.
clusterHasBalloon: false,
// Опции геообъектов задаются с префиксом 'geoObject'.
geoObjectOpenBalloonOnClick: false
});
// Опции можно задавать напрямую в дочерние коллекции.
objectManager.clusters.options.set({
preset: 'islands#grayClusterIcons',
hintContentLayout: ymaps.templateLayoutFactory.createClass('Группа объектов')
});
objectManager.objects.options.set('preset', 'islands#grayIcon');
Поля
Имя |
Тип |
Описание |
Коллекция кластеров, сгенерированных менеджером. |
||
Менеджер событий. Унаследовано от IDomEventEmitter. |
||
IGeometry|null |
Геометрия геообъекта. Унаследовано от IGeoObject. |
|
Коллекция объектов, добавленных в слой. |
||
Менеджер опций. Унаследовано от ICustomizable. |
||
Данные геообъекта. Унаследовано от IGeoObject. |
||
Состояние геообъекта. Унаследовано от IGeoObject. |
События
Имя |
Описание |
Однократное нажатие левой кнопки мыши на объекте. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
|
Вызов контекстного меню на элементе. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
|
Двойное нажатие левой кнопки мыши на объекте. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
|
Изменение геометрии геообъекта. Экземпляр класса Event. Имена полей, доступных через метод Event.get:
Унаследовано от IGeoObject. |
|
Сменилась карта. Поля данных:
Унаследовано от IParentOnMap. |
|
Нажатие кнопки мыши над объектом. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
|
Наведение курсора на объект. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
|
Вывод курсора за пределы объекта. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
|
Перемещение курсора над объектом. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
|
Отпускание кнопки мыши над объектом. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
|
Окончание мультисенсорного управления. Данное событие доступно только на устройствах, которые поддерживают множественные сенсорные прикосновения. Возвращает реализацию интерфейса IMultiTouchEvent. Унаследовано от IDomEventEmitter. |
|
Повторящееся событие при мультисенсорном управлении. Данное событие доступно только на устройствах, которые поддерживают множественные сенсорные прикосновения. Возвращает реализацию интерфейса IMultiTouchEvent c информацией о прикосновениях. Определяет свойство touches, которое содержит список прикосновений. Каждое прикосновение описано объектом, которое содержит поля:
Унаследовано от IDomEventEmitter. |
|
Начало мультисенсорного управления. Данное событие доступно только на устройствах, которые поддерживают множественные сенсорные прикосновения. Возвращает реализацию интерфейса IMultiTouchEvent c информацией о прикосновениях. Определяет свойство touches, которое содержит список прикосновений. Каждое прикосновение описано объектом, которое содержит поля:
Унаследовано от IDomEventEmitter. |
|
Изменение в опциях объекта. Унаследовано от ICustomizable. |
|
Изменение оверлея геообъекта. Экземпляр класса Event. Имена полей, доступных через метод Event.get:
Унаследовано от IGeoObject. |
|
Сменился родительский объект. Поля данных:
Унаследовано от IChild. |
|
Изменение данных геообъекта. Экземпляр класса Event. Имена полей, доступных через метод Event.get:
Унаследовано от IGeoObject. |
|
Скролл мышкой. При использовании следует иметь в виду, что при сенсорном вводе события мыши будут эмулироваться. Экземпляр класса MapEvent. Более детальное описание доступно в domEvent.manager. Унаследовано от IDomEventEmitter. |
Методы
Имя |
Возвращает |
Описание |
Добавление объектов в менеджер. |
||
Number[][]|null |
Вычисляет границы области в геокоординатах, охватывающей все объекты в составе менеджера. |
|
String|Function|null |
Возвращает заданную функцию-фильтр. |
|
getMap() |
Возвращает ссылку на карту. Унаследован от IParentOnMap. |
|
Object |
Получение информации о текущем состоянии объекта, добавленного в менеджер. |
|
Возвращает объект-обещание, который подтверждается объектом оверлея в момент его фактического создания, либо отклоняется с передачей соответствующей ошибки. Унаследован от IGeoObject. |
||
IOverlay|null |
Метод предоставляет синхронный доступ к оверлею. Унаследован от IGeoObject. |
|
IParentOnMap|null |
Возвращает ссылку на родительский объект или null, если родительский элемент не был установлен. Унаследован от IChildOnMap. |
|
Number[][]|null |
Вычисляет границы области в глобальных пиксельных координатах, охватывающей все объекты в составе менеджера. |
|
Удаление объектов из менеджера. |
||
Удаление всех объектов из менеджера. |
||
Устанавливает функцию-фильтр для объектов. |
||
Устанавливает родительский объект. Если передать значение null, то элемент управления будет только удален из текущего родительского объекта. Унаследован от IChildOnMap. |
Описание полей
clusters
{objectManager.ClusterCollection} clusters
Коллекция кластеров, сгенерированных менеджером.
Пример:
objectManager.objects.events.add('click', function (e) {
var objectId = e.get('objectId');
objectManager.objects.balloon.open(objectId);
});
objects
{objectManager.ObjectCollection} objects
Коллекция объектов, добавленных в слой.
Пример:
objectManager.objects.events.add('click', function (e) { var objectId = e.get('objectId'); objectManager.objects.balloon.open(objectId);});
Описание методов
add
{ObjectManager} add(objects)
Добавление объектов в менеджер.
Возвращает ссылку на менеджер объектов.
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: Object|Object[]|String Строка или объект с JSON-описанием объектов. JSON-описание объектов строится по следующему принципу (см. пример ниже). Объектом может быть сущность или коллекция сущностей. Коллекция сущностей представляет из себя объект с полями:
|
* Обязательный параметр/опция.
Примеры:
1.
var objectManager = new ymaps.ObjectManager({ clusterize: true });
var currentId = 0;
// Добавим единичный объект.
objectManager.add({
type: 'Feature',
id: currentId++,
geometry: {
type: 'Point',
coordinates: [56.23, 34.79]
},
properties: {
hintContent: 'Содержание всплывающей подсказки',
balloonContent: 'Содержание балуна'
}
});
map.geoObjects.add(objectManager);
2.
// Добавим массив точечных объектов.
var objects = [];
for (var i = 0, l = coordinates.length; i < l; i++) {
objects.push({
type: 'Feature',
id: currentId++,
geometry: {
type: 'Point',
coordinates: coordinates[i]
}
});
}
objectManager.add(objects);
map.geoObjects.add(objectManager);
3.
// Добавление коллекций объектов.
var collection = {
type: 'FeatureCollection',
features: [{
type: 'Feature',
id: currentId++,
geometry: {
type: 'Point',
coordinates: [24.34, 65.24]
}
}, {
type: 'Feature',
id: currentId++,
geometry: {
type: 'Point',
coordinates: [25.34, 63.24]
}
}
]}
objectManager.add(collection);
map.geoObjects.add(objectManager);
4.
// Добавление не точечных объектов
var objects = [];
// Добавление круга
objects.push({
type: 'Feature',
id: 1,
geometry: {
type: 'Circle',
coordinates: [55.755381, 37.619044],
radius: 300
}
});
// Добавление прямоугольника
objects.push({
type: 'Feature',
id: 2,
geometry: {
type: 'Rectangle',
coordinates: [
[55.764286, 37.606169],
[55.759688, 37.620588]
]
},
options: {
fillColor: '#FFFFFF',
opacity: 0.8
}
});
// Добавление полилинии
objects.push({
type: 'Feature',
id: 3,
geometry: {
type: 'LineString',
coordinates: [
[55.75901100, 37.6308886],
[55.7516538, 37.6299444],
[55.74603822, 37.6380125]
]
},
options: {
strokeColor: "#FF0000",
strokeWidth: 5
}
});
// Добавление многоугольника
objects.push({
type: 'Feature',
id: 4,
geometry: {
type: 'Polygon',
coordinates: [[
[55.75175065, 37.6041094],
[55.75005637, 37.6137224],
[55.742891186, 37.6166407],
[55.74153546, 37.60342281],
[55.74700649, 37.59775798]
]]
},
options: {
opacity: 0.2,
strokeWidth: 2,
fillColor: '#00FF00'
}
});
objectManager.add(objects);
getBounds
{Number[][]|null} getBounds()
Вычисляет границы области в геокоординатах, охватывающей все объекты в составе менеджера.
Возвращает массив координат области или null, если менеджер не добавлен на карту.
getFilter
{String|Function|null} getFilter()
**Возвращает **заданную функцию-фильтр.
getObjectState
{Object} getObjectState(id)
Получение информации о текущем состоянии объекта, добавленного в менеджер.
Возвращает объект, содержащий следующие поля:
- found - признак, указывающий, существует ли объект с переданным идентификатором. Type: Boolean.
- isShown - признак, указывающий, находится ли объект в видимой области карты. Type: Boolean.
- cluster - JSON-описание кластера, в который добавлен объект. Помимо обязательных полей, содержит поле properties.geoObjects с массивом объектов, попавших в кластер. Поле возвращается только при включенной кластеризации;
- isClustered – признак, указывающий, попал ли объект в состав кластера. Поле возвращается только при включенной кластеризации; Type: Boolean.
- isFilteredOut - признак, указывающий, прошел ли объект фильтрацию. Если фильтр не задан или объект прошел фильтрацию, значение поля будет false. Type: Boolean.
Параметры:
Параметр |
Значение по умолчанию |
Описание |
|
— |
Тип: Object Идентификатор объекта, для которого нужно получить состояние. |
* Обязательный параметр/опция.
Пример:
// Открытие балуна кластера с выбранным объектом.
// Получим данные о состоянии объекта внутри кластера.
var objectState = objectManager.getObjectState(objects[1].id);
// Проверяем, находится ли объект в видимой области карты.
if (objectState.found && objectState.isShown) {
// Если объект попадает в кластер, открываем балун кластера с нужным выбранным объектом.
if (objectState.isClustered) {
objectManager.clusters.state.set('activeObject', objects[1]);
objectManager.clusters.balloon.open(objectState.cluster.id);
} else {
// Если объект не попал в кластер, открываем его собственный балун.
objectManager.objects.balloon.open(objects[i].id);
}
}
getPixelBounds
{Number[][]|null} getPixelBounds()
Вычисляет границы области в глобальных пиксельных координатах, охватывающей все объекты в составе менеджера.
Возвращает массив координат области или null, если менеджер не добавлен на карту.
remove
{ObjectManager} remove(objects)
Удаление объектов из менеджера.
Возвращает ссылку на менеджер объектов.
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: Object|Object[]|String Строка, объект с JSON-описанием объектов или массив идентификаторов удаляемых объектов. Формат описания объектов см. в описании метода ObjectManager.add |
* Обязательный параметр/опция.
Примеры:
1.
// Удаление объектов с идентификаторами 0 и 56.
objectManager.remove([0, 56]);
2.
// Удаление массива объектов
objectManager.remove([
{
type: 'Feature',
id: 23,
geometry: {
type: 'Point',
coordinates: [45.33, 24.33]
}
},
{
type: 'Feature',
id: 52,
geometry: {
type: 'Point',
coordinates: [45.23, 24.34]
}
},
]);
3.
// Удалим коллекцию объектов.
objectManager.remove({
type: 'FeatureCollection',
features: [
// Описание объектов в составе коллекции.
// ...
]});
removeAll
{ObjectManager} removeAll()
Удаление всех объектов из менеджера.
Возвращает ссылку на себя.
Пример:
objectManager.removeAll();
setFilter
{} setFilter(filterFunction)
Устанавливает функцию-фильтр для объектов.
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: Function|String функция-фильтр. Получает на вход единичный объект, добавленный в ObjectManager. Если функция возвращает true, объект будет обработан. Если false - объект будет исключен из дальнейшей обработки. Также в качестве фильтра можно передавать строку. В строке-фильтре доступны следующие ключевые слова:
|
* Обязательный параметр/опция.
Примеры:
1.
// Пропустить объекты, id которых меньше 100.
objectManager.setFilter('id > 100');
2.
// На карте будут отображаться только объекты с заданными типами.
objectManager.setFilter('properties.type == "кафе" || properties.type == "аптека"');
3.
// Можно задавать функцию-фильтр.
objectManager.setFilter(function (object) {
return object.properties.name != 'Тот, кого нельзя показать.';});
Обязательный параметр.