GeometryToRows - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - 地理空間データ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vci1556127188517.ditamap
dita:ditavalPath
ja-JP/vci1556127188517.ditaval
dita:id
B035-1181
Product Category
Software
Teradata Vantage

ST_Geometryオブジェクトを取り、ジオメトリ オブジェクトの点ごとに出力行を生成します。

構文

[TD_SYSFNLIB.] GeometryToRows (
  ON { [ database_name. ] table_name | ( query_expression ) }
  [ USING ErrOnUnsupportedGeometry ('value') ]
) [AS] correlation_name [ ( column_list ) ]
database_name
table_name
ST_Geometry型を含んでいるテーブル、テーブル演算子によって返されるテーブルの個別の行として返されるコンポーネント点。テーブルは2つまたは3つの列を含むように定義する必要があり、それらはquery_expression副問合わせに記述されているように、1つまたは2つのID列と1つのST_Geometry型の列です。
query_expression
SELECT id1, [ id1, ] id1 FROM [ database_name. ] table_name
テーブル演算子の入力データを提供するSELECT副問合わせ。
value
集約を計算する対象のジオメトリ型列を含んでいるテーブル。
value
テーブル関数に渡されるサポートされないジオメトリについてエラーをレポートするかどうか。valueはYesまたはNoのいずれかで、デフォルトはNoです。この値は単一引用符文字で囲む必要があります。

valueがNoか、またはこの引数を省略する場合は、サポートされないジオメトリは無視されます。

correlation_name
テーブル演算子により返されるテーブルに割り当てられる名前。
id1
演算子に渡されるテーブルの各ジオメトリ オブジェクトを固有に識別する数値または文字型の列。id1は任意の有効なTeradata Databaseの数値または文字データ型になります(CLOBを除く)。特定の入力ジオメトリ オブジェクトでid1がNULLの場合は、このジオメトリ オブジェクトのテーブル演算子によって返される行は、それらのout_geom_id1列の対応するNULLを示します。
id2
演算子に渡されるテーブルの各ジオメトリ オブジェクトをid1との組み合わせで固有に識別する数値または文字型の列。id2は任意の有効なTeradata Databaseの数値または文字データ型になります(CLOBを除く)。特定の入力ジオメトリ オブジェクトでid2がNULLの場合は、このジオメトリ オブジェクトのテーブル演算子によって返される行は、それらのout_geom_id2列の対応するNULLを示します。

id2列がテーブル演算子に渡されない場合は、out_geom_id2列は返されません。

ageometry
ジオメトリ オブジェクトを含んでいるST_Geometry型の列。オブジェクトごとの各コンポーネント点では、テーブル演算子は、オブジェクト、ジオメトリ型、領域中の点の位置を示すx、y、z座標を固有に識別する個別の行を返します。
correlation_name
テーブル演算子により返されるテーブルに割り当てられる名前。
column_list
テーブル演算子により返される列のカスタム名のリスト(任意選択)。これらの名前は列名を上書きします。それらは上書きされなければ演算子により生成される名前です。列名を指定する場合は、返されるすべての列の名前を入力する必要があります。演算子により複数の列が返される場合は、名前をカンマで区切ります。

返される値

GeometryToRowsテーブル演算子は、以下の列を含む8または9列のテーブルを返します。

列名 説明
Geometry object

identifier column

入力id1引数の値。GeometryToRows演算子の出力に直接渡されます。特定の入力ジオメトリで返される点を識別します。この列の型は、入力テーブルのid1の型に一致します。

テーブル演算子を使用するSELECT文がAS句で列リストを指定しない場合は、この列の名前はテーブル演算子のid1引数の名前と一致します。

Optional second

geometry object

identifier column

入力テーブルにid2列が含まれており、入力ジオメトリ オブジェクトをさらに識別する場合、その値はテーブル演算子に渡され、返されるテーブルの2番目の列に表示されます。この列は、入力テーブルのid2の型に一致します。

入力テーブルにid2列がない場合、GeometryToRowsテーブル演算子によって返されるテーブルに対応する列がありません。

element_id この行により表わされる点が属するマルチ型ジオメトリの特定の構成要素を特定するINTEGER値。マルチ ジオメトリの個別の要素は、1から番号付けされます。

例えば、MutliLineStringに2つのLineStringが含まれる場合、最初のLineString の点には1のelement_idが、2番目のLineStringの点には2のelement_idが含まれます。

LineStringの点には2のelement_idが含まれます。

ring_id この行により表わされる点が属するPolygonまたはMultiPolygonの特定のポリゴン周を特定するINTEGER値。ポリゴンの各周縁は1から番号が付けられ、外周が番号1、内周は番号2から付けられます。

ジオメトリ オブジェクトがPolygonまたはMultiPolygonでない場合、ring_idはNULLに設定されます。

point_id ジオメトリ内の点の順序を反映するINTEGER値。point_idの番号付けは1から始まります。ジオメトリごとの点には、ジオメトリ内の番号付けの順序で番号が付けられます。
geomType 入力ジオメトリのジオメトリ型。可能値はST_Point、ST_MultiPoint、ST_LineString、ST_MultiLineString、ST_Polygon、またはST_MultiPolygonです。入力ジオメトリがNULLの場合、この値はNULLになります。この値のデータ型はVARCHAR(30) CHARACTER SET LATINになります。
x 行により表わされる点のx座標の値。これはDOUBLE PRECISION値です。

入力ジオメトリが空のセットの場合、この値はNULLです。

y 行により表わされる点のy座標の値。これはDOUBLE PRECISION値です。

入力ジオメトリが空のセットの場合、この値はNULLです。

z 行により表わされる点のz座標の値。これはDOUBLE PRECISION値です。

ジオメトリが2Dジオメトリの場合、または入力ジオメトリが空のセットの場合、この値はNULLです。

有効なデータ型

Points、LineStrings、Polygons、MultiPoints、MultiLineStrings、MultiPolygonsを表わすST_Geometryオブジェクト。

使用上の注意

  • ポリゴンの最初と最後の点は、同じ点になります。
  • ポリゴンは1つの外周と0個以上の内周から構成されます。 内周は完全に外周の内側にある必要があります。 MultiPolygonは、重複しないポリゴンのグループです。
  • 点ごとの要素IDは、マルチ タイプ ジオメトリで点がどの要素に属するかを特定します。例えば、2つのLineStringを含んでいるMultiLineStringで、最初のLineStringは要素1、2番目のLineStringは要素2になります。

    非マルチ ジオメトリでは、要素IDは常に1です。

  • 入力ジオメトリ値がNULLの場合、返される対応する出力行にはgeomType、x、y、zの各列にNULLが含まれます。
  • ID列に階層的な性質があるため、ORDER BY句を使用して、引き渡される各ジオメトリと付随する行を一緒にまとめ、マルチ タイプのサブジオメトリに応じてグループ分けできます。以下の例を参照してください。

例: GeometryToRows

CREATE TABLE geo_table(pkey integer, geom_id VARCHAR(20), geom ST_Geometry);

INSERT INTO geo_table VALUES(0, 'S101', new ST_Geometry('Point(10 20 5)'));
INSERT INTO geo_table VALUES(1, 'S102', new ST_Geometry('LineString(10 10, 20 20)'));
INSERT INTO geo_table VALUES(2, 'S103', new ST_Geometry(
   'Polygon((0 0, 0 10, 10 10, 10 0, 0 0))'));
INSERT INTO geo_table VALUES(3, 'S104', new ST_Geometry('LineString(EMPTY)'));
INSERT INTO geo_table VALUES(4, 'S105', NULL);
INSERT INTO geo_table VALUES(5, 'S106', new ST_Geometry(
   'MultiLineString((10 10, 20 20),(30 30, 40 40, 50 50))'));

INSERT INTO geo_table VALUES(6, 'S107', new ST_Geometry(
   'Polygon((0 0, 0 10, 10 10, 10 0, 0 0), (2 2, 2 8, 8 8, 8 2, 2 2))'));

SELECT PointsTable.geom_id1 (FORMAT 'X(8)'),
       PointsTable.element_id (FORMAT 'Z'),
       PointsTable.ring_id (FORMAT 'Z'),
       PointsTable.point_id (FORMAT 'Z'),
       PointsTable.geomType (FORMAT 'X(15)'),
       PointsTable.x (FORMAT '99.99'),
       PointsTable.y (FORMAT '99.99'),
       PointsTable.z (FORMAT '99.99')

FROM GeometryToRows(ON (SELECT geom_id, geom FROM geo_table) )
AS PointsTable (geom_id1, element_id, ring_id, point_id, geomType, x, y, z)
ORDER BY 1, 2, 3, 4;

出力は以下のようになります。

geom_id1 element_id ring_id point_id geomType            x     y     z
-------- ---------- ------- -------- --------------- ----- ----- -----
S101              1       ?        1 POINT           10.00 20.00 05.00
S102              1       ?        1 LINESTRING      10.00 10.00     ?
S102              1       ?        2 LINESTRING      20.00 20.00     ?
S103              1       1        1 POLYGON         00.00 00.00     ?
S103              1       1        2 POLYGON         00.00 10.00     ?
S103              1       1        3 POLYGON         10.00 10.00     ?
S103              1       1        4 POLYGON         10.00 00.00     ?
S103              1       1        5 POLYGON         00.00 00.00     ?
S104              1       ?        1 LINESTRING          ?     ?     ?
S105              1       ?        1 ?                   ?     ?     ?
S106              1       ?        1 MULTILINESTRING 10.00 10.00     ?
S106              1       ?        2 MULTILINESTRING 20.00 20.00     ?
S106              2       ?        1 MULTILINESTRING 30.00 30.00     ?
S106              2       ?        2 MULTILINESTRING 40.00 40.00     ?
S106              2       ?        3 MULTILINESTRING 50.00 50.00     ?
S107              1       1        1 POLYGON         00.00 00.00     ?
S107              1       1        2 POLYGON         00.00 10.00     ?
S107              1       1        3 POLYGON         10.00 10.00     ?
S107              1       1        4 POLYGON         10.00 00.00     ?
S107              1       1        5 POLYGON         00.00 00.00     ?
S107              1       2        1 POLYGON         02.00 02.00     ?
S107              1       2        2 POLYGON         02.00 08.00     ?
S107              1       2        3 POLYGON         08.00 08.00     ?
S107              1       2        4 POLYGON         08.00 02.00     ?
S107              1       2        5 POLYGON         02.00 02.00     ?

ORDER BY句が、各ジオメトリとサブジオメトリ(マルチ タイプの場合)の行を一緒にまとめながら、ID呼び出しにより行をどのように配列するか、またジオメトリとそのサブジオメトリ別に行をどのように階層的に編成するかに留意してください。このような配列がないと、行はランダムの順序で返され、リレーションシップを見分けるのがさらに難しくなります。