地理情報エクステンダーは地理情報索引と連動し、地理情報の照会のパフォーマンスを向上させます。最も基本的かつ最も一般的な地理情報の照会、つまりボックス照会を考えてみましょう。この照会では、ユーザー定義のボックス内に全体あるいは一部が含まれる図形をすべて戻すよう地理情報エクステンダーに問い合わせます。索引が存在しない場合、地理情報エクステンダーはボックス内のすべての図形を比較しなければなりません。しかし索引があれば、地理情報エクステンダーは、左下の座標がボックスの座標と等しいかそれよりも大きいすべての索引項目、および右上の座標がボックスの座標と等しいかそれよりも小さいすべての索引項目を見付けることができます。索引はこの座標系によって順序付けされているので、地理情報エクステンダーは候補となる図形のリストをすぐに入手することができます。ここで説明した処理のことを、第 1 パス といいます。
第 2 パス では、各候補のエンベロープがボックスと交差しているかどうかを判別します。格子セルのエンベロープがボックスと交差しているために第 1 パスで入手された図形には、交差しないエンベロープが含まれていることがあります。
第 3 パス では、候補の実際の座標をボックスと比較して、図形のいずれかの部分が実際にボックス内に含まれているかどうかを判別します。この最後に行うやや複雑な比較処理は、全体のサブセット (最初の 2 つのパスでかなり減少している) で構成されている候補のリストに対して行われます。
EnvelopesIntersect 関数を除き、すべての地理情報照会ではこの 3 つのパスを実行します。この関数は最初の 2 つのパスだけを実行します。 EnvelopesIntersect 関数は、表示操作用に設計されています。表示操作は多くの場合、独自の組み込みクリッピング・ルーチンを採用しており、第 3 パスによるきめ細かさを必要としないからです。
図形エンベロープの形状が不規則であると、格子セル・サイズの選択は複雑になります。不規則な形状のため、複数の格子と交差する図形エンベロープや、 1 つの格子セル内に収まる図形エンベロープが出てくることがあります。逆に、地理情報データの分散状況によっては、多数の図形エンベロープと交差する格子セルが出てくることもあります。
地理情報索引をうまく機能させるには、正しい数およびサイズの格子を選択することが重要です。サイズが統一されている図形を含む地理情報列を考慮してみましょう。この場合、1 つの格子レベルで十分です。平均的な図形エンベロープを含めることのできる格子セル・サイズから開始します。アプリケーションをテストしているときに、格子セル・サイズを大きくすると照会のパフォーマンスが向上することに気付きます。これは、各格子セルにさらに多くの図形が含まれるようになり、第 1 パスが入手されていない図形をより速く廃棄できることによります。しかし、セル・サイズを大きくし続けると、パフォーマンスが悪くなってゆくことも分かります。結局は第 2 パスでさらに多くの候補を処理しなければならなくなるからです。
索引作成の対象となるオブジェクトの相対サイズが同じであれば、単一の格子レベルを使用することができます。たとえそうではあっても、すべての列に同じ相対サイズの図形が含まれているわけではありません。地理情報列の図形は普通、いくつかのサイズごとにグループ化することができます。たとえば、図形が一般道、幹線道路および高速道路に分かれている道路網を考えます。道路はどれもみな同じ長さで、1 つのサイズ間隔でグループ化できます。これは、幹線道路と高速道路にも当てはまります。したがって、1 つのサイズ間隔を表す道路は第 1 格子レベルに、道路網は第 2 格子レベル、幹線高速道路は第 3 格子レベルにグループ化できます。別の例として、小さな都市区画の集まりが含まれ、その区画がより大きな郊外区画に囲まれている郡区画列もあります。このインスタンスでは、2 つのサイズ間隔と 2 つの格子レベルがあり、一方は小さい都市区画用、他方はより大きな郊外区画用です。このような状況は非常に一般的であり、複数レベルの格子を使用する必要があります。
各格子レベルのセル・サイズを選択するには、各サイズ間隔より少し大きめの格子セル・サイズを選択してください。地理情報列に対して照会を実行することにより、索引をテストしてください。
レベルを追加すると、索引を余分に走査しなければなりません。格子のサイズを微調整し、パフォーマンスが目に見えて向上するかどうかを判別してください。