クライアント アプリケーションでマップ キャッシュを操作する場合、各アプリケーションがタイルに対してどのように機能するか、タイルをローカルに格納するかどうか、キャッシュ オーバーレイにはどのような状況が必要とされるかを検討する必要があります。
アプリケーションによるキャッシュへのアクセスと使用
マップ サービスにタイル スキーマを定義すると、そのサービスは即座にキャッシュを使用します。 マップ サービスを表示できる ArcGIS アプリケーションはすべてキャッシュを使用しますが、タイルを取得して使用する方法はアプリケーションによって異なります。
Web アプリケーション
ArcGIS API for JavaScript を使って開発する際、タイル (キャッシュ) マップ サービスに接続していることを示す特定のクラスを使用します。 たとえば、ArcGISTiledMapServiceLayer を使用してキャッシュ サービスに接続します。 キャッシュ サービスを使用すると、タイルは REST コールによってキャッシュ ディレクトリからマップ サービスへ取得されます。 タイル リクエストの形式は、https://<map service URL>/tile/<level>/<row>/<column> のようになります。
Web アプリケーションでキャッシュ サービスを 1 つ表示しており、タイルが存在しない場所に画面移動した場合、アプリケーションは動的なイメージを表示しないため、何も表示されません。 キャッシュされていないエリアに画面移動したときにマップが表示されるようにする方法の 1 つは、オンデマンド キャッシュを有効にすることです。
ヒント:
マップの表示が予想よりも遅い場合、マップ イメージの URL を調べて、アプリケーションがタイルを取得していることを確認してください。 これを実行する 1 つの方法として、Mozilla Firefox でアプリケーションを開き、[Firefox] > [Web 開発] > [Web コンソール] の順にクリックします。 コンソールが表示されたら、[ネットワーク] ボタンをクリックし、マップのズームや移動を行えます。
次のような URL が表示された場合、アプリケーションは REST リクエストからタイルを取得しています。
https://gisserver.domain.com:6443/arcgis/rest/services/myService/MapServer/tile/10/1723/3495.jpg
マップ イメージに別の URL が表示された場合、アプリケーションが効率の悪い方法でタイルを取得しているか、キャッシュが使用されていません。
ArcGIS Pro
他のマップサービスを追加する場合と同じ方法で、[データの追加] ボタンを使用してキャッシュ マップ サービスを ArcGIS Pro に追加します。 キャッシュを表示する方法として次の 2 種類があります。
- マップ サービスを使用したキャッシュへのアクセス - この方法でキャッシュを表示するには、キャッシュの作成に使用された GIS サーバーとマップ サービスを参照します。 この方法では、最初に GIS サーバーに接続することで、サービスにキャッシュがあるかどうかが確認されます。 次に、ArcMap は、サーバーのファイル システムにあるキャッシュ ディレクトリからタイルを取得します。
- ラスター データセットとしてキャッシュにアクセス - この方法でキャッシュを表示するには、キャッシュ タイルを含むディレクトリを参照して、データセットを追加します。 キャッシュには、[データの追加] ボタンを使ってその他すべてのラスターを追加する際に使用するアイコンと同じものが表示されます。 ラスターとしてアクセスされるキャッシュは表示専用で、検索することはできません。 このタイプのキャッシュを使用する利点は、これがマップ サービスと結び付けられておらず、キャッシュ ディレクトリにアクセス可能であれば、サーバーから切断しているときに表示できる点です。
キャッシュの縮尺レベルと完全に一致する縮尺でタイルがリクエストされた場合、マップ サービスは直接タイルを返します。 ほとんどの場合、リクエストがキャッシュ内の縮尺レベルと正確に一致することはありません。 この場合は、ArcMap は次に近い縮尺レベルのタイルがリクエストされ、リクエストされた縮尺に合わせてそれをリサンプリングします。 このリサンプリングは、タイルを動的に生成するよりもはるかに高速ですが、元のタイルと表示が異なるイメージが作成されてしまいます。 ここのリサンプリングにより、キャッシュされているマップ ラベルを特定の縮尺で読み取ることが難しくなる場合があります。 最もよい結果を得るために、キャッシュが作成された縮尺か、それに近い縮尺でマップを表示してください。
キャッシュされたコンテンツを含むマップの印刷
マップ キャッシュおよび Web マップ印刷の標準では、多数の縮尺で一貫したパフォーマンスを確保する必要性に合わせて調整が行われます。 ただし、キャッシュ マップ サービスの解像度が印刷品質を満たしていない場合があります。 印刷されたマップでは、ほとんどの場合に 200 dpi 以上の解像度が必要となりますが、ArcGIS のマップ キャッシュは通常 96 dpi で表示されます。
ArcGIS Server に組み込まれている PrintingTools サービスを使用すると、マップ キャッシュとマップ印刷の両方の目的に合わせて調整することができます。 この場合には、ダイナミック レイヤーが使用されます。ダイナミック レイヤーは、マップ サービスでデフォルトとして有効になっています。
このサービスでは、ダイナミック レイヤーが有効になっているかどうかが考慮されます。 キャッシュされたコンテンツを含むマップ サービス (WMS サービスなど) でダイナミック レイヤーが有効になっている場合、このサービスはマップ サービスのソース データのクエリを実行して、マップ範囲を高解像度でエクスポートします。 これは、マップ キャッシュを回避する動的な処理です。
キャッシュされたコンテンツを含むマップ サービスまたは WMS サービスでダイナミック レイヤーが有効になっていない場合、PrintingTools サービスは代わりに、サーバー サイト上のキャッシュからマップ範囲をエクスポートします。 この処理のマップ結果は、解像度が 96 dpi のマップ キャッシュになりますが、印刷されたマップの予想品質を満たしていない場合があります。
PrintingTools サービスを使用してキャッシュ マップ サービスから高品質の出力 (つまり、印刷品質解像度) を印刷するために、ダイナミック レイヤー オプションを有効にしておくことをお勧めします。
キャッシュ マップ サービスの表示パフォーマンスの改善
クライアントが 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 プロパティの値の定義
ブラウザーで、キャッシュされた応答を使用できる期間を指定するには、cacheControlMaxAge プロパティを定義します。 このプロパティは、個別のサービス キャッシュに対して設定できます。 ArcGIS Server が完全な応答を送信する必要性を軽減することによって、ブラウザーのキャッシュを効率化し、アプリケーションを最適化し、ネットワーク帯域幅を節約することができます。
クライアントがタイルをローカルにキャッシュすることを許可しないキャッシュ マップ サービスの場合、デフォルト値は 0 です。これは、ブラウザーが必ずリクエストを再送し、ArcGIS Server がそのリクエストを処理して、コンテンツが変更されている場合に完全な応答をブラウザーに送信することを意味します。 このデフォルト値は、ほとんどのアプリケーションで有効に機能します。
クライアントがタイルをローカルにキャッシュすることを許可するキャッシュ マップ サービスの場合、デフォルト値は 86,400 秒 (1 日) です。 これは、リクエストが 1 日以内に繰り返された場合、ブラウザーがキャッシュ内の応答を使用するということを意味します。
マップやデータが頻繁に変更されないキャッシュされたマップ サービスの場合は、ネットワーク トラフィックを最小限に抑えるために、デフォルト値を 30 日 (259,2000 秒) まで大きくすることをお勧めします。
cacheControlMaxAge プロパティをサービスに追加してデフォルト値を指定するには、以下の手順を実行します。
- Web ブラウザーで ArcGIS Server Administrator Directory を開き、管理者権限を持つユーザーでログインします。 URL の形式は https://gisserver.domain.com:6443/arcgis/admin です。
- [services] をクリックして、変更するマップ サービスを [Services] リストから選択します。 サービスがリストに表示されない場合は、[ルート フォルダー] の下のディレクトリに配置されている可能性があります。
- [Service - <サービス名> (<サービス タイプ>)] ページで下までスクロールし、[edit] をクリックします。
- [Service Properties] ダイアログ ボックスで、サービス JSON のプロパティ セクションを見つけます。
- cacheControlMaxAge プロパティをそのセクションに追加して、そのプロパティの値 (秒単位) を指定します。以下に例を示します。
"properties": { "cacheControlMaxAge": "2592000",
- [Save Edits] をクリックします。
- [Service - <サービス名> (<サービス タイプ>)] ページの [Properties] セクションで、cacheControlMaxAge プロパティと、それに指定した値が表示されていることを確認します。
キャッシュのオーバーレイ
他のマップ キャッシュとオーバーレイされるマップ キャッシュを設計する場合、アプリケーションでは、座標系とタイル サイズを一致させる必要があります。 できるだけ多くの縮尺を一致させることもお勧めします。
最も簡単な方法は、両方のキャッシュでタイル スキーマを一致させてから、各キャッシュに適切な縮尺でタイルを作成するだけです。 この方法により、座標系とタイル サイズを一致させ、2 つのキャッシュに同じ縮尺があることをソフトウェアに認識させることができます。