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

前
次

31.1 SDO_UTIL.AFFINETRANSFORMS

書式

SDO_UTIL.AFFINETRANSFORMS(
     geometry    IN SDO_GEOMETRY, 
     translation IN VARCHAR2 DEFAULT 'FALSE', 
     tx          IN NUMBER DEFAULT 0.0, 
     ty          IN NUMBER DEFAULT 0.0, 
     tz          IN NUMBER DEFAULT 0.0, 
     scaling     IN VARCHAR2 DEFAULT 'FALSE', 
     psc1        IN SDO_GEOMETRY DEFAULT NULL, 
     sx          IN NUMBER DEFAULT 0.0, 
     sy          IN NUMBER DEFAULT 0.0, 
     sz          IN NUMBER DEFAULT 0.0, 
     rotation    IN VARCHAR2 DEFAULT 'FALSE', 
     p1          IN SDO_GEOMETRY DEFAULT NULL, 
     line1       IN SDO_GEOMETRY DEFAULT NULL, 
     angle       IN NUMBER DEFAULT 0.0, 
     dir         IN NUMBER DEFAULT -1, 
     shearing    IN VARCHAR2 DEFAULT 'FALSE', 
     shxy        IN NUMBER DEFAULT 0.0, 
     shyx        IN NUMBER DEFAULT 0.0, 
     shxz        IN NUMBER DEFAULT 0.0, 
     shzx        IN NUMBER DEFAULT 0.0, 
     shyz        IN NUMBER DEFAULT 0.0, 
     shzy        IN NUMBER DEFAULT 0.0, 
     reflection  IN VARCHAR2 DEFAULT 'FALSE', 
     pref        IN SDO_GEOMETRY DEFAULT NULL, 
     lineR       IN SDO_GEOMETRY DEFAULT NULL, 
     dirR        IN NUMBER DEFAULT -1, 
     planeR      IN VARCHAR2 DEFAULT 'FALSE', 
     n           IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     bigD        IN SDO_NUMBER_ARRAY DEFAULT NULL, 
     ) RETURN SDO_GEOMETRY;

説明

入力ジオメトリのアフィン変換を反映したジオメトリを戻します。

パラメータ

geometry

アフィン変換を実行する入力ジオメトリを指定します。

translation

文字列値がTRUEである場合は移動が実行され、文字列値がFALSE (デフォルト)の場合は移動が実行されません。このパラメータがTRUEである場合、点について(tx,ty)または(tx,ty,tz)分の移動が実行されます。

tx

移動のためのX軸値を指定します。デフォルト値は0.0です。

ty

移動のためのY軸値を指定します。デフォルト値は0.0です。

tz

移動のためのZ軸値を指定します。デフォルト値は0.0です。

scaling

文字列値がTRUEである場合はスケール変更が実行され、文字列値がFALSE (デフォルト)の場合はスケール変更が実行されません。

psc1

スケール変更を実行する入力ジオメトリ上の点を指定します。scalingTRUEである場合、このジオメトリは、ゼロ点(基点を基準にスケール変更するための0,0または0,0,0の縦座標を持つ点ジオメトリ)またはゼロ以外の位置(基点以外の点を基準にスケール変更するための縦座標を持つ点ジオメトリ)のいずれかである必要があります。scalingFALSEである場合、psc1がNULL値になる場合があります。

sx

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのX軸値を指定します。デフォルト値は0.0です。

sy

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのY軸値を指定します。デフォルト値は0.0です。

sz

(psc1パラメータに指定した点か、基点を基準に)スケール変更するためのZ軸値を指定します。デフォルト値は0.0です。

rotation

文字列値がTRUEである場合は回転が実行され、文字列値がFALSE (デフォルト)の場合は回転が実行されません。

2次元ジオメトリの場合、回転にはp1およびangleの値が使用されます。3次元ジオメトリの場合、回転にはangleおよびdirの値か、またはline1およびangleの値が使用されます。

p1

指定した点を基準に2次元ジオメトリ回転を行うための点を指定します。

line1

指定した軸を基準に回転を行うための線を指定します。

angle

指定した軸またはX、Y、Z軸を基準に回転を行うための角度回転パラメータ(ラジアン)を指定します。デフォルト値は0.0です。

dir

x(0)、y(1)またはz(2)軸回転のための回転パラメータを指定します。rotationパラメータ値がTRUEで、dirパラメータが使用されていない場合は、値として-1 (デフォルト)を使用します。

shearing

文字列値がTRUEである場合はせん断が実行され、文字列値がFALSE (デフォルト)の場合はせん断が実行されません。

2次元ジオメトリの場合、せん断にはshxyおよびshyxのパラメータ値が使用されます。3次元ジオメトリの場合、せん断にはshxyshyxshxzshzxshyzおよびshzyのパラメータ値が使用されます。

shxy

Y軸方向に沿ってX座標値を基にせん断するための値を指定します。デフォルト値は0.0です。

shyx

X軸方向に沿ってY座標値を基にせん断するための値を指定します。デフォルト値は0.0です。

shxz

Z軸方向に沿ってX座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。デフォルト値は0.0です。

shzx

X軸方向に沿ってZ座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。

shyz

Z軸方向に沿ってY座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。

shzy

Y軸方向に沿ってZ座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。

reflection

文字列値がTRUEである場合は反転が実行され、文字列値がFALSE (デフォルト)の場合は反転が実行されません。

2次元ジオメトリの反転の場合、軸を基準とする反転ではlineR値が、自己反転の中心点としてはpref値が使用されます。3次元のジオメトリの反転の場合、軸を基準とする反転ではlineR値が、yz面、xz面およびxy面を基準とする反転ではdirR値が、指定した面を基準とする反転ではplaneRnおよびbigDの値が、自己反転の中心点としてはpref値が使用されます。

pref

反転を実行するときの中心点となる点を指定します。

lineR

反転を実行するときの基準となる線を指定します。

dirR

反転を実行するときの基準となる面を示す番号を指定します。0はyz面、1はxz面、2はxy面です。reflectionパラメータ値にTRUEを指定しているが、dirRパラメータを使用しない場合は、-1 (デフォルト)を使用します。

planeR

文字列値がTRUEである場合は任意の面を基準に反転が実行され、文字列値がFALSE (デフォルト)の場合は任意の面を基準に反転が実行されません。

n

面の法線ベクトルを指定します。

bigD

3次元ジオメトリにおける面方程式のdelta値を指定します。

3次元ジオメトリの場合、bigD = deltaおよびn = (A,B,C)です(nは3次元空間の面の法線です)。つまり、面方程式は次のようになります。

Ax+By+Cz+bigD = 3DDotProd(n,anypointonplane)+bigD = 0

使用上の注意

アフィン変換は行列とベクトルの乗算であるため、その変換順序は重要です。

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用して、結果のジオメトリを検証する必要があります。

次の例では、2次元ジオメトリに対してアフィン変換を実行します。

-- Polygon reflection in 2D about a specified line segment
SELECT SDO_UTIL.AFFINETRANSFORMS(
  geometry =>   sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1),
                              sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)),
  translation => 'FALSE',
  tx => 0.0,
  ty => 0.0,
  tz => 0.0,
  scaling => 'FALSE',
  psc1 => NULL,
  sx => 0.0,
  sy => 0.0,
  sz => 0.0,
  rotation => 'TRUE',
  p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null),
  line1 => NULL,
  angle => -2.35253274913915,
  dir => -1,
  shearing => 'FALSE',
  shxy => 0.0,
  shyx => 0.0,
  shxz => 0.0,
  shzx => 0.0,
  shyz => 0.0,
  shzy => 0.0,
  reflection => 'FALSE',
  pref => NULL,
  lineR => NULL,
  dirR => 0,
  planeR => 'FALSE',
  n => NULL,
  bigD => NULL
) FROM DUAL;

SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122,
 0, 2))

ほとんどのパラメータにデフォルト値を使用している、前述の例の簡単なバージョンを次に示します。

-- Simpler form, using most default values
SELECT SDO_UTIL.AFFINETRANSFORMS(
  geometry =>   sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1),
                              sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)),
  rotation => 'TRUE',
  p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null),
  angle => -2.35253274913915
) FROM DUAL;

SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122,
 0, 2))

次の例では、3次元ジオメトリに対してアフィン変換を実行します。

-- Polygon reflection in 3D about a specified plane (z=1 plane in this example)
SELECT SDO_UTIL.AFFINETRANSFORMS(
  geometry => MDSYS.SDO_GEOMETRY(3003, 0, NULL, 
     MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
     MDSYS.SDO_ORDINATE_ARRAY(
     1.5,0,0,
     2.5,1,0,
     1.5,2,0,
     0.5,2,0,
     0.5,0,0,
     1.5,0,0)),
  translation => 'FALSE',
  tx => 0.0, 
  ty => 0.0, 
  tz => 0.0,
  scaling => 'FALSE', 
  psc1 => NULL, 
  sx => 0.0, 
  sy => 0.0, 
  sz => 0.0,
  rotation => 'FALSE', 
  p1 => NULL, 
  line1 => NULL,
  angle => 0.0, 
  dir => 0,
  shearing => 'FALSE', 
  shxy => 0.0, 
  shyx => 0.0, 
  shxz => 0.0, 
  shzx => 0.0, 
  shyz => 0.0, 
  shzy => 0.0,
  reflection => 'TRUE', 
  pref => NULL, 
  lineR => NULL, 
  dirR => -1, 
  planeR => 'TRUE', 
  n => SDO_NUMBER_ARRAY(0.0, 0.0, 1.0),   
  bigD => SDO_NUMBER_ARRAY(-1.0)
) FROM DUAL;

SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>MDSYS.SDO_GEOMETRY(3003,0,NULL,MDSYS.SDO_ELE
--------------------------------------------------------------------------------
SDO_GEOMETRY(3003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1.5, 0, 2, 2.5, 1, 2, 1.5, 2, 2, .5, 2, 2, .5, 0, 2, 1.5, 0, 2))