プライマリ・コンテンツに移動
Oracle® Spatial and Graph開発者ガイド
12cリリース1 (12.1)
B72470-07
目次へ移動
目次
索引へ移動
索引

前
次

2.2 SDO_GEOMETRYオブジェクト型

Spatial and Graphでは、空間オブジェクトのジオメトリの記述は、ユーザーが定義した表のSDO_GEOMETRYオブジェクト型の1列に、1行で格納されます。表にSDO_GEOMETRY型の列がある場合、その表に対して一意の主キーを定義する別の列または列のセットが必要です。このような表を、空間表または空間ジオメトリ表ともいいます。

Oracle Spatial and Graphでは、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);

Oracle Spatial and Graphでは、SDO_GEOMETRY型定義で使用されるSDO_POINT_TYPE型、SDO_ELEM_INFO_ARRAY型およびSDO_ORDINATE_ARRAY型も次のとおり定義します。

CREATE TYPE sdo_point_type AS OBJECT (
   X NUMBER,
   Y NUMBER,
   Z NUMBER);
CREATE TYPE sdo_elem_info_array AS VARRAY (1048576) of NUMBER;
CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;

SDO_ORDINATE_ARRAYの最大サイズは1,048,576であるため、SDO_GEOMETRYオブジェクト内の頂点の最大数は、頂点ごとの次元数によって決まります。その数は、2次元の場合は524,288、3次元の場合は349,525、4次元の場合は262,144になります。

次の項では、それぞれのSDO_GEOMETRY属性の意味および使用する場合の考慮点(「使用上の注意」)を説明します。

SDO_GEOMETRYオブジェクト型には、その属性にアクセスする場合に有効なメソッドがあります。これらのメソッドについては、「SDO_GEOMETRYメソッド」を参照してください。

次のSpatial and Graphのデータ型については、それぞれの項またはマニュアルを参照してください。

2.2.1 SDO_GTYPE

SDO_GTYPE属性は、ジオメトリのタイプを示します。有効なジオメトリ・タイプはGeometry Object Model for the OGIS Simple Features for SQL仕様(曲面は例外として)で指定されたジオメトリに対応しています。数値はOGIS仕様の指定とは異なりますが、対応する名前および意味は同じです。

SDO_GTYPE値は、4桁の書式DLTTで表されます。各桁が示す内容は次のとおりです。

  • D は、次元数(2、3または4)を識別します。

  • Lは、(3または4の次元がメジャー値を含む)3次元線形参照システム(LRS)・ジオメトリの線形参照メジャー次元を識別します。非LRSジオメトリの場合、または最後の次元をLRSジオメトリのメジャーとして受け入れる場合(Spatial and Graphのデフォルト)は、0 (ゼロ)を指定します。線形参照システム(LRS)については、「線形参照システム」を参照してください。

  • TT は、ジオメトリ・タイプ(有効値は00から09で、10から99は将来使用するために予約されています)を識別します。

表2-1に、有効なSDO_GTYPE値を示します。「ジオメトリ・タイプ」および「説明」の列に示す値は、OGIS仕様を反映しています。

表2-1 有効なSDO_GTYPE値

ジオメトリ・タイプ 説明

DL00

UNKNOWN_GEOMETRY

このジオメトリは、Spatial and Graphでは無視されます。

DL01

POINT

1つの点を含むジオメトリです。

DL02

LINEまたはCURVE

直線セグメントまたは円弧セグメント(あるいはその両方)を含むことができる1つの線ストリングを含むジオメトリです。(LINEおよびCURVEは、このコンテキストでは同義です。)

DL03

POLYGONまたはSURFACE

穴のある(または穴のない)1つのポリゴンを含むジオメトリ、注1または1つ以上のポリゴンで構成される1つの表面です。3次元ポリゴンでは、すべての点が同じ平面上にあることが必要です。

DL04

COLLECTION

ジオメトリは、異種の要素の集合です。COLLECTIONは、他のすべてのタイプを含むスーパーセットです。

DL05

MULTIPOINT

ジオメトリに1つ以上の点が存在しています。(MULTIPOINTは、POINTのスーパーセットです。)

DL06

MULTILINEまたはMULTICURVE

ジオメトリに1つ以上の線ストリングが存在しています。(MULTILINEおよびMULTICURVEは、このコンテキストでは同義であり、それぞれLINEおよびCURVEのスーパーセットです。)

DL07

MULTIPOLYGONまたはMULTISURFACE

ジオメトリに複数の非接続ポリゴン(複数の外側の境界)または複数の面が存在している場合があります(MULTIPOLYGONはPOLYGONのスーパーセットで、MULTISURFACEはSURFACEのスーパーセットです)。

DL08

SOLID

複数の面で構成されたジオメトリです。3次元空間で完全に囲まれています。立方形や錐台があります。

DL09

MULTISOLID

ジオメトリには、複数の非接続のソリッド(複数の外側の境界)が存在している場合があります。(MULTISOLIDは、SOLIDのスーパーセットです。)

脚注1

穴のあるポリゴンでは、外側の境界を先に入力し、次に内側の境界を入力します。

表2-1の「値」列に示すDは、次元数(2、3または4)です。たとえば、SDO_GTYPE値2003は、2次元ポリゴンを示します。次元数は、それぞれの頂点(たとえば、2次元オブジェクトのX、Y)を表現する座標の数に影響します。

指定されたレイヤー(列)にあるすべてのジオメトリは、同じ次元数である必要があります。たとえば、2次元と3次元のデータを同じレイヤーに混在させることはできません。

Get_Dims、Get_LRS_DimおよびGet_Gtypeメソッドを使用すると、ジオメトリ・オブジェクトのSDO_GTYPEのDLTTの各桁を戻すことができます。これらのメソッドについては、「SDO_GEOMETRYメソッド」を参照してください。

3次元ジオメトリのSDO_GTYPE値の詳細は、「3次元の空間オブジェクト」表1-1を参照してください。

2.2.2 SDO_SRID

SDO_SRID属性を使用して、ジオメトリに関連付ける座標系(空間参照システム)を識別できます。SDO_SRIDがnullの場合、ジオメトリには座標系は関連付けられていません。SDO_SRIDがNULL以外である場合、SDO_COORD_REF_SYS表のSRID列の値が含まれている必要があります(「SDO_COORD_REF_SYS表」を参照)。また、この値をUSER_SDO_GEOM_METADATAビューのSRID列に挿入する必要があります(「ジオメトリのメタデータ・ビュー」を参照)。

ジオメトリ列にあるすべてのジオメトリは、その列に空間索引が作成される場合は、同じSDO_SRID値である必要があります。

座標系については、「座標系(空間参照システム)」を参照してください。

2.2.3 SDO_POINT

SDO_POINT属性は、属性X、Y、ZおよびすべてのNUMBER型を持つSDO_POINT_TYPEオブジェクト・タイプを使用して定義されます。(SDO_POINT_TYPEの定義の詳細は、「SDO_GEOMETRYオブジェクト型」を参照。)SDO_ELEM_INFO配列およびSDO_ORDINATES配列が両方ともNULLで、SDO_POINT属性がNULL以外である場合、X、YおよびZの値は点ジオメトリの座標であるとみなされます。そうでない場合、SDO_POINT属性はSpatial and Graphによって無視されます。点ジオメトリを適切な記憶域のSDO_POINT属性に格納する必要があります。レイヤーに点ジオメトリのみが存在する場合は、点ジオメトリをSDO_POINT属性に格納してください。

点ジオメトリおよびその挿入と問合せの例については、「点」を参照してください。

注意:

線形参照システム(LRS)の点または方向付きの点の定義に、SDO_POINT属性を使用しないでください。LRSについては、「線形参照システム」を参照してください。方向付きの点については、「方向付きの点」を参照してください。

2.2.4 SDO_ELEM_INFO

SDO_ELEM_INFO属性は、数の可変長配列を使用して定義されます。この属性によって、SDO_ORDINATES属性(「SDO_ORDINATES」を参照)に格納されている縦座標の解釈方法がわかります。

それぞれ3つの数値セットは、次のとおり解釈されます。

  • SDO_STARTING_OFFSET -- この要素の最初の縦座標が保存されているSDO_ORDINATES配列内のオフセットを示します。オフセット値は0ではなく1から始まります。そのため、最初の要素の最初の縦座標はSDO_GEOMETRY.SDO_ORDINATES(1)になります。2つ目の要素がある場合、その要素の1つ目の縦座標はSDO_GEOMETRY.SDO_ORDINATES(n)の位置になります。ここで、nはSDO_ORDINATE_ARRAY定義内の位置を示します(たとえば、「穴のあるポリゴン」に示すように、19は19番目の位置です)。

  • SDO_ETYPE: 要素のタイプを示します。表2-2に、有効な値を示します。

    SDO_ETYPE値の1、2、1003および2003は、単純な要素とみなされます。それらは、SDO_ELEM_INFO配列の3つのエントリ1組によって定義されます。SDO_ETYPE値が1003および2003の場合、1桁目はexterior (1)またはinterior (2)を示します。

    1003: ポリゴンの外部の輪(反時計回りで指定される必要がある)

    2003: ポリゴンの内部の輪(時計回りで指定される必要がある)

    注意:

    単一ジオメトリのポリゴンの輪の要素には、SDO_ETYPE値として3を使用しないでください。単純なポリゴンが外部であるか内部であるかを判断できない場合にのみ、3を指定してください。その後、「SDO_MIGRATEパッケージ(アップグレード)」で説明するSDO_MIGRATE.TO_CURRENTプロシージャを使用して、表またはレイヤーを現行の形式にアップグレードしてください。

    1桁と4桁のSDO_ETYPE値を単一のジオメトリに混在させることはできません。

    SDO_ETYPE値の4、1005、2005、1006および2006は、複合要素とみなされます。これらは、複合要素に属する一連の3つの値を持つ、1つ以上のヘッダーを含みます。4桁のSDO_ETYPE値の場合、1桁目はexterior (1)またはinterior (2)を示します。

    1005: ポリゴンの外部の輪(反時計回りで指定される必要がある)

    2005: ポリゴンの内部の輪(時計回りで指定される必要がある)

    1006: 1つ以上のポリゴンの輪で構成される外側の表面

    2006: ソリッド要素の内側の表面

    1007: ソリッド要素

    複合要素の要素は、連続しています。複合要素にあるサブ要素の最後の点は、次のサブ要素の最初の点です。点は繰り返されません。

  • SDO_INTERPRETATION: SDO_ETYPEが複合要素であるかどうかによって、次のいずれかを意味します。

    SDO_ETYPEが複合要素の場合(4、1005または2005)、このフィールドは、要素の一部となる後続の3つの数値セットの組数を指定します。

    SDO_ETYPEが複合要素ではない場合(1、2、1003または2003)、SDO_INTERPRETATIONによってこの要素に対する座標の順序の解釈方法が決定されます。たとえば、線ストリングまたはポリゴン境界は、連結された一連の直線セグメントまたは円弧で構成されます。

    有効なSDO_ETYPEおよびSDO_INTERPRETATIONの値の組合せについては、表2-2を参照してください。

ジオメトリが複数の要素で構成される場合、ある要素の最後の縦座標は、常に次の要素の先頭のオフセットより1小さくなります。ジオメトリの最後の要素は、その要素の開始オフセットからSDO_ORDINATES可変長配列の最後までの座標によって記述されます。

複合要素(SDO_ETYPE値が4、1005または2005)では、3つの数値のn組(サブ要素当たり1組)が要素の記述に使用されます。複合要素のサブ要素は、連続しています。サブ要素の最後の点は、次のサブ要素の最初の点です。1からn-1のサブ要素では、あるサブ要素の最後の点は、次のサブ要素の開始点と同じです。サブ要素2...n-2の開始点は、サブ要素1...n-1の終了点と同じです。サブ要素nの最後の縦座標は、ジオメトリの次の要素の開始オフセット-1か、またはSDO_ORDINATES変長配列の最後の縦座標のいずれかです。

可変長配列の現行のサイズは、PL/SQLのvarray_variable.CountファンクションまたはOracle Call Interface(OCI)のOCICollSize関数を使用することによって求められます。

各SDO_ETYPE要素の意味、およびこれらのSDO_ETYPE要素のそれぞれに対するSDO_ELEM_INFOとSDO_ORDINATES可変長配列間の関係を表2-2に示します。

表2-2 SDO_ELEM_INFOにおける値および意味

SDO_ETYPE SDO_INTERPRETATION 意味

0

(任意の数値)

タイプ0 (ゼロ)要素です。Oracle Spatial and Graphによってサポートされないジオメトリ・タイプのモデル化に使用します。詳細は、「タイプ0 (ゼロ)要素」を参照してください。

1

1

点のタイプです。

1

0

方向付きの点の方向です。詳細は、「方向付きの点」を参照してください。

1

n > 1

n点の点の集合です。

2

1

頂点が直線セグメントに連結している線ストリングです。

2

2

連結された一連の円弧で構成される線ストリングです。

それぞれの円弧は、円弧の開始点、円弧上の任意の点および円弧の終了点という3つの座標を使用して記述されます。1つの円弧の終了点および次の円弧の開始点に対する座標は、繰り返されません。たとえば、2つの連結した円弧で構成される線ストリングの記述には、5つの座標が使用されます。点1、2および3は、最初の円弧を定義し、点3、4および5は、2つ目の円弧を定義します。ただし、点3は1回だけ格納されます。

2

3

NURBS (Non-Uniform Rational B-Spline)曲線。詳細は、「Oracle Spatial and GraphでのNURBS曲線のサポート」を参照してください。

1003または2003

1

頂点が直線セグメントに連結している単純なポリゴンです。各頂点について点を指定し、ポリゴンを閉じるために、終了点と開始点が一致するように指定する必要があります(許容差内で)。たとえば、4面のポリゴンの場合は、5番目の点が1番目の点と同じになるような5つの点を指定します。

1003または2003

2

それ自身で閉じている連結された一連の円弧で構成されるポリゴンです。最後の円弧の終了点は、最初の円弧の開始点と同じです。

それぞれの円弧は、円弧の開始点、円弧上の任意の点および円弧の終了点という3つの座標を使用して記述されます。1つの円弧の終了点および次の円弧の開始点に対する座標は、繰り返されません。たとえば、2つの連結した円弧で構成されるポリゴンの記述には、5つの座標が使用されます。点1、2および3は、最初の円弧を定義し、点3、4および5は、2つ目の円弧を定義します。点1および5の座標は同じである必要があり(許容差は考慮されません)、点3は繰り返されません。

1003または2003

3

矩形のタイプ(「最適化された矩形」ともいう)です。左下および右上の2点のみの境界矩形で、記述する必要があります。矩形タイプは、測地データまたは非測地データで使用できます。ただし、測地データでは、問合せウィンドウを作成するためにのみ矩形タイプを使用します(データベースにオブジェクトを格納するためには使用しないでください)。

測地データでのこのタイプの使用方法および例については、「測地MBR」を参照してください。3次元の最適化された矩形の作成については、「3次元の最適化された矩形」を参照してください。

1003または2003

4

円のタイプです。すべて円周上にある、非直線上の異なる3つの点によって記述されます。

4

n > 1

直線セグメントおよび円弧によって連結されたいくつかの頂点による複合線ストリングです。INTERPRETATION列にある値nは、線ストリングを構成する、連続するサブ要素の数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらサブ要素のそれぞれを記述します。SDO_ETYPE 2のもののみサブ要素になります。サブ要素の最後の点は、次のサブ要素の最初の点であり、繰り返すことはできません。

複合線ストリング・ジオメトリの例は、「複合線ストリング」および図2-5を参照してください。

1005または2005

n > 1

直線セグメントおよび円弧によって連結された頂点がある複合ポリゴンです。INTERPRETATION列にある値nは、ポリゴンを形成する、連続するサブ要素の数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらサブ要素のそれぞれを記述します。SDO_ETYPE 2のもののみサブ要素になります。サブ要素の終了点は、次のサブ要素の開始点であり、繰り返すことはできません。ポリゴンの開始点および終了点は同じである必要があります(許容差は無視されます)。

複合ポリゴン・ジオメトリの例は、「複合ポリゴン」を参照してください。

1006または2006

n > 1

1つ以上のポリゴンで構成され、各エッジが2つ以下のポリゴンで共有されている面です。面には面積はありますが、容積はありません。INTERPRETATION列にある値nは、表面を形成するポリゴンの数を指定します。

SDO_ELEM_INFO配列にある次のn組は、これらのポリゴンの各サブ要素を記述します。

表面は3次元である必要があります。Spatial and Graphでの3次元のサポートについては、「3次元の空間オブジェクト」を参照してください。

1007

n = 1または3

複数の面で構成され、完全に3次元空間で囲まれたソリッドです。したがって、ソリッドの内側には容積があります。ソリッド要素には、1006要素で定義された1つの外側の面と、2006要素で定義された0 (ゼロ)個以上の内側の境界が含まれる場合があります。Interpretation列の値nは、1または3である必要があります。

SDO_ELEM_INFO配列の後続の3つの数値セットは、ソリッド要素を構成する外側の面1006とオプションの内側の面2006を記述します。

nが3の場合、ソリッドは最適化されたボックスです。2つの3次元の点のみで定義が可能です。すなわち、そのボックスのX、YおよびZの各次元の最小値と最大値を示す点の2つのみで定義できます。例: SDO_GEOMETRY(3008, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1007,3), SDO_ORDINATE_ARRAY(1,1,1, 3,3,3))

Spatial and Graphでの3次元のサポートについては、「3次元の空間オブジェクト」を参照してください。

2.2.5 SDO_ORDINATES

SDO_ORDINATES属性は、空間オブジェクトの境界を形成する座標の値を格納するNUMBER型の可変長配列(1048576)を使用して定義されます。この配列は、常にSDO_ELEM_INFO可変長配列の論理積で使用されます。配列の値は、次元によって指定されます。たとえば、境界に4つの2次元の点があるポリゴンは、{X1, Y1, X2, Y2, X3, Y3, X4, Y4, X1, Y1}のように格納されます。点が3次元の場合、{X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4, X1, Y1, Z1}のように格納されます。それぞれの点に関連付けられている次元数は、「ジオメトリのメタデータ・ビュー」で説明するとおり、xxx_SDO_GEOM_METADATAビューのメタデータとして格納されます。

SDO_ORDINATES配列のすべての値は、有効で、NULL以外である必要があります。複数要素のジオメトリにおいて、要素の区切りに使用される特別な値はありません。特定の要素を記述する順序の開始点および終了点は、その要素に対するSTARTING_OFFSET値と、「SDO_ELEM_INFO」で説明したSDO_ELEM_INFO配列における次の要素によって決定されます。オフセット値は、1から開始します。SDO_ORDINATES(1)は、最初の要素の最初の点の最初の縦座標です。

2.2.6 使用上の考慮事項

SDO_GTYPEの値は、「SDO_GTYPE」に示すとおりに使用する必要があります(ただし、Spatial and Graphでは、すべてのジオメトリの整合性制約を確認または強制するわけではありません)。Spatial and Graphでは、次の内容については確認されません。

  • SDO_GTYPEの値がd001およびd005の場合、SDO_ETYPE 1以外のサブ要素は無視されます。

  • SDO_GTYPEの値がd002およびd006の場合、SDO_ETYPE 2または4以外のサブ要素は無視されます。

  • SDO_GTYPEの値がd003およびd007の場合、SDO_ETYPE 3または5以外のサブ要素は無視されます。(「SDO_ELEM_INFO」で説明したSDO_ETYPEの変形1003、2003、1005および2005は含まれます。)

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用して、1つのジオメトリ・オブジェクト、または指定されたフィーチャ表にあるすべてのジオメトリ・オブジェクトについての整合性を評価できます。