RemoteObjectManager

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

Примечание. В RemoteObjectManager отсутствует возможность перетаскивать объекты, то есть опция draggable не поддерживается. Также не поддерживается режим редактирования объектов.

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

Принцип работы с RemoteObjectManager

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

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

Каждый раз при изменении уровня масштабирования карты менеджер повторно запрашивает у сервера данные для всей видимой области. Дело в том, что RemoteObjectManager настроен таким образом, чтобы оптимально отображать результаты серверной кластеризации. Менеджер не производит какой-либо обработки данных на стороне клиента — он отображает только то, что получает в запросе от сервера. Если на сервере используется кластеризация объектов, для разных уровней масштабирования в запросе могут приходить данные разных объектов (см. рисунок ниже). По этой причине при изменении уровня масштабирования менеджер запрашивает данные заново, даже если они уже были загружены ранее на другом масштабе.

Примечание. Если для разных уровней масштабирования приходят объекты с одним и тем же id, то на стороне клиента их метки не перерисовываются.

Менеджер и сервер обмениваются данными в формате JSONP. Это означает, что сервер должен возвращать данные, обернутые в callback-функцию. Разработчику необходимо самостоятельно реализовать серверную обработку данных, позаботившись о том, чтобы сервер возвращал данные в нужном формате.

На основе загруженных данных RemoteObjectManager создает оверлеи, которые затем добавляет на карту. Оверлеи — это визуальное представление объектов на карте. Для их обработки требуется меньшее количество ресурсов, чем для обработки геообъектов — экземпляров класса GeoObject.