Skip To Content

Использование кэша карт клиентами

В этом разделе

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

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

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

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

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

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

Подсказка:

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

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

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

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

ArcMap и ArcGIS Pro

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

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

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

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

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

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

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

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

Чтобы добавить свойство cacheControlMaxAge к сервису и задать для него значение по умолчанию, сделайте следующее:

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

Локальное кэширование слоев в ArcGIS for Desktop

ArcGIS for Desktop (ArcMap, ArcGIS Pro, ArcGIS Explorer и ArcGlobe) поддерживают локальный кэш листов, которые вы просматривали ранее. При масштабировании и перемещинии в этих областях, приложения используют локальный кэш и не получают повторно листы с сервера.

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

Можно также отказаться от локального кэширования листов. Несмотря на то что это лишит преимуществ локального кэширования в плане производительности, с сервера всегда будут браться только самые новые листы.

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

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

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

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

Наложение картографического кэша в веб-приложениях

Для веб-приложений, которые будут созданы с использованием интерфейсов ArcGIS API for JavaScript, необходимо, чтобы при наложении кэша совпадали системы координат и размеры листов. Рекомендуется также сопоставлять как можно больше масштабов.

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

Наложение картографического кэша в ArcMap и ArcGIS Pro

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

Принудительная динамическая прорисовка

Существуют некоторые случаи, когда вам может понадобиться заставить сервис игнорировать кэш и использовать динамическую прорисовку, даже когда листы доступны на некоторых уровнях. Например, представьте, что вы разрабатываете веб-приложение с помощью интерфейсов ArcGIS API for JavaScript. У вас есть карта, которая кэшируется на масштабных уровнях 0 – 15, но должна прорисовываться динамически на уровнях 16 – 19. Такое возможно, если требуется отображение данных в крупном масштабе в режиме реального времени или если карта охватывает слишком большую область для кэширования в крупных масштабах.

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