Oracle Spatial and Graphでは、3次元の空間データの格納および取出しがサポートされています(扱うことができる3次元空間データは、点、点群(点の集合)、線、ポリゴン、面、ソリッドなど)。表1-1に、3次元のジオメトリに該当するSDO_GEOMETRY型のSDO_GTYPE属性および要素に関連する属性を示します。(SDO_GEOMETRY型については、「SDO_GEOMETRYオブジェクト型」を参照してください。)
表1-1 3次元ジオメトリのSDO_GEOMETRY属性
3-Dデータのタイプ | SDO_GTYPE | 要素タイプ、SDO_ELEM_INFOでの解釈 |
---|---|---|
点 |
3001 |
該当しません。SDO_POINT_TYPE属性に含まれる3次元の値をすべて指定します。 |
線 |
3002 |
2, 1 |
ポリゴン |
3003 |
1003, 1: 平面の外部ポリゴン 2003, 1: 平面の内部ポリゴン 1003, 3: 平面の外部矩形 2003, 3: 平面の内部矩形 |
表面 |
3003 |
1006, 1:表面(次にポリゴンの要素情報が続きます) |
コレクション |
3004 |
2次元の場合と同様に扱われます |
複数点(点群) |
3005 |
1, n(nは点の数) |
複数線 |
3006 |
2, 1 (線と同じ) |
複数面 |
3007 |
1つ以上の表面の要素定義 |
ソリッド |
3008 |
閉じられた1つの表面で形成される単純なソリッド: 1つの要素タイプ1007の後に、1つの要素タイプ1006(外部表面)が続き、オプションで1つ以上の要素タイプ2006(内部表面)が続きます。 隣接する複数の単純なソリッドで形成される複合ソリッド: 1つの要素タイプ1008(単純なソリッドの数を保持)の後に、任意の数の要素タイプ1007(それぞれが1つの単純なソリッド)が続きます。 |
マルチソリッド |
3009 |
1つ以上の単純なソリッドの要素定義(要素タイプ1007)または複合ソリッド(要素タイプ1008) |
次の空間演算子を使用する計算では、3次元すべてが使用されます。
SDO_INSIDE(ソリッド・ジオメトリのみ)
他の演算子では、最初の2次元のみ使用されます。前述した演算子には、この項で後述するように、測地データを処理するときに高さの情報が無視されるものもあります。(空間演算子については、「空間演算子」を参照してください。)
SDO_GEOM.SDO_VOLUMEファンクションはソリッド・ジオメトリ(その名のとおり3次元のジオメトリ)にのみ適用されます。ただし、このファンクションを測地データで使用することはできません。(このファンクションの説明は、「SDO_GEOMパッケージ(ジオメトリ)」を参照してください。)その他のSDO_GEOMサブプログラムにおける3次元のジオメトリのサポートについては、表23-1に続く使用方法を参照してください。
3次元ジオメトリでの距離計算は次のように行われます。
測地データ(地理3Dデータ)の場合、距離計算は測地面上で行われます。
非測地データ(投影データまたはローカル・データ)の場合、距離計算は、3次元すべての測定単位が同じ場合のみ有効です。
どのファンクション、プロシージャまたは演算子でも3次元すべてを使用できるようにするには、地理3Dデータ(経度、緯度、楕円体高)を含む空間表に空間索引を作成する際に、CREATE INDEX文でPARAMETERS ('sdo_indx_dims=3')
を指定する必要があります。このパラメータをCREATE INDEX文で指定しないと、2次元の索引が作成されます。
3次元すべてを使用する空間ファンクション、空間プロシージャおよび空間演算子では、距離および長さの計算は、高さ(標高)を適切に組み込んで行われます。たとえば、3次元の点が2つあり、1つの点はデカルト空間の基点(0,0,0)にあり、もう1つの点はY軸上のX=3の位置の、高さ(Z)が4の位置(3,0,4)にあるとします。
演算に3次元をすべて使用して計算すると、2点間の距離は5になります。(辺が3:4:5の直角三角形の斜辺と考えられます。)
演算に2次元のみ使用すると、2点間の距離は3になります。(つまり、3番目の次元である高さは無視されます。)
ただし、次の演算子およびサブプログラムでは、測地データを処理するときに、3次元ジオメトリでの距離が地上表現(たとえば、ビルの伏図の経度/緯度方向の広がり)で計算され、高さの情報は近似処理されます。
SDO_NN演算子
SDO_GEOM.SDO_DISTANCEファンクション
SDO_GEOM.WITHIN_DISTANCEファンクション
3次元データを使用した2次元問合せウィンドウでは、SDO_FILTER演算子は使用できますが、その他の空間演算子は使用できません。
様々なタイプの3次元空間ジオメトリの作成例は、「3次元のジオメトリ・タイプ」を参照してください。そこでは、3次元ジオメトリの空間メタデータの更新方法および空間索引の作成方法についても例を示しています。
3次元の座標参照系のサポートの詳細は、「3次元の座標参照系のサポート」を参照してください。
空間集計ファンクションおよびPL/SQLパッケージとサブプログラムの多くで、3次元はサポートされません。2次元ジオメトリのみがサポートされるものは次のとおりです。
空間集計ファンクション。SDO_AGGR_MBR(2次元と3次元の両方のジオメトリがサポートされる)を除きます。
SDO_GEOM(ジオメトリ)サブプログラム。次に示すサブプログラム(2次元と3次元の両方のジオメトリがサポートされる)を除きます。
SDO_SAM(空間分析およびマイニング)サブプログラム
SDO_MIGRATE.TO_CURRENTプロシージャ
表1-2では、Oracle Spatial and Graphで特定の測地3次元の計算を内部的に実行する方法について説明します。
表1-2 測地3次元の計算の実行方法
計算のタイプ | 実行される内部計算 |
---|---|
ANYINTERACT |
入力ジオメトリがGnomonic変換を使用して変換された後、結果のジオメトリを使用してANYINTERACT関係が計算されます。 |
Area |
入力ジオメトリがローカル交差平面に投影された後、結果の入力ジオメトリを使用して面積が計算されます。 |
DistanceまたはLength |
2次元の正確な楕円体距離が、2つの最近点の経度と緯度を使用して計算された後、高さまたは長さの差が近似値を使用して含められます。 |
Volume |
入力ジオメトリがローカル交差平面に投影された後、結果の入力ジオメトリを使用して容積が計算されます。 |