空間データ型とは、地理空間情報を格納および処理するために使用されるデータ型です。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です。
| 値 | ジオメトリタイプ | 説明 |
|---|---|---|
| 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のプロパティが空ではない場合、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または2003 | 1 | 直線で結ばれた多角形で、始点と終点が同一である必要があります。SDO_ETYPE の最初のビットが1の場合は外環、2の場合は内環を表します。 |
| 1003または2003 | 3 | 長方形で、通常の多角形に対する最適化です。対角線上の2点(左下と右上)の座標を記録するだけで済みます。 |
SDO_ELEM_INFO_ARRAYの例:
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パラメータが提供する幾何要素情報と組み合わせることで、これらの座標値を解釈し、多角形の境界を決定できます。
説明
上記の例では、各座標値のグループは2次元平面上の点であり、幾何図形が対応する次元上の位置を表します。この例では、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プロパティへのアクセスを参照してください。