フフィーチャの境界に基づいたマップ キャッシュ
ArcGIS Server のマップ キャッシュ ツールを使用すると、タイル作成の空間をフィーチャクラスの境界に制限することができます。これを行うには、[マップ サービス キャッシュのタイルを管理(Manage Map Server Cache Tiles)] ツールの下部にある [フィーチャクラスを使用して特定のエリアを更新] オプションを使用します。
フィーチャクラスの境界に基づくキャッシュにより、タイルを必要な場所のみに作成できるため、空のエリアまたは無意味なエリアのキャッシュを回避できます。たとえば 1 つの国をキャッシュしている場合は、主要都市部のフィーチャクラスを指定することができます。そうすることで、それらの都市部をカバーするタイルだけをサーバに事前に作成させます。残りのエリアは、クライアントによってリクエストされたときにオンデマンドでキャッシュすることができます。これにより、郊外地域のタイルの作成に費やす時間とディスク容量を節約することができます。
以下の図は、フィーチャクラスにカリフォルニア州のみが含まれている場合に作成されるタイルの理論的なグリッドを示しています。[フィーチャクラスを使用して特定のエリアを更新] オプションを使用すると、海や隣接する州内の不要なタイルを作成せずに済みます。デフォルトの長方形の範囲が使用された場合は、そうした不要なタイルが含まれることになります。
キャッシュの状態の追跡
フィーチャクラスに基づくキャッシュにより、ディスク容量を節約できるだけではなく、キャッシュの状態を追跡できます。[マップ サービス キャッシュのタイルを管理(Manage Map Server Cache Tiles)] ツールを使用して、タイルが作成されたフィーチャをマークできます。状態追跡を使用することを選択すると、キャッシュしているフィーチャクラスに [キャッシュあり] フィールドが追加されます。フィーチャの範囲のタイルが作成されると、そのフィーチャの [キャッシュあり] フィールドに [Yes] が表示されます。
[フィーチャクラスを使用して特定のエリアを更新] オプションを同じフィーチャクラスで再び実行すると、[キャッシュあり] フィールドに [Yes] が表示されていないレコードのタイルのみが作成されます。これは、前のキャッシュ ジョブが中断された場合に便利で、通常は(キャッシュの各タイルを確認する) [空タイルを再構築(Recreate Empty Tiles)] オプションを選択した場合よりも高速です。最後に使用した状態から開始する必要がない場合は、[Cached] フィールドを削除する、その値を [Yes] 以外に変更する、または状態追跡を無効にするチェックボックスをオンにする必要があります。
状態追跡を有効にすると、[空タイルを再構築(Recreate Empty Tiles)] オプションを使用する場合よりも速く、失敗したキャッシュ ジョブを回復することができます。
ベスト プラクティス
ここでは、効率的にキャッシュをフィーチャクラスに基づいて作成するのに役立つヒントを紹介します。
フィーチャクラスに基づくキャッシュは大きな縮尺のみで行う
小さな縮尺では、相対的に少数のタイルが作成されるため、フィーチャクラスに基づくキャッシュを行う場合と行わない場合の違いがあまりありません。したがって、ユーザがマップを開いた直後(小縮尺状態)、拡大を開始したとたんにタイルが欠落したり、オンデマンド タイル化の必要に迫られたりすることのないよう、小程度または中程度の縮尺では全体をタイル化しておきます。
ラベリングの重複を最小化するため、キャッシュ ツールは、大きなエリアの画像(スーパータイル)を描画してから、画像を要求されたサイズのタイルに分割します。スーパータイルは、アンチエイリアスが有効になっている場合は 2048 x 2048 ピクセルで、それ以外の場合は 4096 x 4096 ピクセルになります。フィーチャがスーパータイルの境界と交差している場合、そのスーパータイル全体が作成される必要があります。これはある程度、拡大表示しないと、フィーチャクラスに基づくキャッシュを行っても、時間とディスク容量は実質的には節約されないことを意味します。フィーチャの数が多く、マップ全域にある場合、ほとんどのフィーチャがスーパータイルと交差するため、フィーチャクラスに基づくキャッシュの効果はあまり得られない可能性があります。
フィーチャの境界をジェネラライズする
フィーチャクラスに多数の頂点があると、キャッシュ ツールの速度が遅くなることがありますが、多数の頂点を使用する必要はありません。キャッシュ ツールは正方形をはめ込んでいくため、微細なフィーチャはそぎ落とされます。フィーチャクラスにすべての島、埠頭、および入江を含める必要はありません。
[ポリゴンの単純化(Simplify Polygon)] ツールを使用すると、全般的な形状を変更することなくフィーチャクラスから頂点を系統的に削除できます。フィーチャクラスがモデルから派生している場合、[ポリゴンの単純化(Simplify Polygon)] をモデルの最後のステップとして組み込むことができます。[バッファ(Buffer)] などの一部のツールは、フィーチャクラスに必要以上の数の頂点を追加することがあります。
下のイメージでは、詳細なフィーチャクラスを使用した場合でも、ジェネラライズされたフィーチャクラスを使用した場合でも、作成された一連のタイルがよく似ています。2 番目のフィーチャクラスからは、[ポリゴンの単純化(Simplify Polygon)] ツールによってほとんどの頂点が削除されています。グレーの正方形は、およそ 1:4500 での 4096 x 4096 ピクセルのスーパータイルを表しています。
小さなフィーチャを避ける
CPU を最も効率よく利用するには、キャッシュ ジョブの定義に、非常に小さなフィーチャを使用しないでください。各サービス インスタンス(ArcSOC.exe プロセス)は、常時、横 128 タイル x 縦 128 タイルのエリアの作成作業に割り当てられます。他の ArcSOC.exe は、同じエリアのタイルを作成できません。フィーチャがこのサイズよりも小さい場合、キャッシュ処理を行う ArcSOC.exe プロセスが 1 つしかない状況もありえます。128 x 128 のリージョンのうち 1 つの境界がフィーチャと交差する場合、複数の ArcSOC.exe プロセスがキャッシュ処理を行うかもしれません。しかし、境界はタイル原点に基づいており、どこに配置されるかを計算できるとは限りません。
大きなフィーチャを作成してキャッシュ ジョブを定義するのが、最もよい方法です。大きなフィーチャはこのような 128 x 128 のタイルのエリアを多数含むことができるので、ArcSOC.exe プロセスがアイドル状態になることはほとんどありません。
多数のフィーチャを少数のフィーチャにディゾルブする
小さなフィーチャから大きなフィーチャを取得するための方法の 1 つに、[ディゾルブ(Dissolve)] ツールの使用があります。このツールは、個別のフィーチャを複数取得し、1 つのマルチパート フィーチャに変換します。同様の効果を持つ便利なツールは [ポリゴンの集約(Aggregate Polygons)] で、小さなポリゴンを削除したり、複数の小さなポリゴンを 1 つのより大きなポリゴン形状に統合したりできます。2 つのツールは、キャッシュ時にサービス インスタンスをより効率的に使用するために役立ちます。
リージョンを使用して状態を追跡する
上記のようにフィーチャクラスをディゾルブした後に状態を追跡するには、ステータスを追跡できるように、いくつかの大きなリージョンに分割します。リージョンに最適なサイズを見つけるのは難しいかもしれません。上記で説明したように、ArcSOC.exe プロセスを最も効率よく使用するのに十分な大きさがリージョンには必要ですが、作成が失敗したときに多くの作業内容を失わずに済むように、小さなサイズにしたいと考えるものです。
キャッシュのためにリージョンを作成する効果的な方法の 1 つに、[フィッシュネットの作成(Create Fishnet)] ツールでグリッドを作成し、それをフィーチャクラスの境界にクリップする方法があります。クリップしたグリッドのコピーを ArcMap で開いたままにし、キャッシュ ツールの「フィーチャを処理しています。OID = 8」、「フィーチャを処理しています。OID = 9」、「フィーチャを処理しています。OID = 10」という表示に従って進みます。
グリッドが作成されたフィーチャクラスの後処理として、小さなフィーチャを、それらに隣接するより大きなフィーチャに手動でマージすることを検討してください。上の図では、非常に小さなフィーチャが含まれるのを避けるために、小さな島が隣接するリージョンにディゾルブされているのがわかります。