Общие сведения

Довольно часто перед пользователем API стоит задача отобразить на карте сотни и даже тысячи геообъектов. Добавление на карту такого большого числа объектов может привести к значительной потере производительности.

Чтобы уменьшить нагрузку на браузер клиенту целесообразно загружать не все данные сразу, а только те, которые нужны. Наиболее часто используется метод, при котором с сервера грузятся только те объекты карты, которые попадают в ее область просмотра.

На первый взгляд данный метод кажется достаточно эффективным, так как не происходит загрузки всех данных сразу. Однако у этого метода есть ряд недостатков.

Во-первых, перестроение объектов при смене границ карты занимает время. Каждый раз при перемещении карты приходится ждать, когда объекты появятся на карте.

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

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

При использовании активных областей вместо показа тысячи отдельных объектов отображается один слой, содержащий изображения всех этих объектов. Поверх слоя с изображениями объектов располагается еще один слой — с информацией об этих объектах и их границах. Он позволяет сделать объекты интерактивными, то есть запрограммировать реакцию объекта на действия пользователя.

Преимущество этого метода в том, что с сервера подгружается информация об объектах только того тайла, на котором находится указатель мыши. При этом является возможным использование кэширования данных.

Слои активных областей используются, например, при отображении на картах Яндекса пробок и фотографий.

Технология активных областей

Слой, содержащий изображения объектов, называется картиночным слоем и формируется, как и любой слой, из тайлов. Для создания этого слоя необходимо сформировать изображения тех тайлов, в которые попадают объекты при отображении на карте. При этом фон тайлов должен быть прозрачным.

Для того, чтобы объекты стали интерактивными, то есть могли взаимодействовать с пользователем, поверх картиночного слоя на карту добавляется слой активных областей. Он предоставляет API сведения о том, какие участки карты должны быть интерактивными.

Интерактивный участок карты называется активной областью и представляется одной или несколькими простейшими геометрическими фигурами. Активная область является абстрактным понятием, на карте она не видна.

Слой активных областей содержит информацию об активных областях — их позицию, типы их геометрий, а также некоторые свойства (например, содержание их балуна или хинта). Эта информация представляется в формате JSON.

Для хранения данных слоя активных областей используются те же самые тайловые технологии, что и для обычных слоев карты. Это означает, что данные раскладываются по квадратам 256х256 пикселов, нарезанным для всех уровней масштабирования. Данные об активных областях хранятся на сервере.

Слой активных областей обменивается данными с сервером с помощью специального объекта — источника данных. Источник данных формирует и отправляет запрос за информацией об активных областях нужного тайла и возвращает данные слою.

Слой хранит данные об активных областях только того тайла, на котором находится указатель мыши. Когда пользователь перемещает указатель мыши на другой тайл, слой обращается к серверу за данными для нового тайла. Как только сервер вернет ответ, слой удалит данные предыдущего тайла. Таким образом, слой не хранит загруженные ранее данные.

Однако есть возможность использования кэша браузера. Подробнее об этом см. в разделе Использование кэша браузера.

Слой активных областей и картиночный слой существуют независимо друг от друга, и порядок их добавления на карту неважен. В некоторых случаях слой активных областей может использоваться и без картиночного (например, если нужно сделать интерактивным изображение какого-то дома на карте). На карту может быть добавлено несколько слоев активных областей.