ArcGIS には、ユーザーのアクセスに応じてマップ キャッシュ タイルをオンデマンドで作成するオプションがあります。 キャッシュされていないエリアに最初にアクセスしたユーザーは、該当する部分のタイルがサーバーによって描画されるまで待つ必要があります。 これらのタイルはサービスのキャッシュ フォルダーに追加され、サーバー管理者によって更新または削除されるまでサーバー上に残ります。 したがって、後からそのエリアにアクセスしたユーザーは、タイルが作成されるのを待たずに済みます。
オンデマンド キャッシュをうまく利用すれば、時間とディスク容量をかなり節約することができます。 ほとんどのマップにおいて、大縮尺の (拡大表示されている) 場合は特に、マップ ユーザーにとって意味のない、使い道のない、あるいは興味のないエリアを表示します。 オンデマンド キャッシュは、こうした必要のないタイルを作成して格納する作業を不要にすると同時に、ユーザーに必要なエリアのみを表示できるオプションを提供します。
オンデマンド キャッシュは便利な機能ですが、使い方を誤ったりむやみに使用したりすると、パフォーマンスに悪影響を与えることがあります。 以下のセクションでは、オンデマンド キャッシュを最も効果的に使用するためのヒントを示します。
パフォーマンスの最適化
完全なマップ キャッシュの利点の 1 つは、複雑なマップをすばやく提供できることです。これは、ArcGIS Server サイトがマップのタイル イメージを提供しており、リクエストのたびにマップを描画する必要がないためです。 一方、オンデマンド キャッシュを使用する場合は、ユーザーがキャッシュされていないエリアにアクセスしたときに、ArcGIS Server サイトがタイルを動的に描画する必要があります。 ArcGIS Server サイトは一連のタイルを一度に作成するため、この動的な描画は通常のリクエストよりも時間がかかります。 この一連のタイルの大きさは、マップ サービスがアンチエイリアスを使用している場合は 2048 x 2048 ピクセル、アンチエイリアスを使用していない場合は 4096 x 4096 ピクセルになります。 結果として、サーバー管理者は広いエリアを適度な時間内で描画できるようにマップを作成しておく必要があります。
詳細:
この場合、ArcGIS Server サイトはタイルを 1 つずつは作成しません。1 つずつ作成すると、ラベリング エンジンが隣接するタイルに存在するラベルを見分ける方法がないので、重複するラベルが多数作成されてしまうためです。
次の 2 つのセクションでは、オンデマンド キャッシュのパフォーマンス コストを削減するための方法をいくつか紹介します。
オンデマンド キャッシュを使用する場所の決定
オンデマンド キャッシュを構築する際には、オンデマンドで作成するエリアと、事前にキャッシュしておくエリアを決定することが最も重要です。 オンデマンド キャッシュを使ってキャッシュ全体を構築することは避けてください。 ユーザー トラフィックが最も多いと予想されるマップのエリアに、常にいくつかのタイルを事前作成しておく必要があります。これにより、オンデマンドでタイルをリクエストすることでユーザーがサーバー リソースを消費する可能性を最小限に抑えます。
ユーザー トラフィックがマップのどのエリアに最も集中するかは、マップの目的とユーザー層によって決まります。 一般的なベースマップでは、地名、道路、海岸線、公園などの主要エリアに、他のエリアよりもアクセスが集中する可能性があります。
主題マップでは、(ベースマップとは対照的に) アクセス頻度の高い場所の傾向が異なるかもしれません。 たとえば、炭鉱会社が使用するマップの場合は、鉱物資源が最も豊富なエリアのアクセス頻度が最も高い可能性があります。 これは、一般の人にとって重要でない非居住エリアや山岳エリアにも当てはまります。
事前にキャッシュしておくエリアを決定するためには、オンラインまたはデスクトップ上で、現在のマップの使用パターンを調べる必要があります。 ユーザーがナビゲートする傾向がある場所と、ユーザーが検索するフィーチャを非公式に観察すると、多くのことがわかります。
また、データの可用性と解像度も重要です。 特定エリアのデータが不足している、または存在しない場合は、そうしたエリアのキャッシュを省略することができます。 オンデマンド タイルがリクエストされた場合でも、表示する情報がないと描画にそれほど時間はかかりません。
また、データがマップの目的に深く結び付いていることも考えられます。 たとえば、輸送部門に勤務している場合は、道路や鉄道が密集しているエリアを事前に必ずキャッシュしておきます。 [カーネル密度 (Kernel Density)] などの空間解析ツールは、関心の高いフィーチャが集中しているエリアを特定するのに役立ちます。
ユーザーが最も頻繁にアクセスするエリアを割り出した後、それらのエリアを分離するフィーチャクラスを作成します。 [マップ サービス キャッシュのタイルを管理 (Manage Map Server Cache Tiles)] ツールを実行するときに、このフィーチャクラスを参照して、フィーチャクラスの境界内のタイルだけが作成されるようにします。
モデルまたはスクリプトで複数のツールを連結し、アクセス頻度の高い場所のフィーチャクラスを取得することもできます。 モデルでは、アクセス頻度が高いことが予想されるさまざまなフィーチャを入力値として使用し、必要に応じてフィーチャからバッファーを作成するか、それらの密度を割り出します。最後に、出力で後処理を実行し、キャッシュ テンプレートに適したフィーチャクラスが得られるようにします。 たとえば、[ポリゴンの単純化 (Simplify Polygon)] ジオプロセシング ツールを使用して、キャッシュ ツールの速度を低下させる過度に多い頂点を削除できます。
マップにおいてアクセス頻度の高いエリアを分離すればするほど、タイルをオンデマンドで作成するのではなく、キャッシュ済みのタイルで処理できるリクエストの数が増えていきます。 大縮尺では、マップのほんの一部のキャッシュだけで、大半のユーザー リクエストに対処することができます。 戦略的に追加の縮尺レベルをキャッシュとして保存するために、時間とディスク容量を使用することもできます。
マップのテストと最適化
多くの組織が所有する、もともとはデスクトップ上での GIS 操作に使用するためのものであったマップ ドキュメントは複雑です。 多くの場合、Web ユーザーが期待するような応答時間を達成するためには、これらのマップを調整する必要があります。
マップを変更する前に、狭いエリアのテスト キャッシュを作成して、基準となる数値を割り出しておきます。 都市部と農村部、平野部と山岳部など、マップ内で異なる地形がうまく組み合わされているエリアを選択します。 テスト キャッシュを作成するのにかかった時間を記録してください。 次に、オンデマンド キャッシュを有効にし、キャッシュされていないエリアにズームします。 さまざまな縮尺でタイルを表示するのにかかった時間を記録してください。 この時点でパフォーマンスが許容レベルであれば、調整をする必要はありません。
高度な方法でマップ サービスの非効率的なレイヤーを検出するには、ArcGIS Server サイトのログ レベルを [冗長] に設定します。 ArcGIS Pro でブックマークにズームするなど、マップ サービスへの描画リクエストを 1 つ作成します。 次に、ArcGIS Server Manager で ArcGIS Server ログを調べ、各レイヤーの描画にかかった時間を記録します。 描画に最も時間がかかっているレイヤーはすぐに特定できます。 マップ上のエリアを無作為に選択し、さまざまなキャッシュの縮尺でこの作業を繰り返すことをお勧めします。 作業が完了したら、ログ レベルを前のレベルに戻すことを忘れないでください。冗長のログ レベルは、通常は必要とされない多くの情報を書き出します。
マップを最適化した後は、別のテスト キャッシュを作成し、タイルをオンデマンドで作成するのにかかった時間を記録します。 パフォーマンスに依然として問題がある場合は、次のいずれかを実行してください。
- より大きなエリアを事前にキャッシュします。 これにより、オンデマンド タイルが使用されることが少なくなります。 最大縮尺では、オンデマンド キャッシュを最もアクセス頻度の少ないエリアに限定することができます。そうすれば、一度に多くのフィーチャを描画する必要がなくなります。
- 完全キャッシュを作成します。 すべてのタイルを事前にキャッシュすれば、タイルをオンデマンドで作成する必要がなくなります。 このオプションは、完全キャッシュを作成するための時間とディスク容量があり、キャッシュが頻繁に更新されない場合に最も適しています。 キャッシュ作成のサーバーのダウンタイムが心配である場合は、夜間や週末に実行するキャッシュ ジョブをプログラムとして作成し、サービスのキャッシュが完全になるまで着実に構築することができます。 また、1 つのサービス インスタンスをキャッシュに割り当て、他のインスタンスにユーザー リクエストを処理させることもできます。
- 動的描画サービスを使用します。 完全キャッシュの構築が実現可能なオプションではなく、動的描画サービスのパフォーマンスが容認できるものである場合は、キャッシュの構築を完全に省略することもできます。 このオプションでは、最適なパフォーマンスは提供されませんが、マップ サービスのデータは常に最新の状態に保たれます。
タイルの更新
キャッシュ マップ サービスのソース データを編集する際は、ユーザーが変更データを参照できるようにする前に、キャッシュを更新する必要があります。 推奨事項に従い、フィーチャクラスに基づいてエリアを事前にキャッシュし、残りのキャッシュをオンデマンドで作成する場合は、必要なすべてのエリアが更新に含まれるよう注意する必要があります。
オンデマンドで作成されたタイルを使用している場合、キャッシュを更新するために選択できる手法として、次の 2 つがあります。
オンデマンドで作成したタイルをすべて削除してから更新を実行します
タイルをオンデマンドで作成している場合は、フィーチャクラスに基づいて特定のエリアを事前にキャッシュしているはずです。 通常は、更新もそのフィーチャクラスに基づいて実行しますが、オンデマンド タイルを削除しなければ、それらは無効な古い情報となります。
タイルを削除するには、[マップ サービス キャッシュのタイルを管理 (Manage Map Server Cache Tiles)] ツールを [タイルの削除] モードで実行します。 タイルは、事前にキャッシュしたときとは逆のフィーチャクラスに基づいて削除します。 ArcGIS の編集ツールを使用して、マップの全範囲を表すポリゴンを作成し、事前にキャッシュされているエリアをホールとして切り取ります。 結果として得られる「ドーナツ ポリゴン」が、タイルを削除する必要のあるエリアです。 ArcGIS Pro の [クリップ] ツールを使用してポリゴンでホールを切り取る方法については、「ポリゴン フィーチャからホールを切り取る」をご参照ください。
また、キャッシュからタイルをすべて削除してから更新を開始することもできますが、キャッシュが大きい場合は ArcGIS Server サイトのリソースに悪影響を与える可能性があります。
更新のたびに特定の場所がオンデマンドでキャッシュされるまで待たされることについて、ユーザーから苦情がある場合は、その場所を事前にキャッシュされるエリアに追加してください。 事前にキャッシュする場所がうまく選択されていれば、オンデマンド キャッシュはマップのそれほど重要でないエリアでまれに発生するだけになるはずです。 ユーザーがマップ上のある場所にたびたびアクセスする場合は、その場所を事前にキャッシュしてください。
キャッシュの更新対象をデータが編集されたエリアに限定します。
この操作を行う方法の 1 つは、ジオデータベースの履歴管理機能またはカスタム ツールを使用して、最後に更新された後の変更をすべて追跡し、変更されたエリアをフィーチャクラスにエクスポートして、フィーチャクラスの境界に基づいてタイルを更新することです。
編集が発生したエリアだけを更新することが確実であれば、オンデマンドで作成されたタイルをすべて削除する必要はありません。