クライアントによるマップ キャッシュの使用

このトピックは 3 つの部分で構成されています。最初のセクションでは、ArcGIS アプリケーションがマップ キャッシュ内のタイルにアクセスし、それらを使用する方法を紹介します。次のセクションでは、これらのアプリケーションがタイルを後から使用できるように格納する方法について説明します。3 番目のセクションでは、Web ブラウザがローカル キャッシュ内のタイルを再利用する期間を調整することによって、タイルの表示パフォーマンスを改善する方法について説明します。最後のセクションでは、ArcGIS アプリケーションでマップ キャッシュをオーバーレイするための手順を示します。

アプリケーションによるキャッシュへのアクセスと使用

マップ サービスにタイル スキーマを定義すると、そのサービスは即座にキャッシュを使用します。マップ サービスを表示できる ArcGIS アプリケーションはすべてキャッシュを使用しますが、タイルを取得して使用する方法はアプリケーションによって異なります。

Web アプリケーション

ArcGIS API for JavaScript、Flex、および Silverlight を使って開発する際、タイル(キャッシュ)マップ サービスへ接続していることを示す特定のクラスを使用します。たとえば、JavaScript API の場合は、ArcGISTiledMapServiceLayer を使用してキャッシュ サービスに接続します。キャッシュ サービスを使用すると、タイルは REST コールによってキャッシュ ディレクトリからマップ サービスへ取得されます。タイル リクエストは「http://<マップ サービス URL>/tile/<レベル>/<行>/<列>」形式で入力します。

Web アプリケーションでキャッシュ サービスを 1 つ表示しており、タイルが存在しない場所に画面移動した場合、アプリケーションは動的なイメージを表示しないため、何も表示されません。キャッシュされていないエリアに画面移動したときにマップが表示されるようにする方法の 1 つは、オンデマンド キャッシュを有効にすることです。

ヒントヒント:

マップの表示が予想よりも遅い場合、マップ イメージの URL を調べて、アプリケーションがタイルを取得していることを確認してください。これを実行する 1 つの方法として、Mozilla Firefox でアプリケーションを開き、[ツール] [Web 開発] [Web コンソール] の順にクリックします。コンソールが表示されたら、[ネットワーク] ボタンをクリックし、マップのズームや移動を行えます。

  • 次のような URL を参照している場合、アプリケーションは REST リクエストからタイルを取得しています。

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

  • マップ イメージに別の URL が表示された場合、アプリケーションが効率の悪い方法でタイルを取得しているか、キャッシュが使用されていません。

ArcMap

[データの追加] ボタンを使用し、他のマップ サービスを追加する同じ方法でキャッシュ マップ サービスを ArcMap に追加します。ArcMap でキャッシュを表示するための方法には、次の 2 つがあります。

  • マップ サービスを通してキャッシュにアクセスする。この方法でキャッシュを表示するには、キャッシュの作成に使用された GIS サーバとマップ サービスを参照します。この方法では、ArcMap は最初に GIS サーバに接続して、サービスにキャッシュがあるかどうかを確認します。次に、ArcMap は、サーバのファイル システムにあるキャッシュ ディレクトリからタイルを取得します。
  • ラスタ データセットとしてキャッシュにアクセスする。この方法でキャッシュを表示するには、キャッシュ タイルが含まれているディレクトリを参照して、データセットを ArcMap へ追加することを選択します。キャッシュには、[データの追加] ボタンを使ってその他すべてのラスタを追加する際に使用するアイコンと同じものが表示されます。ラスタとしてアクセスされるキャッシュは表示専用で、検索することはできません。このタイプのキャッシュを使用する利点は、これがマップ サービスと結び付けられておらず、キャッシュ ディレクトリにアクセス可能であれば、サーバから切断しているときに表示できる点です。

キャッシュの縮尺レベルと完全に一致する縮尺でタイルがリクエストされた場合、マップ サービスは直接タイルを返します。ほとんどの場合、リクエストがキャッシュ内の縮尺レベルと正確に一致することはありません。この場合は、通常、ArcMap は次に近い縮尺レベルのタイルをリクエストし、リクエストされた縮尺に合わせてそれをリサンプリングします。このリサンプリングは、タイルを動的に生成するよりもはるかに高速ですが、元のタイルと表示が異なるイメージが作成されてしまいます。このリサンプリングにより、キャッシュされているマップ ラベルを ArcMap が特定の縮尺で読み取ることが難しい場合があります。最もよい結果を得るために、キャッシュが作成された縮尺か、それに近い縮尺でマップを表示してください。

ArcGlobe と ArcGIS Explorer

ArcGlobe および ArcGIS Explorer は 2D キャッシュを読み取り、グローブ サーフェス上にドレープすることができます。ArcGIS Online/Google マップ/Bing Maps タイル スキーマを使用してキャッシュを構築すると、最良のパフォーマンスが得られます。これらのタイル スキーマの 1 つを使用できない場合は、グローブ サービスを使って最適なパフォーマンスを得るようにします。

マップ サービスを ArcGlobe に追加するシナリオの 1 つは、2D マップ キャッシュがすでに作成されていて、2D キャッシュから同一の 3D グローブ キャッシュを作成したい場合です。このシナリオでは、キャッシュの生成にのみ触れ、グローブのナビゲートは行いません。

キャッシュされたマップ サービスの表示パフォーマンスを改善する

クライアントが ArcGIS Server にリクエストを送信してマップ サービスを表示するときに、通常はサーバからの応答がブラウザによって一定期間キャッシュされ、再利用されます。この動作によって、ArcGIS Server はマップ サービスの最高の表示パフォーマンスを実現できます。ただし、アプリケーションでのマップ サービスと関連データの使用方法に応じて、ブラウザがキャッシュ内の応答を使用する期間を調整することを検討してください。これを行うには、cacheControlMaxAge というプロパティをサービスの JSON(JavaScript Object Notation)に追加します。

cacheControlMaxAge プロパティの使用方法

ArcGIS Server マップ サービスの応答には、エンティティ タグ(ETag)ヘッダーとキャッシュ コントロール ヘッダーが含まれています。ETag ヘッダーの値は、応答の一意の識別子です。キャッシュ コントロール ヘッダーには、キャッシュから応答を再利用できる最大期間に関する情報をブラウザに提供する max-age 値が含まれています。この値は、cacheControlMaxAge プロパティによって制御されます。

リクエストが繰り返された場合、キャッシュの最大期間の期限が切れていなければ、ブラウザは、サーバにリクエストを送信しないで、キャッシュされている応答を使用します。キャッシュの最大期間の期限が切れている場合、ブラウザは、リクエストをサーバに送信し、キャッシュ内の応答に対応する ETag 値を使用して IF-NONE-MATCH ヘッダーを設定する必要があります。ArcGIS Server は、リクエストを評価し、ETag 値を使用して、応答が変更されているかどうかを判定します。サーバからの応答がブラウザ上のコピーと異なる場合、サーバはまったく新しい応答をブラウザに送信します。応答がブラウザ上のコピーと同一である場合、サーバは、キャッシュ内の応答を引き続き使用するようにブラウザに警告します。

cacheControlMaxAge プロパティの値の定義

ArcGIS Server 管理者は、cacheControlMaxAge プロパティを定義して、ブラウザがキャッシュされた応答を使用できる期間を指定できます。ArcGIS Server が完全な応答を送信する必要性を軽減することによって、ブラウザのキャッシュを効率化し、アプリケーションを最適化し、ネットワーク帯域幅を節約することができます。

クライアントがタイルをローカルにキャッシュすることを許可しないキャッシュされたマップ サービスの場合、デフォルトは 0 です。これは、ブラウザが必ずリクエストを再送し、ArcGIS Server がそのリクエストを処理して、コンテンツが変更されている場合に完全な応答をブラウザに送信するということを意味します。このデフォルト値は、ほとんどのアプリケーションで有効に機能します。

クライアントがタイルをローカルにキャッシュすることを許可するキャッシュされたマップ サービスの場合、デフォルト値は 86,400 秒(1 日)です。これは、リクエストが 1 日以内に繰り返された場合、ブラウザがキャッシュ内の応答を使用するということを意味します。

マップやデータが頻繁に変更されないキャッシュされたマップ サービスの場合、ネットワーク トラフィックを最小限に抑えるために、デフォルト値を 30 日(259.2000 秒)以上に増やすことをお勧めします。

cacheControlMaxAge プロパティをサービスに追加してデフォルト値を指定するには、以下の手順を実行します。

  1. Web ブラウザで ArcGIS Server Administrator Directory を開き、管理者権限を持つユーザでログインします。URL の形式は、http://gisserver.domain.com:6080/arcgis/admin です。
  2. [services] をクリックして、変更するマップ サービスを [Services] リストから選択します。サービスがリストに表示されない場合は、[Root folder]の下のディレクトリに配置されている可能性があります。
  3. [Service - <サービス名> (<サービス タイプ>)] ページで下までスクロールし、[edit] をクリックします。
  4. [Service Properties] ダイアログ ボックスで、サービス JSON の ["properties"] セクションを見つけます。
  5. cacheControlMaxAge プロパティをそのセクションに追加して、そのプロパティの値(秒単位)を指定します。以下に例を示します。
    "properties": {
      "cacheControlMaxAge": "2592000",
    
  6. [Save Edits] をクリックします。
  7. [Service - <サービス名> (<サービス タイプ>)] ページの[Properties] セクションで、cacheControlMaxAge プロパティと、それに指定した値が表示されていることを確認します。

ArcMap、ArcGIS Explorer、および ArcGlobe でのレイヤのローカル キャッシュ

ArcMap、ArcGIS Explorer、ArcGlobe は、アクセス済みのタイルをローカル キャッシュですべて保持します。これらのエリアに再びズームまたは画面移動すると、アプリケーションはローカル キャッシュを使用し、サーバから再びタイルを取得しません。

それ以降のセッションで使用するために、または現在のセッションでのみローカル キャッシュを使用するために、ディスク上にローカル キャッシュを保存するかどうかを選択できます。

また、タイルをローカルにキャッシュしないことも選択できます。これにより、ローカル キャッシュのパフォーマンス上の利点は失われますが、サーバから常に最新のタイルを確実に取得することができます。

ArcGIS Server 管理者がレイヤのローカル キャッシュを無効にしている可能性もあり、その場合は、常に最新のタイルを取得することになります。この場合、キャッシュをローカルで保存するための他のオプションは利用できません。

サーバ キャッシュの表示済みのエリアを ArcGIS Server 管理者が更新する場合、変更内容を表示するためにはローカル キャッシュを削除する必要があります。ArcMap、ArcGIS Explorer、ArcGlobe は、キャッシュが更新されているかどうかを検出することができません。ArcGIS Server 管理者は、更新されたデータが利用できる際に、キャッシュの削除をユーザに通知する必要があります。

キャッシュのオーバーレイ

他のマップ キャッシュとオーバーレイされるマップ キャッシュを設計する際には、キャッシュの表示に使用するアプリケーションに応じて、キャッシュの設計時に検討しなければならない重要なポイントがいくつかあります。

Web アプリケーションでのマップ キャッシュのオーバーレイ

ArcGIS API for JavaScript、Flex、および Silverlight を使用して構築された Web アプリケーションは、キャッシュをオーバーレイする際に座標系とタイル サイズを一致させる必要があります。できるだけ多くの縮尺を一致させることもお勧めします。

このための最も簡単な方法は、両方のキャッシュでタイル スキーマを一致させてから、各キャッシュに適切な縮尺でタイルを作成するだけです。この方法により、座標系とタイル サイズを一致させ、2 つのキャッシュに同じ縮尺があることをソフトウェアに認識させることができます。

ArcMap でのマップ キャッシュのオーバーレイ

ArcMap では、任意の数のマップ キャッシュをオーバーレイできます。キャッシュのタイル スキーマまたは投影法は同じでなくてもかまいません。ただし、その場合は ArcMap がリサンプリングと再投影を実行するため、同等のタイル スキーマと投影法を使用するほうが、マップのパフォーマンスと見た目の品質が向上するかもしれません。

動的な描画の強制

タイルがいくつかのレベルで利用可能であっても、キャッシュを無視し、動的に描画することをサービスに強制したい場合があります。たとえば、ArcGIS Web API で Web アプリケーションを開発しているとします。ズーム レベル 0 〜 15 でキャッシュされるマップが用意されていますが、レベル 16 〜 19 で動的に描画する必要があります。リアルタイム データを大縮尺で表示する場合やマップでカバーするエリアが広すぎるために大縮尺でキャッシュできない場合がこれに該当します。

このシナリオの解決策は、サーバでダイナミック レイヤを有効にし、縮尺 16 〜 19 でダイナミック レイヤを使用することをマップ リクエストで指示することです。これを行わない場合、サービスは利用可能なタイルから構築されたマップを返しますが、タイルが存在しないエリアは空白になります。

6/13/2014