Skip To Content

Кэш карты

При работе с кэшем карт в клиентских приложениях необходимо учитывать, как кажое приложение работает с листами, сохраняются ли листы локально и при каких условиях выполняются наложения кэша.

Как приложения открывают и используют кэш

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

Веб-приложения

При разработке с использованием ArcGIS API for JavaScriptArcGIS API for JavaScript следует задействовать специальный класс для указания необходимости подключения к разбитому на листы (кэшированному) картографическому сервису. Например, вы используете ArcGISTiledMapServiceLayer для подключения к кэшированному сервису. При использовании кэшированного сервиса листы берутся из директории кэша с помощью запросов REST к картографическому сервису. Запрос листа принимает форму https://<map service URL>/tile/<level>/<row>/<column>.

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

Подсказка:

Если карта отображается медленнее, чем нужно, просмотрите URL изображений карты, чтобы проверить, получает ли приложение листы. Для этого можно открыть приложение в Mozilla Firefox и щелкнуть Firefox > Web Developer > Web Console. При отображении консоли нажмите кнопку Сеть, затем масштабируйте или панорамируйте карту.

  • Если URL-адрес выглядит соответствующим образом, приложение успешно получает листы с использованием REST-запросов:

    https://gisserver.domain.com:6443/arcgis/rest/services/myService/MapServer/tile/10/1723/3495.jpg

  • Если отображается какой-либо иной формат URL для изображений карты, приложение получает листы менее эффективным способом или кэш не используется.

ArcMap и ArcGIS Pro

Кэшированные картографические сервисы добавляются в ArcMap и ArcGIS Pro с помощью кнопки Добавить данные точно так же, как добавляется любой другой картографический сервис. Существует два способа просмотра кэша:

  • Доступ к кэшу через картографический сервис – Чтобы просмотреть кэш подобным способом, перейдите к ГИС-серверу, затем к картографическому сервису, который использовался для создания кэша. В этом сценарии исходное подключение к ГИС-серверу создается для определения, имеет ли сервис кэш. Затем запрашиваются листы из директории кэша в файловой системе сервера.
  • Доступ к кэшу через набор растровых данных – Чтобы просмотреть кэш таким образом, перейдите в директорию, содержащую листы кэша, и добавьте набор данных. Кэш представлен тем же значком, который используется для добавления всех прочих растров с помощью кнопки Добавить данные. Кэш, который открывается как растр, предназначен исключительно для просмотра и к нему неприменимы запросы. Преимуществом этот типа кэша является то, что он не привязан к картографическому сервису и может просматриваться при отключении от сервера, пока имеется доступ к директории кэша.

При запросе листа, масштаб которого в точности совпадает с уровнем масштаба в кэше, картографический сервис напрямую возвращает этот лист. Чаще всего запросы не совпадают в точности с уровнями масштаба в кэше. В этом случае запрашивается лист из следующего ближайшего уровня масштаба и пересчитывается для соответствия запрошенному масштабу. Этот пересчет выполняется гораздо быстрее динамического создания листа, однако получаемое изображение отличается от исходного листа. Кэшированные подписи на карте могут с трудом читаться в определенных масштабах вследствие этого пересчета. Для достижения наилучших результатов просматривайте карту в том масштабе, в котором был создан кэш (или в масштабах близких к нему).

Печать карт с кэшем

Стандарты для картографических кэшей и печати веб-карт совпадают с необходимостью сохранять высокую производительность в разных масштабах. Однако вы можете обнаружить, что разрешение кэшированного картографического сервиса не подходит для качества печати. Печатные карты часто требуют разрешения 200 точек на дюйм (dpi) или больше, в то время как кэши карт в ArcGIS обычно отображаются с разрешением 96 dpi.

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

Сервис принимает во внимание, включены ли динамические слои. Когда в картографическом сервисе (включая WMS-сервис) с кэшированным содержимым включены динамические слои, сервис запрашивает исходные данные для картографического сервиса, чтобы экспортировать экстент карты с более высоким разрешением. Это динамическая операция, которая обходит кэш карты.

Если динамические слои не включены в картографическом сервисе или сервисе WMS с кэшированным содержимым, сервис PrintingTools вместо этого экспортирует экстент карты из кэша на сайте сервера. Результатом этой операции будет разрешение кэша карты 96 dpi, что может оказаться недостаточным для печатной карты.

Для печати высококачественного продукта (другими словами, с разрешением для качественной печати) из кэшированного картографического сервиса с помощью сервиса PrintingTools рекомендуется включить параметр динамических слоев.

Повышение скорости отображения кэшированного картографического сервиса

При отправке клиентами запросов к 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 к сервису и задать для него значение по умолчанию, сделайте следующее:

  1. В веб-браузере откройте ArcGIS Server Administrator Directory и войдите под именем пользователя с правами администратора. Адрес URL в формате https://gisserver.domain.com:6443/arcgis/admin.
  2. Щелкните services и выберите картографический сервис, который вы хотите изменить, в списке Сервисы. Если сервис в списке не отображается, он может располагаться в директории под корневой папкой.
  3. Прокрутите вниз страницу Сервис – <service name> (<service type>) и щелкните редактировать.
  4. В диалоговом окне Свойства сервиса найдите раздел свойств сервиса JSON.
  5. Добавьте свойство cacheControlMaxAge в раздел и задайте для него значение (в секундах), например:
    "properties": {
      "cacheControlMaxAge": "2592000",
  6. Щелкните Сохранить изменения.
  7. На странице Service – <service name> (<service type>) проверьте, что свойство cacheControlMaxAge и указанное для него значение отображаются в разделе Свойства.

Наложение кэша

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

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