方向付きの点は、点と仮想の終了点の位置を示す座標を含む特殊な点のジオメトリで、点でのシンボルの回転や点からのラベルの引き出しに使用する方向ベクトルを表すことができます。方向付きの点は、主に地図の視覚化と、シンボル(高速道路を表す盾状のシンボルなど)を含む表示アプリケーションで使用されます。
方向付きの点は、次のように指定します。
SDO_GTYPE値(「SDO_GTYPE」を参照)は、単一点または複数点のジオメトリを使用します。
SDO_POINT属性には、NULL値を指定します。
SDO_ELEM_INFO配列(「SDO_ELEM_INFO」を参照)では、2番目と3番目の値(SDO_ETYPEとSDO_INTERPRETATION)を1と0にして、3つの値の組を追加指定します。たとえば、3つの値が3,1,0であれば、点が方向付きの点で、SDO_ORDINATES配列の3番目の数字が、シンボルやラベルの方向ベクトルを表す終了点の1つ目の座標(X軸値)であることを示されます。
SDO_ORDINATES配列(「SDO_ORDINATES」を参照)は、点の方向ベクトルを表す終了点の座標を-1から1の値で指定します。方位の始点は(0,0)とみなされ、対応する物理ポイントの位置に変換されます。
図2-8は、座標(12,14)に方向付きの点のジオメトリがあり、方向ベクトルは約34度(X軸から反時計回り)で、方向座標が0.3,0.2であることを示しています。(方位を特定の角度により正確に一致させるには、三角法のテキストにある表のコタンジェント値またはタンジェント値を参照してください。)この例の方向ベクトルは、(0,0)から(0.3,0.2)を経由しその先に延長されます。i=0.3、j=0.2とすると、角度(ラジアン)はarctan (j/i)で計算できます。この角度は、方向ベクトルに関連付けられた物理点に適用されます。
図2-8に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。
SDO_GTYPE = 2001。2は2次元を、1は単一の点を示します。
SDO_SRID = NULL。
SDO_POINT = NULL。
SDO_ELEM_INFO = (1,1,1, 3,1,0)。3,1,0の末尾の1,0は、方向付きの点であることを示します。
SDO_ORDINATES = (12,14, 0.3,0.2)。12,14は点の物理的な座標を識別し、0.3,0.2は方向ベクトルの終了点のx座標とy座標(12,14が原点と仮定)を識別します。この結果、方向ベクトルは、約34度の上向きに傾斜したものになります。
例2-12に、図2-8のジオメトリをデータベースに挿入するSQL文を示します。
例2-12 方向付きの点のジオメトリを挿入するSQL文
INSERT INTO cola_markets VALUES( 91, 'oriented_point', SDO_GEOMETRY( 2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1,1, 3,1,0), SDO_ORDINATE_ARRAY(12,14, 0.3,0.2)));
方向付きの点を定義する際は、次のことに注意してください。
方向ベクトルは、-1から1の数値で定義する必要があります。(例2-12では、この数値は0.3と0.2です。)
方向付きの点は、複数点でも指定できますが(例2-13を参照)、方向付けをする点の後に方向情報を続ける必要があります。
方向付きの点の方向ベクトルの次元については、次のことに注意してください。
2次元の点の方向ベクトルは2次元です。
LRSメジャーを持つ2次元の点(SDO_GTYPE=3301)の方向ベクトルは2次元です。
3次元の点(SDO_GTYPE=3001)の方向ベクトルは3次元です。
LRSメジャーを持つ3次元の点(SDO_GTYPE=4401)の方向ベクトルは3次元です。
4次元の点(SDO_GTYPE=4001)の方向ベクトルは3次元です。
例2-13 方向付きの複数点ジオメトリを挿入するSQL文
例2-13に、方向付きの複数点ジオメトリをデータベースに挿入するSQL文を示します。この複数点ジオメトリには、座標(12,14)および(12, 10)の位置に2つの点があり、それぞれが異なる方向ベクトルを保持しています。この文は例2-12の文と類似していますが、例2-13では、方向座標-1,-1を使用して、2つ目の点に左下向き45度(X軸から時計回りに135度)の方向ベクトルが割り当てられています。
-- Oriented multipoint: 2 points, different orientations INSERT INTO cola_markets VALUES( 92, 'oriented_multipoint', SDO_GEOMETRY( 2005, -- Multipoint NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1,1, 3,1,0, 5,1,1, 7,1,0), SDO_ORDINATE_ARRAY(12,14, 0.3,0.2, 12,10, -1,-1)));