クライアントによるマップ キャッシュの使用
このトピックの内容
- アプリケーションによるキャッシュへのアクセスと使用
- キャッシュされたマップ サービスの表示パフォーマンスを改善する
ArcGIS for Desktop のレイヤーのローカル キャッシュ- キャッシュのオーバーレイ
- 動的な描画の強制
このトピックは 3 つの部分で構成されています。最初のセクションでは、ArcGIS アプリケーションがマップ キャッシュ内のタイルにアクセスし、それらを使用する方法を紹介します。次のセクションでは、これらのアプリケーションがタイルを後から使用できるように格納する方法について説明します。3 番目のセクションでは、Web ブラウザーがローカル キャッシュ内のタイルを再利用する期間を調整することによって、タイルの表示パフォーマンスを改善する方法について説明します。最後のセクションでは、ArcGIS アプリケーションでマップ キャッシュをオーバーレイするための手順を示します。
アプリケーションによるキャッシュへのアクセスと使用
マップ サービスにタイル スキーマを定義すると、そのサービスは即座にキャッシュを使用します。マップ サービスを表示できる ArcGIS アプリケーションはすべてキャッシュを使用しますが、タイルを取得して使用する方法はアプリケーションによって異なります。
Web アプリケーション
ArcGIS API for JavaScript を使って開発する際、タイル (キャッシュ) マップ サービスへ接続していることを示す特定のクラスを使用します。たとえば、ArcGISTiledMapServiceLayer を使用してキャッシュ サービスに接続します。キャッシュ サービスを使用すると、タイルは REST コールによってキャッシュ ディレクトリからマップ サービスへ取得されます。タイル リクエストの形式は、http://<map service URL>/tile/<level>/<row>/<column> のようになります。
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 と ArcGIS Pro
[データの追加] ボタンを使用し、他のマップ サービスを追加する同じ方法でキャッシュ マップ サービスを ArcMap および ArcGIS Pro に追加します。キャッシュを表示する方法として次の 2 種類があります。
- マップ サービスを使用したキャッシュへのアクセス - この方法でキャッシュを表示するには、キャッシュの作成に使用された GIS サーバーとマップ サービスを参照します。この方法では、最初に GIS サーバーに接続することで、サービスにキャッシュがあるかどうかが確認されます。次に、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 プロパティをサービスに追加してデフォルト値を指定するには、以下の手順を実行します。
- Web ブラウザーで ArcGIS Server Administrator Directory を開き、管理者権限を持つユーザーでログインします。URL の形式は、http://gisserver.domain.com:6080/arcgis/admin です。
- [services] をクリックして、変更するマップ サービスを [Services] リストから選択します。サービスがリストに表示されない場合は、[Root folder]の下のディレクトリに配置されている可能性があります。
- [Service - <サービス名> (<サービス タイプ>)] ページで下までスクロールし、[edit] をクリックします。
- [Service Properties] ダイアログ ボックスで、サービス JSON のプロパティ セクションを見つけます。
- cacheControlMaxAge プロパティをそのセクションに追加して、そのプロパティの値 (秒単位) を指定します。以下に例を示します。
"properties": { "cacheControlMaxAge": "2592000",
- [Save Edits] をクリックします。
- [Service - <サービス名> (<サービス タイプ>)] ページの[Properties] セクションで、cacheControlMaxAge プロパティと、それに指定した値が表示されていることを確認します。
ArcGIS for Desktop のレイヤーのローカル キャッシュ
ArcGIS for Desktop (ArcMap、ArcGIS Pro、ArcGIS Explorer、および ArcGlobe) は、アクセス済みのタイルをローカル キャッシュですべて保持します。これらのエリアに再びズームまたは画面移動すると、アプリケーションはローカル キャッシュを使用し、サーバーから再びタイルを取得しません。
それ以降のセッションで使用するために、または現在のセッションでのみローカル キャッシュを使用するために、ディスク上にローカル キャッシュを保存するかどうかを選択できます。
また、タイルをローカルにキャッシュしないことも選択できます。これにより、ローカル キャッシュのパフォーマンス上の利点は失われますが、サーバーから常に最新のタイルを確実に取得することができます。
ArcGIS Server 管理者がレイヤーのローカル キャッシュを無効にしている可能性もあり、その場合は、常に最新のタイルを取得することになります。この場合、キャッシュをローカルで保存するための他のオプションは利用できません。
サーバー キャッシュの表示済みのエリアを ArcGIS Server 管理者が更新する場合、変更内容を表示するためにはローカル キャッシュを削除する必要があります。キャッシュが更新されているかどうかを ArcGIS for Desktop で検出することはできません。ArcGIS Server 管理者は、更新されたデータが利用できる際に、キャッシュの削除をユーザーに通知する必要があります。
キャッシュのオーバーレイ
他のマップ キャッシュとオーバーレイされるマップ キャッシュを設計する際には、キャッシュの表示に使用するアプリケーションに応じて、キャッシュの設計時に検討しなければならない重要なポイントがいくつかあります。
Web アプリケーションでのマップ キャッシュのオーバーレイ
ArcGIS API for JavaScript で構築された Web アプリケーションでは、キャッシュをオーバーレイする際に座標系とタイル サイズが一致する必要があります。できるだけ多くの縮尺を一致させることもお勧めします。
このための最も簡単な方法は、両方のキャッシュでタイル スキーマを一致させてから、各キャッシュに適切な縮尺でタイルを作成するだけです。この方法により、座標系とタイル サイズを一致させ、2 つのキャッシュに同じ縮尺があることをソフトウェアに認識させることができます。
ArcMap および ArcGIS Pro でのマップ キャッシュのオーバーレイ
ArcMap および ArcGIS Pro では、任意の数のマップ キャッシュをオーバーレイできます。キャッシュのタイル スキーマまたは投影法は同じでなくてもかまいません。ただし、実行されるリサンプリングと再投影のために、同等のタイル スキーマと投影法を使用するほうが、マップのパフォーマンスと見た目の品質が向上するかもしれません。
動的な描画の強制
タイルがいくつかのレベルで利用可能であっても、キャッシュを無視し、動的に描画することをサービスに強制したい場合があります。たとえば、ArcGIS API for JavaScript を使用して Web アプリケーションを開発するとします。ズーム レベル 0 ~ 15 でキャッシュされるマップが用意されていますが、レベル 16 ~ 19 で動的に描画する必要があります。リアルタイム データを大縮尺で表示する場合やマップでカバーするエリアが広すぎるために大縮尺でキャッシュできない場合がこれに該当します。
このシナリオの解決策は、サーバーでダイナミック レイヤーを有効にし、縮尺 16 ~ 19 でダイナミック レイヤーを使用することをマップ リクエストで指示することです。これを行わない場合、サービスは利用可能なタイルから構築されたマップを返しますが、タイルが存在しないエリアは空白になります。