空間処理
空間処理では、ジオメトリ関数を使用して入力として空間データを受け取り、データを解析して、出力データを生成します。この出力データは入力データに対して実行された解析によって導きだされます。
空間処理から取得可能な導出データには次のようなものがあります。
- 入力フィーチャの周囲のバッファであるポリゴン
ジオメトリのコレクションの分析結果である 1 つのフィーチャ
- 他のフィーチャと同じ物理的スペースにないフィーチャの一部を判断するための比較結果である 1 つのフィーチャ
- 他のフィーチャと同じ物理的スペースと交差するフィーチャの一部を特定するための比較結果である 1 つのフィーチャ
- 互いに同一の物理的スペースにない両方の入力フィーチャの一部を構成するマルチパート フィーチャ
- 2 つのジオメトリの和(ユニオン)であるフィーチャ
入力データの解析が実施されると、その結果として得られるジオメトリを表す座標またはテキストが返されます。この情報をより大きなクエリの一部として使用して追加的な解析を実行することも、この結果を別のテーブルの入力に使用することもできます。
たとえば、交差クエリの WHERE 句にバッファ演算を含めれば、指定したジオメトリが他のジオメトリの周囲の指定したサイズの領域に交差するかどうかを判断できます。
次の例では、ST_Geometry 関数を使用します。他のデータベースと空間データ タイプに使用する特定のジオメトリ関数と構文については、該当するデータベースおよびデータ タイプのドキュメントをご参照ください。
以下の例では、道路閉鎖位置の 1,000 フィート以内にあるすべての物件の所有者に通知を送付する必要があります。WHERE 句により、閉鎖される道路の周囲に 1,000 フィートのバッファが生成されます。次に、このバッファが対象領域内の各物件と比較され、どれがバッファと交差しているかが確認されます。
SELECT p.owner,p.address,s.stname FROM parcels p, streets s WHERE s.stname = 'Main' AND sde.st_intersects (p.shape, sde.st_buffer (s.shape, 1000)) = 't';
この例では、WHERE 句で 1 つの特定の道路(Main)が選択され、次に、その道路の周囲にバッファが生成され、土地区画のテーブルのフィーチャと比較して交差があるかどうかが判断されます。*Main 道路上のバッファと交差するすべての土地区画について、それらの土地区画の所有者と住所が返されます。
*WHERE 句の各部分の実行順序は、データベース オプティマイザによって決まります。
次の例では、地区と校区が格納されたテーブルについて空間処理(ユニオン)を実施してその結果を取得し、結果として得られたフィーチャを別のテーブルに挿入します。
INSERT INTO combo c (shape) VALUES ( (SELECT sde.st_union (n.shape,d.shape) FROM neighborhoods n, school_districts d),5);
ST_Geometry での空間演算子の使用に関する詳細については、「ST_Geometry 用の空間処理関数」をご参照ください。IBM DB2、IBM Informix、Oracle Spatial、PostGIS、または Microsoft SQL Server 空間タイプでの空間演算子の使用の詳細については、各データ管理システムのドキュメントをご参照ください。