16.20 - 例: テーブルに地理空間データを挿入する際のST_Geometryデータ型の使用 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

これは、テーブルに地理空間データを挿入する際に、異なる地理空間データ型を表現するST_Geometryデータ型を使用する方法についての詳細な例です。testデータベースで2つのテーブルを作成します。1つは、都市のリストを表わすcities。もう1つは、道路を表わすstreetsです。都市はポリゴン(POLYGON)にして、道路は折れ線(LINESTRING)にします。citiesstreetsのテーブル定義から分かるように、どちらも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)'
                                     );

次に、citiesstreetsStreetshape.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