При работе с кэшем карт в различных клиентах (настольных и веб-приложениях) необходимо учитывать, как приложение работает с листами, сохраняются ли листы локально и при каких условиях выполняются наложения кэша.
Как приложения открывают и используют кэш
После определения схемы листов для картографического сервиса последний тут же начинает использовать этот кэш. Любое приложение ArcGIS, которое может отображать картографический сервис, использует кэш, хотя способ получения и использования листов зависит от используемого приложения.
Веб-приложения
При разработке с использованием ArcGIS API for JavaScript следует задействовать специальный класс для указания необходимости подключения к разбитому на листы (кэшированному) картографическому сервису. Например, вы используете ArcGISTiledMapServiceLayer для подключения к кэшированному сервису. При использовании кэшированного сервиса листы берутся из директории кэша с помощью запросов REST к картографическому сервису. Запрос листа принимает форму http://<map service URL>/tile/<level>/<row>/<column>.
При просмотре отдельного кэшированного сервиса в любом веб-приложении и приближении к области, листов для которой еще не существует, приложение не отображает динамическое изображение; пользователь вообще не увидит какого-либо изображения. Одним из способов обязательного показа карты при перемещении в некэшированной области является включение кэширования по требованию.
Подсказка:
Если карта отображается медленнее, чем нужно, просмотрите URL изображений карты, чтобы проверить, получает ли приложение листы. Для этого можно открыть приложение в Mozilla Firefox и щелкнуть Firefox > Web Developer > Web Console. При отображении консоли нажмите кнопку Сеть, затем масштабируйте или панорамируйте карту.
Если URL-адрес выглядит соответствующим образом, приложение успешно получает листы с использованием REST-запросов:
http://gisserver.domain.com:6080/arcgis/rest/services/myService/MapServer/tile/10/1723/3495.jpg
Если отображается какой-либо иной формат URL для изображений карты, приложение получает листы менее эффективным способом или кэш не используется.
ArcMap и ArcGIS Pro
Кэшированные картографические сервисы добавляются в ArcMap и ArcGIS Pro с помощью кнопки Добавить данные точно так же, как добавляется любой другой картографический сервис. Существует два способа просмотра кэша:
- Доступ к кэшу через картографический сервис – Чтобы просмотреть кэш подобным способом, перейдите к ГИС-серверу, затем к картографическому сервису, который использовался для создания кэша. В этом сценарии исходное подключение к ГИС-серверу создается для определения, имеет ли сервис кэш. Затем запрашиваются листы из директории кэша в файловой системе сервера.
- Доступ к кэшу через набор растровых данных – Чтобы просмотреть кэш таким образом, перейдите в директорию, содержащую листы кэша, и добавьте набор данных. Кэш представлен тем же значком, который используется для добавления всех прочих растров с помощью кнопки Добавить данные. Кэш, который открывается как растр, предназначен исключительно для просмотра и к нему неприменимы запросы. Преимуществом этот типа кэша является то, что он не привязан к картографическому сервису и может просматриваться при отключении от сервера, пока имеется доступ к директории кэша.
При запросе листа, масштаб которого в точности совпадает с уровнем масштаба в кэше, картографический сервис напрямую возвращает этот лист. Чаще всего запросы не совпадают в точности с уровнями масштаба в кэше. В этом случае запрашивается лист из следующего ближайшего уровня масштаба и пересчитывается для соответствия запрошенному масштабу. Этот пересчет выполняется гораздо быстрее динамического создания листа, однако получаемое изображение отличается от исходного листа. Кэшированные подписи на карте могут с трудом читаться в определенных масштабах вследствие этого пересчета. Для достижения наилучших результатов просматривайте карту в том масштабе, в котором был создан кэш (или в масштабах близких к нему).
ArcGlobe и ArcGIS Explorer
ArcGlobe и ArcGIS Explorer могут также считывать 2D-кэши и драпировать их на поверхности глобуса. Наилучшей производительности можно достичь в том случае, если создать кэш, в котором будут содержаться схемы листов ArcGIS Online/Карт Google/Bing Maps. Если одна их этих схем листов недоступна, то наибольшую производительность обеспечивает использование сервисов глобуса.
Добавление картографического сервиса к ArcGlobe может потребоваться в том случае, если необходимо построить трехмерный кэш глобуса, идентичный имеющемуся двухмерному кэшу. В таком случае работа будет связана только с построением кэша, а не с навигацией по глобусу.
Повышение скорости отображения кэшированного картографического сервиса
Когда клиенты отправляют запросы к ArcGIS Server для отображения картографического сервиса, ответ сервера обычно кэшируется браузером и повторно используется в течение некоторого периода времени. Это помогает ArcGIS Server добиться максимально возможной скорости отображения картографического сервиса. Однако в зависимости от использования картографического сервиса и связанных с ним данных в приложении, может потребоваться изменить время использования кэшированного ответа. Это можно сделать с помощью добавления свойства cacheControlMaxAge к JavaScript Object Notation (JSON) вашего сервиса.
Как используется свойство cacheControlMaxAge
Ответы картографического сервиса ArcGIS Server содержат тег объекта (ETag) и заголовок Cache-Control. Значение ETag является уникальным идентификатором ответа. Заголовок Cache-Control имеет значение максимальной длительности, который сообщает браузеру максимальный период времени, в течение которого можно повторно использовать кэш. Это значение управляется свойством cacheControlMaxAge.
При повторе запроса, когда максимальное время действия кэша еще не прошло, браузер будет использовать кэшированный ответ, не отправляя запрос к серверу. Если максимальное время действия кэша уже превышено, браузер должен отправить на сервер запрос и присвоить ответу в кэше заголовок IF-NONE-MATCH с соответствующим значением ETag. ArcGIS Server оценивает запрос и использует значение ETag для определения изменения запроса. Если ответ сервера отличается от копии в браузере, сервер отправит браузеру полностью новый ответ. Если ответ сервера идентичен копии в браузере, сервер сообщает браузеру, что можно продолжать использовать ответ в кэше.
Задание значения свойства cacheControlMaxAge
Чтобы указать, как долго браузер может использовать кэшированный ответ, задайте свойство cacheControlMaxAge. Это свойство может быть задано для отдельных кэшей сервиса. Снижая для ArcGIS Server необходимость отправки полного ответа, вы делаете кэш браузера более эффективным, оптимизируете приложения и экономите пропускную способность канала.
Для кэшированных картографических сервисов, которые не разрешают клиентам локальное кэширование листов, по умолчанию используется значение 0. Это означает, что браузер всегда отправляет запрос, а ArcGIS Server обрабатывает его и отправляет браузеру полный ответ, если данные изменились. Это значение подходит для большинства приложений.
Для кэшированных картографических сервисов, которые разрешают клиентам локальное кэширование листов, по умолчанию используется значение 86400 секунд (1 день). Это означает, что если запрос повторяется в течение 1 дня, браузер будет использовать ответ из кэша.
Для кэшированных картографических сервисов, карты или данные которых меняются редко, рекомендуется увеличить значение по умолчанию до 30 дней (2592000 секунд) или более, чтобы сократить сетевой трафик.
Чтобы добавить свойство cacheControlMaxAge к сервису и задать для него значение по умолчанию, сделайте следующее:
- В веб-браузере откройте директорию ArcGIS Server Administrator и войдите под именем пользователя с правами администратора. Адрес URL в формате http://gisserver.domain.com:6080/arcgis/admin.
- Щелкните services и выберите картографический сервис, который вы хотите изменить, в списке Сервисы. Если сервис не отображается в списке, он может располагаться в папке в Корневой папке.
- Прокрутите вниз страницу Сервис – <service name> (<service type>) и щелкните редактировать.
- В диалоговом окне Свойства сервиса найдите раздел свойств сервиса JSON.
- Добавьте свойство cacheControlMaxAge в раздел и задайте для него значение (в секундах), например:
"properties": { "cacheControlMaxAge": "2592000",
- Щелкните Сохранить изменения.
- На странице Service – <service name> (<service type>) проверьте, что свойство cacheControlMaxAge и указанное для него значение отображаются в разделе Свойства.
Наложение кэша
При создании кэшей карты, которые будут накладываться на другие кэши карты, для приложений необходимо, чтобы при наложении кэша совпадали системы координат и размеры листов. Рекомендуется также сопоставлять как можно больше масштабов.
Самый простой способ сделать это – сопоставление схем листов для обоих наборов кэша и создание листов только для тех масштабов, которые являются приемлемыми для каждого кэша. Так можно обеспечить сопоставление системы координат и размера листов и распознание программным обеспечением того факта, что два набора кэша используют общие масштабы.
Принудительная динамическая прорисовка
Если вы заметили, что ваши листы имеют плохое качество из-за интерполяции, или вы хотите увидеть динамические данные на определенных масштабах, вы можете принудительно заставить сервис игнорировать кэш и отображать карту динамически. Вы можете выполнить это для определенных уровней данной карты.
Например, представьте, что вы хотите показать данные в реальном времени для крупных масштабов. У вас есть карта, которая кэширована для уровней масштабирования 0 – 15, но должна прорисовываться динамически, начиная с уровней 16 – 19. Решением является включение динамических слоев для уровней 16 – 19, после чего необходимо указать в своих запросах карты, что вы хотите использовать динамические слои на этих уровнях. В противном случае сервис возвращает карту, построенную на основе доступных листов, то есть пустых областей, где листы не существуют.