空間データ型は、地理的空間情報を格納および処理するために使用されるデータ型です。OceanBase データベースのOracleモードは、空間データ型 SDO_GEOMETRY をサポートしています。SDO_GEOMETRY は、幾何図形データを格納および処理するためのデータ型であり、二次元または三次元の幾何図形を表すための複合データ型です。
OceanBase データベースのOracleモードの現在のバージョンでは、OGC(OpenGIS Consortium)が定義した7種類の空間オブジェクトタイプのみをサポートしています。これらは、Point(点)、Linestring(線)、Polygon(ポリゴン)、Multipoint(多点)、Multilinestring(複数線)、Multipolygon(複数ポリゴン)、およびCollection(コレクション)であり、それぞれ一連の接続された点のシーケンスで構成されています。空間次元としては、二次元および三次元の空間データをサポートしています。
注意
OceanBase データベースの現在のバージョンでは、点と点を円弧で結ぶことはサポートされていません。
SDO_GEOMETRYの特徴
特徴1:SDO_GEOMETRYサポート
データ型をSDO_GEOMETRYとして定義でき、PL/SQLでSDO_GEOMETRYデータ型を操作できます。
特徴2:SDO_GEOMETRYメンバー関数
SDO_GEOMETRY データ型は、空間オブジェクトの作成、クエリ、フォーマット変換に使用されるメンバー関数をいくつか提供します。
コンストラクタ:デフォルトコンストラクタ(
SDO_GEOMETRY())、Well-Known-Binary (WKB) データ形式、および Well-Known-Text (WKT) データ形式を使用してSDO_GEOMETRYデータ型を作成できます。クエリ:
SDO_GEOMETRYは、空間オブジェクトの属性をクエリするためのメンバー関数をいくつか提供します。例えば、get_dimsは幾何図形の次元情報を取得するために使用でき、get_gtypeは幾何図形のタイプコードを取得するために使用でき、st_isvalidは幾何図形が有効かどうかを判断するために使用できます。フォーマット変換:
SDO_GEOMETRYは空間オブジェクトを他の形式に変換することをサポートします。例えば、get_wkbはSDO_GEOMETRYを Well-Known-Binary (WKB) 形式に変換でき、get_wktは Well-Known-Text (WKT) 形式に変換でき、get_geojsonは JSON 形式に変換できます。
SDO_GEOMETRY メンバー関数の詳細については、空間関数の概要を参照してください。
特徴3:SDO_GEOMETRY型の格納
テーブル内のフィールドを SDO_GEOMETRY 型として定義することをサポートし、SDO_GEOMETRY データ型は BLOB 列として格納されます。
特徴4:SDO_GEOMETRY属性へのアクセス
SDO_GEOMETRY は複合データ型として、複数の内在属性を含み、SQL/PLでその属性にアクセスすることをサポートします。
SDO_GEOMETRYの定義
CREATE TYPE sdo_geometry AS OBJECT (
SDO_GTYPE NUMBER,
SDO_SRID NUMBER,
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES SDO_ORDINATE_ARRAY);
パラメータの説明
SDO_GTYPE
SDO_GTYPE は幾何図形(Geometry)のタイプコードを表し、NUMBER 型の値で、形式は DLTT です。
DLTT の解釈は以下の通りです:
D:次元を表します。値は 2 または 3 で、二次元または三次元空間を示します。L:線形参照システム(Linear Referencing System)を表します。二次元空間オブジェクトにおいて、Lの値は 0 です。説明
OceanBase データベースの現在のバージョンでは、
Lは他の値をサポートしていません。TT:具体的な幾何タイプ(Geometry Type)を表します。値の範囲は 01 から 07 です。
Value |
Geometry Type |
Description |
|---|---|---|
| DL01 | POINT | 点。 |
| DL02 | LINE | 直線。 |
| DL03 | POLYGON | 多角形。 |
| DL04 | COLLECTION | 空間オブジェクトの集合。集合には異なる空間オブジェクトを含めることができます。 |
| DL05 | MULTIPOINT | 1つまたは複数の点を含む空間オブジェクト。 |
| DL06 | MULTILINE | 1本または複数の直線を含む空間オブジェクト。OceanBaseデータベースの現在のバージョンでは、直線のみサポートしています。 |
| DL07 | MULTIPOLYGON | 1つまたは複数の多角形を含む空間オブジェクト。 |
SDO_SRID
SDO_SRID は幾何図形の空間参照識別子を表し、NUMBER 型の値です。これにより、幾何図形の座標系と投影方式が決定されます。
説明
SDO_SRID は MySQL モードの SRID と同じ意味で、空間座標系の ID を表します。MySQL モードの空間参照システムに関する詳細情報については、空間参照システム(SRS)を参照してください。
SDO_POINT
SDO_POINT は幾何図形の点座標を表します。これには、幾何図形の X、Y、およびオプションの Z 座標が含まれます。
SDO_POINT は SDO_GEOMETRY オブジェクトの属性の一つで、Point 型の幾何図形の座標値を格納するために使用されます。SDO_ELEM_INFO と SDO_ORDINATES の両方の属性が NULL であり、かつ SDO_POINT 属性に有効な値が保存されている場合、そのオブジェクトは Point 型の幾何図形と見なされます。このとき、SDO_POINT には Point の具体的な座標値が格納されます。SDO_ELEM_INFO と SDO_ORDINATES の属性が null 以外の場合、SDO_POINT の内容は無視され、幾何図形の具体的な座標は SDO_ELEM_INFO と SDO_ORDINATES によって格納されます。
SDO_POINT_TYPE オブジェクトの定義は以下の通りです:
CREATE TYPE sdo_point_type AS OBJECT (
X NUMBER,
Y NUMBER,
Z NUMBER
);
SDO_ELEM_INFO
SDO_ELEM_INFOは、幾何図形の幾何要素情報を表します。SDO_ELEM_INFOはNUMBER型で構成される可変長配列であり、複数の3元組に分割してSDO_ORDINATES属性を解釈するために使用されます。3元組は以下のものです:
SDO_STARTING_OFFSET:オブジェクトの最初の座標情報がSDO_ORDINATES配列内で始まる位置を表し、1から始まります。SDO_ETYPE:オブジェクトのタイプを表します。その中で、1、2、1003(ポリゴンの外輪で、反時計回りでなければならないことを表す)、2003(ポリゴンの内輪で、時計回りでなければならないことを表す)は単一のオブジェクトを表し、1つのSDO_ELEM_INFOの3元組オブジェクトだけで定義できます。SDO_INTERPRETATION:単一のオブジェクトに対して、この属性はオブジェクトの接続方法およびその他の特性を表します。
SDO_elem_INFOの値とセマンティクス:
SDO_ETYPE |
SDO_INTERPRETATION |
意味 |
|---|---|---|
| 1 | 1 | 点タイプ(Point type)。 |
| 1 | n > 1 | n個の点を持つポイントクラスタ。Collection内のMultipointはこのタイプに展開されます。 |
| 2 | 1 | 直線で結ばれた線分。 |
| 1003 or 2003 | 1 | 直線で結ばれた多角形。始点と終点は同じである必要があります。SDO_ETYPE の最初のビットが1の場合は外側の輪、2の場合は内側の輪を表します。 |
| 1003 or 2003 | 3 | 長方形。通常の多角形を最適化したものです。対角線上の2つの点(左下と右上)の座標を記録するだけで済みます。 |
SDOElemInfoArrayの例:
SDO_ELEM_INFO_ARRAY(1, 1003, 1)
上記の例では、最初のパラメータの1はSDO_ORDINATE_ARRAYの最初の要素から始まることを意味し、2番目のパラメータの1003はポリゴンの外輪であることを意味し、3番目のパラメータの1は直線接続であることを意味します。
SDO_ORDINATES
SDO_ORDINATESは、幾何図形の具体的な座標値を表します。これはNUMBER型で構成される可変長配列であり、最大長は1048576です。SDO_ORDINATES配列は空間オブジェクトの座標値を格納するために使用され、SDO_ELEM_INFOパラメータと組み合わせて使用することで、幾何図形の自己解釈を実現します。
SDO_ORDINATE_ARRAYの例:
SDO_ORDINATE_ARRAY(10,105, 15,105, 20,110, 10,110, 10,105)
上記の例では、座標配列は単純な多角形を表します。それには5つの頂点の座標値が含まれており、各頂点はX座標とY座標で構成されています。具体的には、(10, 105)、(15, 105)、(20, 110)、(10, 110)、(10, 105)です。これらの座標値は順序良く並べられており、単純な多角形の形状を記述しています。SDO_ELEM_INFOパラメータが提供する幾何要素情報と組み合わせることで、これらの座標値を解釈し、多角形の境界を特定することができます。
説明
上記の例では、各座標値の組は二次元平面上の点を表し、幾何図形が該当する次元上でどこに位置するかを示しています。この例では、X座標とY座標のみが関係しており、Z座標は指定されていないため、座標配列にはZ座標の値が含まれていません。
例
二次元の点ジオメトリオブジェクトを作成します。タイプコードは2001、座標はX=10、Y=20、Z座標はNULLです。空間参照識別子SRID、ジオメトリ要素情報SDO_ELEM_INFO、具体的な座標値SDO_ORDINATE_ARRAYは指定されていません。
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(10, 20, NULL), NULL, NULL)
関連ドキュメント
SDO_GEOMETRYメンバー関数の詳細については、空間関数の概要を参照してください。SDO_GEOMETRYプロパティへのアクセスの詳細については、SDO_GEOMETRYプロパティへのアクセスを参照してください。