これは、テーブルに地理空間データを挿入する際に、異なる地理空間データ型を表現するST_Geometryデータ型を使用する方法についての詳細な例です。testデータベースで2つのテーブルを作成します。1つは、都市のリストを表わすcities。もう1つは、道路を表わすstreetsです。都市はポリゴン(POLYGON)にして、道路は折れ線(LINESTRING)にします。citiesとstreetsのテーブル定義から分かるように、どちらもST_Geometryタイプを使用して実装します。これらのテーブルに、いくつかの都市と道路を、それぞれの地理空間タイプを表わすWKT (Well-Known Text)形式を使用して挿入します。その後、問合わせを実行し、いずれかの道路が、いずれかの都市の中にあるかどうかを確認します。
テーブルの定義は以下のとおりです。
CREATE TABLE test.cities ( pkey INTEGER, CityName VARCHAR(40), CityShape ST_Geometry); CREATE TABLE test.streets ( pkey INTEGER, StreetName VARCHAR(40), StreetShape ST_Geometry);
最初に、citiesテーブルに3つの行を挿入します。
INSERT INTO test.cities VALUES(0, 'San Diego', 'POLYGON((1 1, 1 3, 6 3, 6 0, 1 1))' ); INSERT INTO test.cities VALUES(1, 'Los Angeles', 'POLYGON((10 10, 10 20, 20 20, 20 15, 10 10))' ); INSERT INTO test.cities VALUES(2, 'Chicago', 'POLYGON((100 100, 100 200, 300 200, 400 0, 100 100))' );
次に、streetsテーブルに3つの行を挿入します。
INSERT INTO test.streets VALUES(1, 'Lake Shore Drive', 'LINESTRING(110 180, 300 150)' ); INSERT INTO test.streets VALUES(1, 'Via Del Campo', 'LINESTRING(2 2, 3 2, 4 1)' ); INSERT INTO test.streets VALUES(1, 'Sepulveda Blvd', 'LINESTRING(12 12, 18 17)' );
次に、citiesとstreetsをStreetshape.ST_Within(CityShape)=1で結合し、そこからStreetName列とCityName列の値を選択します。
SELECT StreetName, CityName FROM test.cities, test.streets WHERE StreetShape.ST_Within(CityShape) = 1 ORDER BY CityName;
BTEQを使用した場合、結果は以下のようになります。
StreetName CityName ---------------------------------------- ---------------- Lake Shore Drive Chicago Sepulveda Blvd Los Angeles Via Del Campo San Diego