キャッシュに関する一般的な質問
以下は、マップ キャッシュとグローブ キャッシュについてよく寄せられる質問です。質問の主題は、簡単なものから高度なものまでさまざまです。多くの場合、質問への答えはヘルプの別の場所にある情報に基づいています。ただし、このトピックでは、ヘルプを検索するよりも特定の質問に対する答えがすばやく見つかるかもしれません。
キャッシュ全般の質問
マップ キャッシュの質問
- ある縮尺で完全データ キャッシュを生成し、別の縮尺で部分データ キャッシュを生成するにはどうすればよいですか
- タイル スキーマの一部の縮尺でのみキャッシュを生成するための最適な方法は何ですか
- マップ キャッシュ時に、バージョン 9.x よりもバージョン 10.0 のほうが時間がかかるのはなぜですか
- 空のキャッシュ エリアに対して「データは利用不能」タイルを表示するにはどうすればよいですか
- キャッシュ内でラベルの重複を避けるにはどうすればよいか?
- フィーチャクラスの境界線に基づいてキャッシュを作成しているときに、フィーチャの外側に余分なタイルが作成されるのはなぜですか
- タイルをオンデマンドで作成しているときに、ユーザのマップ範囲の外側に余分なタイルが作成されるのはなぜですか
グローブ キャッシュの質問
キャッシュ ツールがサービスを再起動するのはなぜですか
[マップ サービス キャッシュのタイルを管理(Manage Map Server Cache Tiles)] やその他のキャッシュ ツールは、ツールを実行する前後にサービスの再起動が必要となるさまざまな処理を内部で行っています。たとえば、[マップ サービス キャッシュのタイルを管理(Manage Map Server Cache Tiles)] は、タイルを作成する前にサービスのタイムアウト値を延長して、時間のかかるキャッシュ ジョブの途中でタイムアウトしないようにし、タイルが作成された後にタイムアウトを元の値に戻します。
また、キャッシュ ツールが conf.xml タイル スキーマ ファイルを変更する場合は、マップ サービスに変更を反映させるためにサービスを再起動する必要があります。たとえば [マップ サービスのキャッシュ縮尺を管理(Manage Map Server Cache Scales)] を使ってキャッシュの縮尺を追加または削除する場合、タイル スキーマへの変更をマップ サービスに認識させるためには、サービスを再起動する必要があります。
サービスを再起動している間、サービスは一時的に利用できなくなります。
ある縮尺で完全データ キャッシュを生成し、別の縮尺で部分データ キャッシュを生成するにはどうすればよいですか
大きな縮尺では、多くの場合、最も需要が高いと思われるタイルをあらかじめ作成しておき、残りのタイルをオンデマンドで作成するのが効果的です。これに対し、小さな縮尺はそれほど多くのタイルを必要とせず、クライアントが最初にマップを開いたときに表示されることが多いため、小さな縮尺では完全データ キャッシュを作成するとよいでしょう。
マップの部分データ キャッシュをいくつかの縮尺レベルで構築し、他のレベルで完全データ キャッシュを作成するには、[マップ サービス キャッシュのタイルを管理(Manage Map Server Cache Tiles)] ツールを複数回にわたって実行します。
たとえば、次の縮尺でキャッシュしたいマップがあるとします。
- 1:128000
- 1:64000
- 1:32000
- 1:16000
- 1:8000
- 1:4000
[マップ サービス キャッシュのタイルを管理(Manage Map Server Cache Tiles)] を実行し、1:128000、1:64000、1:32000 のみをオンにします。デフォルトでは、これらの縮尺の全体表示が作成されます。
もう一度ツールを実行し、1:16000、1:8000、1:4000 のみをオンにします。また、マップ範囲全体をキャッシュせずに、フィーチャ内のフィーチャクラスの範囲(例: 都市や郡の境界)に基づいて縮尺レベルを適宜にキャッシュできます。これにより、部分データ キャッシュが 3 つの縮尺レベルで作成されます。必要に応じて、それらの縮尺で残りのタイルをオンデマンドで作成することもできます。
タイル スキーマの一部の縮尺でのみキャッシュを生成するための最適な方法は何ですか
[マップ サービス キャッシュのタイルを管理(Manage Map Server Cache Tiles)] ツールは、タイル スキーマ内のすべての縮尺を表示し、それぞれの横にチェックボックスを表示します。タイル スキーマ内の一部のレベルでのみキャッシュを生成したい場合は、ツールを実行する前に、キャッシュしたくない縮尺をオフにします。
タイル スキーマの一部のレベルでのみキャッシュを構築することは、ArcGIS Online、Bing Maps、または Google Maps サービスでキャッシュをオーバーレイするときに共通するワークフローです。データをこれらのベースマップでオーバーレイしたいが、サービスが使用するすべての縮尺と一致させるだけの時間やディスク領域が不足している、という状況がよくあります。そこで、これらのサービスと同じタイル スキーマを使用して、ツールを実行する前に大きな縮尺をオフにすることができます。
マップ キャッシュ時に、バージョン 9.x よりもバージョン 10.0 のほうが時間がかかるのはなぜですか
この質問に答えるには、10.0 でサーバーがキャッシュ ジョブにアクセスする方法に関する背景知識が役立ちます。
ArcGIS 10 では、キャッシュ(ArcSOC.exe プロセス)構築専用のサービス インスタンスは、中断のない作業を実現するために、9.x の場合よりも大きな面積の単位に割り当てられます。各 ArcSOC.exe プロセスは、128 x 128 タイルの寸法のエリアを処理してから、次のエリアに移動します。わかりやすくするために、これを「バンドル」と呼びます。ただし、エクスプロード キャッシュを作成する際にはバンドル ファイルを作成しなければならないわけではありません。
キャッシュ時に、各 ArcSOC.exe は 1 つのバンドルを処理し、次に使用可能なバンドルに移動します。1 つのバンドルに対し、同時に処理を行える ArcSOC.exe は 1 つだけです。
9.x では、ArcSOC.exe プロセスの作業単位は「スーパータイル」で、寸法は 2048 x 2048 ピクセル(アンチエイリアスを使用しない場合は 4096 x 4096 ピクセル)でした。これはバンドルよりもずっと小さな単位です。作業単位をバンドルに切り替えると、ディスク I/O とネットワークのスループットが最適化され、パフォーマンスが著しく向上します。ArcSOC.exe プロセスが割り当てを変更する回数が減り、タイル作成に集中することができます。
ただし、バンドルの使用には副作用があります。小さなキャッシュを作成する場合や、非常に小さなフィーチャ境界に基づいてキャッシュする場合、キャッシュの作成には 9.x の使用時に比べてやや時間がかかることがあります。これは単に、処理対象のバンドル数が、使用可能な ArcSOC.exe プロセス数よりも少ないためです。キャッシュの作成に使用可能な ArcSOC.exe プロセスが 8 つ存在し、目的のエリアと交差するバンドルが 1 つだけの場合、使用される ArcSOC.exe プロセスは 1 つだけです。これは、大規模なキャッシュ ジョブを処理する際のキャッシュ ツールの効率改善と引き換えに生じた、小さな代償です。
大規模なキャッシュでこの状況を避ける最善の方法は、使用可能な ArcSOC.exe プロセスよりも多くのバンドルを含む、大きなフィーチャ境界に基づいてキャッシュすることです。
空のキャッシュ エリアに対して「データは利用不能」タイルを表示するにはどうすればよいですか
キャッシュに存在しないエリアがある場合は、タイルをオンデマンドで作成するか、Web サーバが「データは利用不能」タイルを返すように設定することができます。「データは利用不能」タイルは、ユーザがマップの端に画面移動した場合、または完全なデータ キャッシュがないエリアにナビゲートした場合にも役立ちます。サーバから「データは利用不能」タイルが返されるように設定すれば、何も返さない場合よりもユーザの操作環境が改善されることがあります。
仮想キャッシュ ディレクトリを使用しない場合の手順(すべての JavaScript、Flex、Silverlight アプリケーションを含む)
REST ベースのアプリケーション(たとえば JavaScript、Flex、または Silverlight 対応の ArcGIS API で構築したもの)では、キャッシュのルート レベルに空のタイル missing.png、missing.jpg、または blank.png を配置して、「データ使用不可」タイルを構成します。キャッシュ内にタイルが見つからない場合、タイル ハンドラ サービスはデフォルトで、このタイルを使用します。この手法は、Web ADF アプリケーションが仮想キャッシュ ディレクトリを使用しない場合や、キャッシュに対して無効な場合にも有効です。手順は次のとおりです。
- タイル スキーマのタイルと同じディメンションおよび画像形式の画像を作成します。この画像に missing.png または missing.jpg という名前を付けます。透明な空のタイルが必要な場合(たとえば、透過表示の必要なオーバーレイ サービスでは)、かわりに blank.png を使用してください。サンプル タイルをダウンロードする手順については、Esri Knowledge Base の記事 36939 をご参照ください。
- マップ サービス用 _alllayers フォルダの下に、missing.png、missing.jpg、または blank.png ファイルを保存します(例: C:\arcgisserver\arcgiscache\MyMapService\Layers\_alllayers\missing.png)。
ArcGIS Server タイル ハンドラは予期されるタイルを補充して、欠落したタイルを自動的に処理します。ただし、欠落タイルでもキャッシュのルート レベルにある特殊な「欠落」または「空白」タイルを含んだものは処理対象外です。
Web ADF アプリケーションが仮想キャッシュ ディレクトリを使用している場合に、カスタム エラー応答を作成する IIS の例
仮想キャッシュ ディレクトリを使用する Web ADF アプリケーションを構築している場合、仮想キャッシュ ディレクトリ上で「HTTP エラー 404: 見つかりません」に対するカスタム エラー応答を作成できます。Web サーバは、エラー メッセージのかわりにタイルを返すようになります。以下は、IIS 6 の例です。
- Windows の [コントロール パネル] を開き、[管理ツール] → [インターネット インフォメーション サービス(IIS)マネージャ] の順にクリックします。
- 仮想キャッシュ ディレクトリへ移動し、マップ キャッシュが含まれているフォルダを選択します。フォルダを右クリックして [プロパティ] をクリックします。
- [カスタム エラー] タブをクリックし、スクロールして 404 エラー コードを選択します。
- [編集] ボタンをクリックします。[URL] ボックスで、タイルの検出不能時に毎回 IIS が返すタイルを指定します。ファイルへの単なるパスではなく、相対 URL を使用します。
- [OK] をクリックして、ダイアログ ボックスを閉じます。
キャッシュ内でラベルの重複を避けるにはどうすればよいか?
マップ ドキュメントでのラベルの配置に(アノテーションではなく)動的ラベリング エンジンを使用している場合は、キャッシュ タイルのラベルが重複することがあります。このような重複は、どの方向にも 4,096 x 4,096 ピクセルを超える頻度で発生しないようにする必要があります。すべての重複ラベルはアノテーションを使って削除することができます。アノテーションを使用すると、ラベルがマップ上の 1 つのポイントに関連付けられるため、重複は発生しなくなります。
上記の方法は融合キャッシュに適用されます。マルチレイヤ キャッシュを使用する場合、ラベルはキャッシュ イメージに含まれません。ラベルはキャッシュ イメージの上に動的に描画されます。
ArcGIS Server 9.2 の .NET Web ADF でマルチレイヤ キャッシュを使用している場合は、タイルごとに一連の動的ラベルが描画されるため、重複したラベルが多数表示されるかもしれません。この振舞いは、ArcGIS Server 9.3 以降では改善されています。ただし、パフォーマンス上の理由により、通常は ArcMap をクライアントとして、マルチレイヤ キャッシュのみを使用してください。
フィーチャクラスの境界線に基づいてキャッシュを作成しているときに、フィーチャの外側に余分なタイルが作成されるのはなぜですか
タイルの重複ラベルを避けるために、キャッシュ ツールは最初に 4,096 x 4,096 ピクセルのエリア(デフォルトの 256 x 256 ピクセル タイル サイズのタイルが 256 個)を描画し、その後、タイル スキーマで指定されたサイズのタイルに分割します。フィーチャクラスの場所と形状、そしてタイル スキーマによっては、4,096 x 4,096 エリア内の一部のタイルがフィーチャクラスの境界から出てしまうことがあります。これは想定内の振舞いです。フィーチャクラスの境界からすべての方向に向かって 4,096 ピクセルを超えるエリアには、タイルは作成されません。
タイルをオンデマンドで作成しているときに、ユーザのマップ範囲の外側に余分なタイルが作成されるのはなぜですか
(オンデマンドで、またはキャッシュ ツールを使って)新しいタイルをリクエストすると、タイルは常にグループで作成されます。キャッシュ メカニズムがタイルを 1 つずつ作成することは決してありません。そのような場合、サーバは隣接タイルのラベルを認識しないため、重複したラベルだらけになってしまいます。
オンデマンド キャッシュを有効にした状態でキャッシュされていないエリアに画面移動すると、4,096 x 4,096 ピクセルのエリアがサーバによって描画され、タイルに分割されます。したがって、タイルの寸法が 256 x 256 ピクセルの場合、最大で 256 個のタイルが作成されます。このため、マップに含まれているレイヤの数が多い場合、または複雑なシンボルが含まれている場合、クライアントが長時間待機する可能性があります。
このような理由から、マップ内でアクセス頻度の高いエリアのタイルをあらかじめ作成しておき、アクセス頻度の低いエリアにのみオンデマンド キャッシュを使用することを強くお勧めします。複雑なソース マップ ドキュメントがある場合は、キャッシュ全体をオンデマンドで構築することは避けてください。
グローブ サービスにはどのようなタイル スキーマを使用すべきですか
マップ サービスとは異なり、すべてのグローブ サービスは同じタイル スキーマを使用するため、グローブ サービスのタイル スキーマを設定するために何かをする必要はありません。データは「組み込み」のグローブ タイル スキーマのレベルで自動的にキャッシュされます。
よく見てみると、これらのラベルが ArcGlobe または ArcGIS Explorer に反映されていることがわかります。グローブを拡大するとさまざまな高度を通過するため、ピクチャが少しくっきり見えたり、ぼやけて見えたりします。
ArcGIS Online、Bing Maps、または Google Maps タイル スキーマの縮尺は、ArcGlobe の組み込み縮尺レベルとほぼ一致します。グローブのサーフェス上に 2D マップ サービスをドレープする予定がある場合は通常、このタイル スキーマを選択することをお勧めします。このタイル スキーマを使うのは、体裁上の理由からではなく、ArcGlobe がこのタイル スキーマを介して 2D サービスを高速に描画できるようにエンジニアリングされているためです。