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

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

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

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

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

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

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

ПодсказкаПодсказка:

Если карта отображается медленнее, чем нужно, просмотрите 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

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

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

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

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) найдите раздел "properties" сервиса JSON.
  5. Добавьте свойство cacheControlMaxAge в раздел и задайте для него значение (в секундах), например:
    "properties": {
      "cacheControlMaxAge": "2592000",
    
  6. Щелкните Сохранить изменения (Save Edits).
  7. На странице Service – <service name> (<service type>) проверьте, что свойство cacheControlMaxAge и указанное для него значение отображаются в разделе Свойства (Properties).

Локальное кэширование слоев в ArcMap, ArcGIS Explorer и ArcGlobe

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5/16/2014