クライアントによるマップ キャッシュの使用
このトピックは 3 つの部分で構成されています。最初のセクションでは、ArcGIS アプリケーションがマップ キャッシュ内のタイルにアクセスし、それらを使用する方法を紹介します。次のセクションでは、これらのアプリケーションがタイルを後から使用できるように格納する方法について説明します。最後のセクションでは、ArcGIS アプリケーションでマップ キャッシュをオーバーレイするための手順を示します。
アプリケーションによるキャッシュへのアクセスと使用
マップ サービスにタイル スキーマを定義すると、そのサービスは即座にキャッシュを使用します。マップ サービスを表示できる ArcGIS アプリケーションはすべてキャッシュを使用しますが、タイルを取得して使用する方法はアプリケーションによって異なります。
Web アプリケーション
ArcGIS APIs for JavaScript、Flex、および Silverlight を使って開発する際、タイル(キャッシュ)マップ サービスへ接続していることを示す特定のクラスを使用します。たとえば、JavaScript API の場合は、ArcGISTiledMapServiceLayer を使用してキャッシュ サービスに接続します。キャッシュ サービスを使用すると、タイルは REST コールによってキャッシュ ディレクトリからマップ サービスへ取得されます。タイル リクエストは「http://<マップ サービス URL>/tile/<レベル>/<行>/<列>」形式で入力します。
Web アプリケーションでキャッシュ サービスを 1 つ表示しており、タイルが存在しない場所に画面移動した場合、アプリケーションは動的なイメージを表示しないため、何も表示されません。キャッシュされていないエリアに画面移動したときにマップが表示されるようにする方法の 1 つは、オンデマンド キャッシュを有効にすることです。
マップの表示が予想よりも遅い場合、マップ イメージの URL を調べて、アプリケーションがタイルを取得していることを確認してください。これを実行する 1 つの方法として、Mozilla Firefox 4 以上でアプリケーションを開き、[Firefox] → [Web 開発] → [Web コンソール] の順にクリックします。コンソールが表示されたら、[ネットワーク] ボタンをクリックし、マップのズームや移動を行えます。
次のような URL を参照している場合、アプリケーションは REST リクエストからタイルを取得しています。
http://myServer/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 Map タイル スキーマを使用してキャッシュを構築すると、最良のパフォーマンスが得られます。これらのタイル スキーマの 1 つを使用できない場合は、グローブ サービスを使って最適なパフォーマンスを得るようにします。
マップ サービスを ArcGlobe に追加するシナリオの 1 つは、2D マップ キャッシュがすでに作成されていて、2D キャッシュから同一の 3D グローブ キャッシュを作成したい場合です。このシナリオでは、キャッシュの生成にのみ触れ、グローブのナビゲートは行いません。
クライアント側でのレイヤのローカル キャッシュ
ArcMap、ArcGIS Explorer、ArcGlobe は、アクセス済みのタイルをローカル キャッシュですべて保持します。これらのエリアに再びズームまたは画面移動すると、アプリケーションはローカル キャッシュを使用し、サーバから再びタイルを取得しません。
それ以降のセッションで使用するために、または現在のセッションでのみローカル キャッシュを使用するために、ディスク上にローカル キャッシュを保存するかどうかを選択できます。
また、タイルをローカルにキャッシュしないことも選択できます。これにより、ローカル キャッシュのパフォーマンス上の利点は失われますが、サーバから常に最新のタイルを確実に取得することができます。
サーバ管理者がレイヤのローカル キャッシュを無効にしている可能性もあり、その場合は、常に最新のタイルを取得することになります。この場合、キャッシュをローカルで保存するための他のオプションは利用できません。
サーバ キャッシュの表示済みのエリアをサーバ管理者が更新する場合、変更内容を表示するためにはローカル キャッシュを削除する必要があります。ArcMap、ArcGIS Explorer、ArcGlobe は、キャッシュが更新されているかどうかを検出することができません。サーバ管理者は、更新されたデータが利用できる際に、キャッシュの削除をユーザに通知する必要があります。
キャッシュのオーバーレイ
他のマップ キャッシュとオーバーレイされるマップ キャッシュを設計する際には、キャッシュの表示に使用するアプリケーションに応じて、キャッシュの設計時に検討しなければならない重要なポイントがいくつかあります。
Web アプリケーションでのマップ キャッシュのオーバーレイ
ArcGIS APIs for JavaScript、Flex、および Silverlight を使って構築された Web アプリケーションは、キャッシュをオーバーレイする際に座標系とタイル サイズを一致させる必要があります。できるだけ多くの縮尺を一致させることもお勧めします。
このための最も簡単な方法は、両方のキャッシュでタイル スキーマを一致させてから、各キャッシュに適切な縮尺でタイルを作成するだけです。この方法により、座標系とタイル サイズを一致させ、2 つのキャッシュに同じ縮尺があることをソフトウェアに認識させることができます。
ArcMap でのマップ キャッシュのオーバーレイ
ArcMap では、任意の数のマップ キャッシュをオーバーレイできます。キャッシュのタイル スキーマまたは投影法は同じでなくてもかまいません。ただし、その場合は ArcMap がリサンプリングと再投影を実行するため、同等のタイル スキーマと投影法を使用するほうが、マップのパフォーマンスと見た目の品質が向上するかもしれません。
動的な描画の強制
タイルがいくつかのレベルで利用可能であっても、キャッシュを無視し、動的に描画することをサービスに強制したい場合があります。たとえば、ArcGIS Web API で Web アプリケーションを開発しているとします。マップがズーム レベル 0 ~ 15 でキャッシュされていますが、レベル 16 ~ 19 で動的に描画する必要があります。これは、リアルタイム データを大きな縮尺で表示する場合や、マップの対象エリアが広すぎて大きな縮尺でキャッシュできない場合が考えられます。
このシナリオの解決策は、サーバでダイナミック レイヤを有効にし、縮尺 16 ~ 19 でダイナミック レイヤを使用することをマップ リクエストで指示することです。これを行わない場合、サービスは利用可能なタイルから構築されたマップを返しますが、タイルが存在しないエリアは空白になります。