35 SDO_UTILパッケージ(ユーティリティ)

MDSYS.SDO_UTILパッケージには、空間ユーティリティ・サブプログラムが含まれています。

35.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_UTIL.AFFINETRANSFORMSファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

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

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))

35.2 SDO_UTIL.APPEND

構文

SDO_UTIL.APPEND(
     geometry1  IN SDO_GEOMETRY, 
     geometry2  IN SDO_GEOMETRY 
     ) RETURN SDO_GEOMETRY;

説明

あるジオメトリを別のジオメトリに追加して、新しいジオメトリを作成します。

パラメータ

geometry1

geometry2を追加するジオメトリ・オブジェクトを指定します。

geometry2

geometry1に追加するジオメトリ・オブジェクトを指定します。

使用上のノート

このファンクションは、空間的に相互作用しないジオメトリ(非接続のオブジェクト)にのみ使用する必要があります。入力ジオメトリが非接続でない場合、結果のジオメトリは無効になります。

このファンクションは和集合操作またはその他の計算ジオメトリ操作は行いません。和集合操作を実行するには、SDO_GEOM.SDO_UNIONファンクションを使用します(「SDO_GEOMパッケージ(ジオメトリ)」を参照)。APPENDファンクションの方が、SDO_GEOM.SDO_UNIONファンクションよりも高速に実行されます。

結果のジオメトリのジオメトリ・タイプ(SDO_GTYPE値)には、入力ジオメトリおよび追加操作のタイプが反映されます。たとえば、入力ジオメトリが2次元ポリゴン(SDO_GTYPE = 2003)である場合、結果のジオメトリは2次元の複数ポリゴン(SDO_GTYPE = 2007)となります。

geometry1およびgeometry2が異なる座標系に基づく場合、例外が発生します。

次の例では、cola_aジオメトリおよびcola_cジオメトリを追加します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT SDO_UTIL.APPEND(c_a.shape, c_c.shape)
  FROM cola_markets c_a, cola_markets c_c
  WHERE c_a.name = 'cola_a' AND c_c.name = 'cola_c';
 
SDO_UTIL.APPEND(C_A.SHAPE,C_C.SHAPE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3, 5, 1003, 1), SDO_
ORDINATE_ARRAY(1, 1, 5, 7, 3, 3, 6, 3, 6, 5, 4, 5, 3, 3)) 

35.3 SDO_UTIL.BEARING_TILT_FOR_POINTS

構文

SDO_UTIL.BEARING_TILT_FOR_POINTS(
     start_point IN SDO_GEOMETRY, 
     end_point   IN SDO_GEOMETRY, 
     tol         IN NUMBER, 
     bearing     OUT NUMBER, 
     tilt        OUT NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

開始点から終了点への方位と傾きを計算します。

パラメータ

start_point

方位と傾きを計算するときの基点となる開始点ジオメトリ・オブジェクトを指定します。測地座標系に基づく点ジオメトリを指定する必要があります。

end_point

方位と傾きを計算するときに使用する終了点ジオメトリ・オブジェクトを指定します。start_pointと同じ測地座標系に基づく点ジオメトリを指定する必要があります。

tol

許容差(「許容差」を参照)。

bearing

北を基準として時計回りに測定されるラジアンの数値を指定します。

tilt

法線を基準に測定されるラジアンの数値を指定します。

使用上のノート

入力する点ジオメトリは、同一の測地座標系に基づく必要があります。非測地座標系に基づく場合、出力される方位はNULL値になります。

傾きは、高さの値の差を点と点の距離で除算した結果の逆正接として計算されます(高さは距離計算から除外されます)。つまり、tilt = atan(height_difference/distance)となります。

ラジアンを10進度に変換したり、10進度をラジアンに変換するには、SDO_UTIL.CONVERT_UNITファンクションを使用します。開始点を基準として指定された距離および方位に存在する点ジオメトリを戻すには、SDO_UTIL.POINT_AT_BEARINGファンクションを使用します。

次の例では、2つの地点(経度/緯度で指定)の方位と傾きを計算します。開始点の標高は0 (ゼロ)で、終了点の標高は5000メートルです。この例で表示される方位と傾きの値はラジアンです。

DECLARE
  bearing NUMBER;
  tilt    NUMBER;
BEGIN
  SDO_UTIL.BEARING_TILT_FOR_POINTS(
    SDO_GEOMETRY(2001, 8307,
      SDO_POINT_TYPE(-71.5, 43, 0), NULL, NULL), -- start_point
    SDO_GEOMETRY(2001, 8307,
      SDO_POINT_TYPE(-71, 43.5, 5000), NULL, NULL), -- end_point
    0.05,  --tolerance
    bearing,
    tilt);
  DBMS_OUTPUT.PUT_LINE('Bearing = ' || bearing);
  DBMS_OUTPUT.PUT_LINE('Tilt = ' || tilt);
END;
/
Bearing = .628239101930666          
Tilt = .0725397288678286910476298724869396973718

次の例は前述の例と同じですが、表示される方位と結果はラジアンではなく10進度です。

DECLARE
  bearing NUMBER;
  tilt    NUMBER;
BEGIN
  SDO_UTIL.BEARING_TILT_FOR_POINTS(
    SDO_GEOMETRY(2001, 8307,
      SDO_POINT_TYPE(-71.5, 43, 0), NULL, NULL), -- start_point
    SDO_GEOMETRY(2001, 8307,
      SDO_POINT_TYPE(-71, 43.5, 5000), NULL, NULL), -- end_point
    0.05,  --tolerance
    bearing,
    tilt);
  DBMS_OUTPUT.PUT_LINE('Bearing in degrees = '  
    || bearing * 180 / 3.1415926535897932384626433832795);
  DBMS_OUTPUT.PUT_LINE('Tilt in degrees = ' 
    || tilt * 180 / 3.1415926535897932384626433832795);
END;
/
Bearing in degrees = 35.99544906571628894295547577999851892359
Tilt in degrees = 4.15622031114988533540349823511872120415

35.4 SDO_UTIL.CIRCLE_POLYGON

構文

SDO_UTIL.CIRCLE_POLYGON(
     point         IN SDO_GEOMETRY, 
     radius        IN NUMBER, 
     arc_tolerance IN NUMBER, 
     start_azimuth IN NUMBER DEFAULT NULL, 
     end_azimuth   IN NUMBER DEFAULT NULL, 
     orientation   IN NUMBER DEFAULT NULL, 
     arc           IN NUMBER DEFAULT NULL 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.CIRCLE_POLYGON(
     center_longitude IN NUMBER, 
     center_latitude  IN NUMBER, 
     radius           IN NUMBER, 
     arc_tolerance    IN NUMBER 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.CIRCLE_POLYGON(
     center_longitude IN NUMBER, 
     center_latitude  IN NUMBER, 
     radius           IN NUMBER, 
     start_azimuth    IN NUMBER, 
     end_azimuth      IN NUMBER, 
     arc_tolerance    IN NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

測地座標系内の円および円弧のポリゴンまたは折れ線近似処理を作成します。

  • 最初の形式では、出力を完全に制御できます。

  • 2番目の形式では、指定された円に近似するか、または覆われるポリゴン・ジオメトリを戻します。

  • 3番目の形式では、開始方位から終了方位までの円の境界(円弧)を近似処理する線ジオメトリを戻します。

パラメータ

point

円の中心です。測地座標系の点ジオメトリである必要があります。戻されるジオメトリは同じ座標系にあります。

center_longitude

戻されるジオメトリの作成に使用する円の中心経度(度)を指定します。

center_latitude

戻されるジオメトリの作成に使用する円の中心緯度(度)を指定します。

radius

戻されるジオメトリの作成に使用する円の半径(m)を指定します。

arc_tolerance

ポリゴン・ジオメトリの作成に使用する数値を指定します。arc_toleranceパラメータ値の意味および使用上のガイドラインは、SDO_GEOM.SDO_ARC_DENSIFYファンクションのparamsパラメータ文字列のarc_toleranceキーワード値と同じです。ジオメトリに関連付けられた測定単位が、arc_toleranceパラメータ値に関連付けられます。(詳細は、「SDO_GEOMパッケージ(ジオメトリ)」SDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上のノート」を参照してください。)

start_azimuth

円弧の開始角(単位: 度)。真南から反時計回りに測定した値です。

start_azimuthおよびend_azimuthがnullの場合の動作は、近似処理するポリゴン・ジオメトリを戻し、指定した円に覆われる2番目の形式と同等です。

end_azimuth

円弧の終了角(単位: 度)。真南から反時計回りに測定した値です。orientationが明示的に指定されていない場合、円弧は、end_azimuthstart_azimuthより大きい場合は円のstart_azimuthからの反時計回りのセクションになり、end_azimuthstart_azimuthより小さい場合は時計回りのセクションになります。

start_azimuthおよびend_azimuthがnullの場合の動作は、近似処理するポリゴン・ジオメトリを戻し、指定した円に覆われる2番目の形式と同等です。

orientation

start_azimuthからend_azimuthまでの円のどの部分が使用されるかを制御します。これは、出力の方向ではなく、戻される出力の形状を制御します。戻されるポリゴンは常に反時計回りの方向で、戻される円弧は常にstart_azimuthからend_azimuthまでです。次のいずれかの値を使用できます。

  • 0またはnull (デフォルト): 自動(end_azimuthパラメータの説明を参照)。

  • 1または+1: 円弧はstart_azimuthからend_azimuthまで反時計回りに描画されます。

  • -1: 円弧はstart_azimuthからend_azimuthまで時計回りに描画されます。

arc

1に設定されている場合、結果は線になります。0またはnull (デフォルト)の場合、結果はポリゴンです。start_azimuthおよびend_azimuthでポリゴンの結果を持つ円のサブセットが指定された場合、戻されるポリゴンには円の中心が含まれます(つまり、扇形になります)。

使用上のノート

このファンクションの最初の形式を使用すると、真円が使用できない(Oracle Spatial and Graphの測地データで円が無効となる)場合に、指定された中心点の周囲に円状のポリゴンを作成できます。戻されるジオメトリのSDO_SRID値は8307となります(Longitude / Latitude (WGS 84))。

このファンクションの2番目と3番目の形式は、扇形を表す円弧またはポリゴンに対する折れ線近似値の作成に役立ちます。

開始と終了の方位値が指定された場合、これらは相互に等しくてはならず、360度以下の回転範囲にある必要があります。角度は-720から+720の範囲にある必要があります。

円は常に4つ以上の異なる頂点(正方形)で作成されます。

次の例では、Massachusetts州Concord市の中心に近い点の周囲に円状のポリゴンを戻します。ポリゴンの頂点の計算に使用されるradius値は100m、arc_tolerance値は5mです。

SELECT SDO_UTIL.CIRCLE_POLYGON(-71.34937, 42.46101, 100, 5)
   FROM DUAL;
 
SDO_UTIL.CIRCLE_POLYGON(-71.34937,42.46101,100,5)(SDO_GTYPE, SDO_SRID, SDO_POINT
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(-71.34937, 42.4601107, -71.348653, 42.4602824, -71.348211, 42.4607321, -71.34
8211, 42.4612879, -71.348653, 42.4617376, -71.34937, 42.4619093, -71.350087, 42.
4617376, -71.350529, 42.4612879, -71.350529, 42.4607321, -71.350087, 42.4602824,
 -71.34937, 42.4601107))

関連トピック

35.5 SDO_UTIL.CONCAT_LINES

構文

SDO_UTIL.CONCAT_LINES(
     geometry1  IN SDO_GEOMETRY, 
     geometry2  IN SDO_GEOMETRY 
     ) RETURN SDO_GEOMETRY;

説明

2つの単一線または複数線の2次元ジオメトリを連結して、新しいジオメトリを作成します。

パラメータ

geometry1

連結操作に使用する最初のジオメトリ・オブジェクトを指定します。

geometry2

連結操作に使用する2つ目のジオメトリ・オブジェクトを指定します。

使用上のノート

各入力ジオメトリは、単一線または複数線の2次元ジオメトリ(SDO_GTYPE値が2002または2006)である必要があります。このファンクションは、LRSジオメトリではサポートされません。LRSジオメトリ・セグメントを連結するには、SDO_LRS.CONCATENATE_GEOM_SEGMENTSファンクションを使用します(「SDO_LRSパッケージ(線形参照システム)」を参照)。

入力ジオメトリは、頂点が直線セグメントに連結している線ストリングである必要があります。円弧および複合線ストリングはサポートされていません。

入力ジオメトリが複数線ジオメトリの場合、ジオメトリの各要素は非接続であることが必要です。非接続でない場合、このファンクションは不適切な結果を戻すことがあります。

geometry1geometry2の位相関係は、DISJOINTまたはTOUCHである必要があり、位相関係がTOUCHの場合は、ジオメトリは2つの終了点でのみ交差する必要があります。

SDO_AGGR_CONCAT_LINES空間集計ファンクション(「空間集計ファンクション」を参照)を使用すると、単一線または複数線の複数の2次元ジオメトリを連結できます。

geometry1およびgeometry2が異なる座標系に基づく場合、例外が発生します。

次の例では、2つの単一線ストリング・ジオメトリを連結します。

-- Concatenate two touching lines: one from (1,1) to (5,1) and the
-- other from (5,1) to (8,1).
SELECT SDO_UTIL.CONCAT_LINES(
  SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
     SDO_ORDINATE_ARRAY(1,1, 5,1)),
  SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
     SDO_ORDINATE_ARRAY(5,1, 8,1))
  ) FROM DUAL;
 
SDO_UTIL.CONCAT_LINES(SDO_GEOMETRY(2002,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,2,1),SDO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
1, 1, 5, 1, 8, 1)) 

35.6 SDO_UTIL.CONVERT_UNIT

構文

SDO_UTIL.CONVERT_UNIT(
     ivalue    IN NUMBER, 
     in_unit   IN VARCHAR2, 
     out_unit  IN VARCHAR2 
     ) RETURN NUMBER;

説明

角度、面積または距離の測定単位を別の測定単位に変換します。

パラメータ

value

変換する単位の数値を指定します。たとえば、10進度単位の10をラジアンに変換するには、10を指定します。

in_unit

入力値の変換元のメジャー単位を指定します。MDSYS.SDO_ANGLE_UNITS表(「MDSYS.SDO_ANGLE_UNITSビュー」を参照)、MDSYS.SDO_AREA_UNITS表(「測定単位のサポート」を参照)またはMDSYS.SDO_DIST_UNITS表(「測定単位のサポート」を参照)のSDO_UNIT列の値を指定する必要があります。たとえば、10進度をラジアンに変換するには、Degreeを指定します。

out_unit

入力値の変換先のメジャー単位を指定します。in_unitに使用したのと同じ表のSDO_UNIT列の値であることが必要です。たとえば、10進度をラジアンに変換するには、Radianを指定します。

使用上のノート

数学的な内部操作の実行方法によっては、このファンクションは非常に高い精度では正確な値を戻さない場合があります(特に、内部操作に小さい数または無理数(piなど)が含まれる場合)。たとえば、10進度単位の1を10進分に変換すると、値は60.0000017になります。

次の例では、1ラジアンを10進度に変換します。

SQL> SELECT SDO_UTIL.CONVERT_UNIT(1, 'Radian', 'Degree') FROM DUAL;
 
SDO_UTIL.CONVERT_UNIT(1,'RADIAN','DEGREE')                                      
------------------------------------------                                      
                                57.2957796 

関連トピック

なし。

35.7 SDO_UTIL.CONVERT3007TO3008

構文

SDO_UTIL.CONVERT3007TO3008(
     geometry  IN SDO_GEOMETRY  
     ) RETURN SDO_GEOMETRY;

説明

複数面を持つ3次元の入力ジオメトリ(SDO_GTYPE 3007)を単純なソリッド・ジオメトリ(SDO_GTYPE 3008)に変換します。

パラメータ

geometry

SDO_GTYPE 3007 (複数面)のジオメトリ・オブジェクトを指定します。表面は単純なポリゴンで、内部はありません。

使用上のノート

ノート:

SDO_UTIL.CONVERT3007TO3008ファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

3DジオメトリのSDO_GEOMETRY属性の詳細は、「3次元の空間オブジェクト」を参照してください。

このファンクションは、戻される単純なソリッド・ジオメトリの妥当性をチェックしません。ジオメトリ・オブジェクトの妥当性をチェックするには、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用します。

次の例では、複数面を持つ3次元の入力ジオメトリ(SDO_GTYPE 3007)を単純なソリッド・ジオメトリ(SDO_GTYPE 3008)に変換します。GEOMS3Dという表が存在し、少なくとも数値ID列と、複数面を持つ3次元のジオメトリを格納するSDO_GEOMETRY型のGEOMという列が含まれていると想定します。

SELECT sdo_util.convert3007to3008(g.geom) FROM geoms3d g WHERE g.id=1;

35.8 SDO_UTIL.DELETE_SDO_GEOM_METADATA

構文

SDO_UTIL.DELETE_SDO_GEOM_METADATA(     
  owner       IN   VARCHAR2,
  table_name  IN VARCHAR2,
  column_name IN VARCHAR2);

説明

ジオメトリ・メタデータ・ビューUSER_SDO_GEOMETRY_METADATAおよびALL_SDO_GEOMETRY_METADATAから空間表のメタデータを削除します。

パラメータ

owner

空間表を所有するスキーマの名前。大文字である必要があります。

table_name

空間表の名前(SDO_GEOMETRY型の列を持つフィーチャ表)。大文字である必要があります。

column_name

SDO_GEOMETRY型の列の名前。大文字である必要があります。

使用上のノート

ジオメトリ・メタデータ・ビューから空間表のメタデータを削除すると、そのメタデータ(ownertable_nameおよびcolumn_name)に基づく空間索引も事実上無効になります。

メタデータを削除した後にメタデータをリストアする場合は、SDO_UTIL.INSERT_SDO_GEOM_METADATAプロシージャを使用できます。

このプロシージャを実行するには、メタデータの所有者であるか、DBA権限を持つか、または表に対するSELECTまたはINDEX権限を持っている必要があります。

他のユーザーのスキーマ内の空間表でこのプロシージャを使用するには、DBA権限または他のユーザーの表に対するSELECT権限が必要です。たとえばUSER1がUSER2.COLA_MARKETS表のジオメトリ・メタデータを挿入する場合、USER1はDBA権限またはUSER2.COLA_MARKETS表に対するSELECT権限を持っている必要があります。

次の例では、COLA_MARKETSという名前の空間表のメタデータをUSER2スキーマのSHAPEというジオメトリ列とともに削除し、そのメタデータに定義された空間索引を無効にします。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

EXECUTE SDO_UTIL.DELETE_SDO_GEOM_METADATA ('USER2', 'COLA_MARKETS', 'SHAPE');

関連トピック

35.9 SDO_UTIL.DENSIFY_GEOMETRY

構文

SDO_UTIL.DENSIFY_GEOMETRY(
     geometry  IN SDO_GEOMETRY, 
     interval  IN NUMBER DEFAULT 5000 
     ) RETURN SDO_GEOMETRY;

説明

間隔値に基づいて入力ジオメトリを稠密化します。

パラメータ

geometry

稠密化するジオメトリ・オブジェクト。

間隔

ジオメトリの稠密化に使用される間隔値。正の数字を指定する必要があります。(ゼロまたは負の数を指定すると、入力ジオメトリが返されます。)デフォルトは5000です。測地ジオメトリの場合、デフォルトは5000mです。

使用上のノート

このファンクションでは、指定された間隔より線分が長くならないようにポイントを追加して、入力ジオメトリを稠密化します。

このファンクションは、大円補間の曲率を表示することによって平面地図上に長い測地線を表示する場合に便利です。平らな地図つまり平面地図上に測地ジオメトリを表示する場合、このファンクションは、頂点を直線で接続するかわりに線ストリングまたはポリゴンに沿って頂点間の測地パスを表示するのに役立ちます。 稠密化は、測地パスに沿って実行されます。

次の例では、入力ジオメトリを稠密化します。(説明的なコメントが出力に追加されます。)

SELECT SDO_UTIL.DENSIFY_GEOMETRY(
  SDO_GEOMETRY(2004, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 5, 1, 1),
  SDO_ORDINATE_ARRAY(-78.24299, 31.50939, -31.99998, 31.51001, -64.6683, 32.38425)), 1000000)
FROM DUAL;

SDO_UTIL.DENSIFY_GEOMETRY(SDO_GEOMETRY(2004,8307,NULL,SDO_ELEM_INFO_ARRAY(1,2,1,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2004, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 13, 1, 1), 
SDO_ORDINATE_ARRAY(-78.24299, 31.50939, -67.77851, 33.0389493, -57.05549, 33.6714211,    
-46.2911, 33.3720604, -35.71139, 32.1574866, -31.99998, 31.51001,  /* 4 points are added inside the long line */ 
-64.6683, 32.38425)) /* single point is still the same as before */

関連トピック

35.10 SDO_UTIL.DROP_WORK_TABLES

構文

SDO_UTIL.DROP_WORK_TABLES(
     oidstr IN VARCHAR2);

説明

現行のスキーマから、点群またはTINの作成時に作成された一時(スクラッチ)表および一時(スクラッチ)ビューを削除します。

パラメータ

oidstr

16進数でオブジェクトのID文字列を指定します。スクラッチ表を削除する必要があることを示すエラー・メッセージで提供されている文字列を使用します。

使用上のノート

点群またはTINを作成する際に、スクラッチ表が前のSDO_PC_PKG.CREATE_PCまたはSDO_TIN_PKG.CREATE_TIN操作から引き続き存在している場合は、最初にそのスクラッチ表を削除する必要があることを示すエラー・メッセージが表示されます。これらのスクラッチ表を削除するには、SDO_UTIL.DROP_WORK_TABLESプロシージャを使用します。

このプロシージャは、'M%_<oidstr>$$%'に一致するすべての表とビューを削除します。

次の例では、前のエラー・メッセージで指定されているOID文字列を使用して、前のSDO_PC_PKG.CREATE_PCまたはSDO_TIN_PKG.CREATE_TIN操作からスクラッチ表を削除します。

EXECXUTE SDO_UTIL.DROP_WORK_TABLES('A1B2C3');

35.11 SDO_UTIL.ELLIPSE_POLYGON

構文

SDO_UTIL.ELLIPSE_POLYGON(
     center_longitude IN NUMBER, 
     center_latitude  IN NUMBER, 
     semi_major_axis  IN NUMBER, 
     semi_minor_axis  IN NUMBER, 
     azimuth          IN NUMBER, 
     arc_tolerance    IN NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

指定された楕円に近似するか、または覆われるポリゴン・ジオメトリを戻します。

パラメータ

center_longitude

戻されるジオメトリの作成に使用する楕円の中心経度(度)を指定します。

center_latitude

戻されるジオメトリの作成に使用する楕円の中心緯度(度)を指定します。

semi_major_axis

戻されるジオメトリの作成に使用する楕円の半長径(m)を指定します。

semi_minor_axis

戻されるジオメトリの作成に使用する楕円の半短径(m)を指定します。

azimuth

戻されるジオメトリの作成に使用する楕円の方位角(北を基準として長径を時計回りに回転させた角度)を指定します。値は0から180の範囲である必要があります。戻されるジオメトリは指定した角度に回転されます。

arc_tolerance

ポリゴン・ジオメトリの作成に使用する数値を指定します。arc_toleranceパラメータ値の意味および使用上のガイドラインは、SDO_GEOM.SDO_ARC_DENSIFYファンクションのparamsパラメータ文字列のarc_toleranceキーワード値と同じです。ジオメトリに関連付けられた測定単位が、arc_toleranceパラメータ値に関連付けられます。(詳細は、「SDO_GEOMパッケージ(ジオメトリ)」SDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上のノート」を参照してください。)

使用上のノート

このファンクションを使用すると、楕円が使用できない(Oracle Spatial and Graphの測地データで楕円が無効となる)場合に、指定された中心点の周囲に楕円状のポリゴンを作成できます。戻されるジオメトリのSDO_SRID値は8307となります(Longitude / Latitude (WGS 84))。

次の例では、Massachusetts州Concord市の中心に近い点の周囲にある、東西方向(azimuth = 90)の楕円状のポリゴンを戻します。ポリゴンの頂点の計算に使用されるarc_tolerance値は5mです。

SELECT SDO_UTIL.ELLIPSE_POLYGON(-71.34937, 42.46101, 100, 50, 90, 5)
   FROM DUAL;
 
SDO_UTIL.ELLIPSE_POLYGON(-71.34937,42.46101,100,50,90,5)(SDO_GTYPE, SDO_SRID, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(-71.350589, 42.46101, -71.350168, 42.4606701, -71.349708, 42.460578, -71.3493
7, 42.4605603, -71.349032, 42.460578, -71.348572, 42.4606701, -71.348151, 42.461
01, -71.348572, 42.4613499, -71.349032, 42.461442, -71.34937, 42.4614597, -71.34
9708, 42.461442, -71.350168, 42.4613499, -71.350589, 42.46101))

関連トピック

35.12 SDO_UTIL.EXPAND_GEOM

構文

SDO_UTIL.EXPAND_GEOM(
     geometry  IN SDO_GEOMETRY  
     ) RETURN SDO_GEOMETRY;

説明

1つ以上のリングが最適化された形式(最適化された矩形)で指定されたポリゴンである外部リングまたは1つ以上の内部リング(あるいはその両方)を持つジオメトリに対して、最適化されたすべてのポリゴン・リングが単純なポリゴンとして指定される(すべての頂点が指定されている)形式でジオメトリを返します。

パラメータ

geometry

最適化された形式で指定された外部ポリゴン・リングまたは内部ポリゴン(あるいはその両方)を持つジオメトリ。

使用上のノート

入力ジオメトリのリングが最適化された形式(最適化された矩形)で指定されていない場合、ファンクションは入力ジオメトリを返します。

単純なポリゴンおよび最適化された矩形は、SDO_ELEM_INFOで説明したように、SDO_ETYPEの値が1003または2003ですが、SDO_INTERPRETATIONの値は異なります。

このファンクションは、2Dジオメトリと3Dジオメトリの両方でサポートされています。

このファンクションは、最適化された矩形では動作しないアプリケーションを使用する場合や、最適化された矩形のかわりに単純なポリゴンを使用する場合に便利です。

次の例では、外部ポリゴンと内部ポリゴン・リングが最適化された矩形(この場合は四角形)の入力ジオメトリを使用しています。外部リングは8x8、内部リングは2x2です。外部リングと内部リングが単純なポリゴンとして指定されているジオメトリを返します。

SELECT sdo_util.expand_geom(sdo_geometry(2003, null, null, -
     sdo_elem_info_array(1,1003,3, 5,2003,3), -
     sdo_ordinate_array(0,0, 8,8, 3,3, 5,5))) FROM DUAL;

SDO_UTIL.EXPAND_GEOM(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,3,5,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 11, 2003, 1), SDO
_ORDINATE_ARRAY(0, 8, 0, 0, 8, 0, 8, 8, 0, 8, 3, 3, 3, 5, 5, 5, 5, 3, 3, 3))

35.13 SDO_UTIL.EXTRACT

構文

SDO_UTIL.EXTRACT(
     geometry IN SDO_GEOMETRY, 
     element  IN NUMBER, 
     ring     IN NUMBER DEFAULT 0 
     ) RETURN SDO_GEOMETRY;

説明

2次元の入力ジオメトリの特定の要素(およびオプションで輪)を表現する2次元のジオメトリを戻します。

パラメータ

geometry

戻されるジオメトリの抽出元のジオメトリを指定します。2次元のジオメトリを指定する必要があります。

element

ジオメトリ内の要素の番号を指定します。1は1つ目の要素、2は2つ目の要素のようになります。1、2または3で終わるSDO_GTYPE値を持つジオメトリ(「SDO_GTYPE」を参照)は、1つの要素を持ちます。4、5、6または7で終わるSDO_GTYPE値を持つジオメトリは、複数の要素を持つ可能性があります。たとえば、SDO_GTYPEが2007の複数ポリゴンには、3つの要素(ポリゴン)が含まれる場合があります。

ring

要素内のサブ要素(輪)の番号を指定します。1は1つ目のサブ要素、2は2つ目のサブ要素のようになります。このパラメータは、1つ以上の穴があるポリゴンのサブ要素または点クラスタのサブ要素を指定する場合にのみ有効です。

  • 穴があるポリゴンの場合、1つ目のサブ要素は外部の輪、2つ目のサブ要素は1つ目の内部の輪、3つ目のサブ要素は2つ目の内部の輪のようになります。たとえば、「穴のあるポリゴン」に示す穴のあるポリゴンでは、外部の輪がサブ要素1、内部の輪(穴)がサブ要素2になります。

  • 点クラスタの場合、1つ目のサブ要素は点クラスタの1つ目の点、2つ目のサブ要素は点クラスタの2つ目の点のようになります。

デフォルト値は0(ゼロ)です。この場合、要素全体が抽出されます。

使用上のノート

このファンクションは、2次元のジオメトリにのみ適用されます。3次元のジオメトリについては、SDO_UTIL.EXTRACT3Dファンクションを使用します。

このファンクションは、複雑なジオメトリから特定の要素またはサブ要素を抽出する場合に有効です。たとえば、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションまたはSDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTプロシージャ(「SDO_GEOMパッケージ(ジオメトリ)」を参照)によってジオメトリが無効であると識別された場合は、検査のために、EXTRACTファンクションを使用して、その無効なジオメトリを抽出できます。

1つ以上の穴のあるポリゴンの場合、抽出された内部の輪を表現するジオメトリは、戻されると方向が変更され、頂点が(内部の輪内では時計回りであったのに対して)反時計回りで表現されます。

geometryがNULLの場合、または0 (ゼロ)で終わるSDO_GTYPE値を持つ場合、このファンクションはNULLのジオメトリを戻します。

geometryには、タイプが0 (ゼロ)の要素を含めることはできません。タイプ0(ゼロ)要素については、「タイプ0(ゼロ)要素」を参照してください。

このファンクションは、縦座標がNULL値のジオメトリでの使用は想定されていません。戻されるジオメトリでは、縦座標のNULL値は0(ゼロ)で置き換えられます。

elementまたはringgeometryに対して無効な数である場合は、例外が発生します。

次の例では、cola_cジオメトリの1つ目(1つのみ)の要素を抽出します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT c.name, SDO_UTIL.EXTRACT(c.shape, 1)
   FROM cola_markets c WHERE c.name = 'cola_c';

NAME                                                                            
--------------------------------                                                
SDO_UTIL.EXTRACT(C.SHAPE,1)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_IN
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3, 3, 6, 3, 6, 5, 4, 5, 3, 3))

次の例では、(「穴のあるポリゴン」例2-7に示すINSERT文と同じ文を使用して)穴のあるポリゴンを挿入し、穴(2つ目のサブ要素)を表現するジオメトリを抽出します。入力ジオメトリの穴(2つ目のサブ要素)では頂点が時計回りで表現されているのに対し、EXTRACTファンクションによって戻されたジオメトリでは頂点が反時計回りで表現されていることに注意してください。

-- Insert polygon with hole.
INSERT INTO cola_markets VALUES(
  10,
  'polygon_with_hole',
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole
    SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4,
        7,5, 7,10, 10,10, 10,5, 7,5)
  )
);

1 row created.

-- Extract the hole geometry (second subelement).
SELECT SDO_UTIL.EXTRACT(c.shape, 1, 2)
   FROM cola_markets c WHERE c.name = 'polygon_with_hole';

SDO_UTIL.EXTRACT(C.SHAPE,1,2)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(7, 5, 10, 5, 10, 10, 7, 10, 7, 5)) 

35.14 SDO_UTIL.EXTRACT_ALL

構文

SDO_UTIL.EXTRACT_ALL(
     geometry IN SDO_GEOMETRY, 
     flatten  IN NUMBER DEFAULT 1 
     ) RETURN SDO_GEOMETRY_ARRAY;

説明

2次元の入力ジオメトリのすべての要素およびサブ要素を、1つ以上のジオメトリの配列として戻します。VARRAY OF SDO_GEOMETRYとして定義されるSDO_GEOMETRY_ARRAY型のオブジェクトを戻します。

パラメータ

geometry

すべての要素とサブ要素の抽出元となるジオメトリを指定します。2次元のジオメトリを指定する必要があります。

flatten

外部の輪と1つ以上の内部の輪を含むジオメトリについて、輪を個別のジオメトリに「フラット化」するかどうかを示すフラグを指定します。

  • 0 (ゼロ)を指定すると、要素ごとに1つのジオメトリが戻されますが、リングを個別のジオメトリにフラット化しません。(入力ジオメトリの各要素に対して1つのジオメトリが戻されることは変わりません。)

  • 1 (デフォルト)またはその他のゼロ以外の値を指定すると、リングを個別のジオメトリにフラット化します。

たとえば、ポリゴンに外部の輪と内部の輪が1つずつ含まれる場合、0の値を指定すると、両方の輪を含む1つのジオメトリが戻され、1を指定すると、2つのジオメトリ(それぞれに1つの輪がジオメトリとして含まれる)が戻されます。

外部の輪と1つ以上の内部の輪を含まないジオメトリの場合、このパラメータは無視されます。

使用上のノート

このファンクションは、2次元のジオメトリにのみ適用されます。3次元のジオメトリについては、SDO_UTIL.EXTRACT3Dファンクションを使用します。

このファンクションを使用すると、ジオメトリに含まれる要素とサブ要素の数に関係なく、ジオメトリからすべての要素とサブ要素を抽出できます。1、2または3で終わるSDO_GTYPE値を持つジオメトリ(「SDO_GTYPE」を参照)は、1つの要素を持ちます。4、5、6または7で終わるSDO_GTYPE値を持つジオメトリは、複数の要素を持つ可能性があります。たとえば、SDO_GTYPEが2007の複数ポリゴンには、3つの要素(ポリゴン)が含まれる場合があります。個々の要素を抽出するには、SDO_UTIL.EXTRACTファンクションをかわりに使用します。

1つ以上の穴のあるポリゴンで、flattenパラメータにデフォルト値が指定されている場合、抽出された内部の輪を表現するジオメトリは、戻されると方向が変更され、頂点が(内部の輪内では時計回りであったのに対して)反時計回りで表現されます。ただし、flattenパラメータ値が0である場合は、方向の変更は実行されません。

geometryがNULLの場合、または0 (ゼロ)で終わるSDO_GTYPE値を持つ場合、このファンクションはNULLのジオメトリを戻します。

geometryには、タイプが0 (ゼロ)の要素を含めることはできません。タイプ0(ゼロ)要素については、「タイプ0(ゼロ)要素」を参照してください。

このファンクションは、縦座標がNULL値のジオメトリでの使用は想定されていません。戻されるジオメトリでは、縦座標のNULL値は0(ゼロ)で置き換えられます。

次の例では、cola_bジオメトリからすべての要素を抽出します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT * FROM TABLE(
  SELECT SDO_UTIL.EXTRACT_ALL(c.shape)
    FROM cola_markets c WHERE c.name = 'cola_b');
 
 SDO_GTYPE   SDO_SRID                                                           
---------- ----------                                                           
SDO_POINT(X, Y, Z)                                                              
--------------------------------------------------------------------------------
SDO_ELEM_INFO                                                                   
--------------------------------------------------------------------------------
SDO_ORDINATES                                                                   
--------------------------------------------------------------------------------
      2003                                                                      
                                                                                
SDO_ELEM_INFO_ARRAY(1, 1003, 1)                                                 
SDO_ORDINATE_ARRAY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1)                                

次の例では、(「穴のあるポリゴン」例2-7に示すINSERT文と同じ文を使用して)穴のあるポリゴンを挿入し、polygon_with_holeジオメトリからすべての要素とサブ要素を抽出します。flattenパラメータが指定されていないため、入力ジオメトリの穴(2つ目のサブ要素)では頂点が時計回りで表現されているのに対し、EXTRACT_ALLファンクションによって戻された2つ目のジオメトリでは、頂点が反時計回りで表現されていることに注意してください。

-- Insert polygon with hole.
INSERT INTO cola_markets VALUES(
  10,
  'polygon_with_hole',
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole
    SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4,
        7,5, 7,10, 10,10, 10,5, 7,5)
  )
);

1 row created.

-- Extract all, with default for flatten.
SELECT * FROM TABLE(
  SELECT SDO_UTIL.EXTRACT_ALL(c.shape)
  FROM cola_markets c WHERE c.name = 'polygon_with_hole');
 
 SDO_GTYPE   SDO_SRID                                                           
---------- ----------                                                           
SDO_POINT(X, Y, Z)                                                              
--------------------------------------------------------------------------------
SDO_ELEM_INFO                                                                   
--------------------------------------------------------------------------------
SDO_ORDINATES                                                                   
--------------------------------------------------------------------------------
      2003                                                                      
                                                                                
SDO_ELEM_INFO_ARRAY(1, 1003, 1)                                                 
SDO_ORDINATE_ARRAY(2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11, 13, 5, 13, 2, 11, 2, 4) 
                                                                                
 
 SDO_GTYPE   SDO_SRID                                                           
---------- ----------                                                           
SDO_POINT(X, Y, Z)                                                              
--------------------------------------------------------------------------------
SDO_ELEM_INFO                                                                   
--------------------------------------------------------------------------------
SDO_ORDINATES                                                                   
--------------------------------------------------------------------------------
      2003                                                                      
                                                                                
SDO_ELEM_INFO_ARRAY(1, 1003, 1)                                                 
SDO_ORDINATE_ARRAY(7, 5, 10, 5, 10, 10, 7, 10, 7, 5)                            

次の例では、(前述の例で挿入された) polygon_with_holeジオメトリからすべての要素とサブ要素を抽出し、flattenパラメータ値を0 (ゼロ)として指定します。これにより、戻される配列には、入力ジオメトリと同じ1つのジオメトリが含まれます(つまり、EXTRACT_ALLファンクションによって戻されるジオメトリでは、穴(2つ目のサブ要素)の頂点は、入力ジオメトリでの場合と同様に時計回りです)。

-- Extract all, with flatten = 0.
SELECT * FROM TABLE(
  SELECT SDO_UTIL.EXTRACT_ALL(c.shape, 0)
    FROM cola_markets c WHERE c.name = 'polygon_with_hole');
 
 SDO_GTYPE   SDO_SRID                                                           
---------- ----------                                                           
SDO_POINT(X, Y, Z)                                                              
--------------------------------------------------------------------------------
SDO_ELEM_INFO                                                                   
--------------------------------------------------------------------------------
SDO_ORDINATES                                                                   
--------------------------------------------------------------------------------
      2003                                                                      
                                                                                
SDO_ELEM_INFO_ARRAY(1, 1003, 1, 19, 2003, 1)                                    
SDO_ORDINATE_ARRAY(2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11, 13, 5, 13, 2, 11, 2, 4, 
7, 5, 7, 10, 10, 10, 10, 5, 7, 5)                                               
 
 SDO_GTYPE   SDO_SRID                                                           
---------- ----------                                                           
SDO_POINT(X, Y, Z)                                                              
--------------------------------------------------------------------------------
SDO_ELEM_INFO                                                                   
--------------------------------------------------------------------------------
SDO_ORDINATES                                                                   
--------------------------------------------------------------------------------

関連トピック

35.15 SDO_UTIL.EXTRACT3D

構文

SDO_UTIL.EXTRACT3D(
     geometry IN SDO_GEOMETRY, 
     label    IN VARCHAR2 
     ) RETURN SDO_GEOMETRY;

説明

3次元の入力ジオメトリの特定のサブセットを表現する3次元のジオメトリを戻します。

パラメータ

geometry

戻されるジオメトリの抽出元のジオメトリを指定します。3次元のジオメトリを指定する必要があります。

label

戻されるサブセット・ジオメトリを示す数字をカンマで区切った文字列で指定します。各数字は、入力ジオメトリ内のジオメトリ項目の相対位置を示します。次にlabel文字列内の項目とその位置を示します。

  • pointID: 点の番号

  • edgeID: エッジの番号

  • ringID: 輪の番号

  • polygonID: ポリゴンの番号

  • csurfID: 複合表面の番号

  • solidID: ソリッドの番号

  • multiID: マルチソリッドの番号

0 (ゼロ)の場合は項目が適用されません。また、適用されない末尾の項目は省略できます。たとえば、'0,2,1,4,1'では、点の番号は適用されず、1番目の複合表面の4番目のポリゴンで、1番目の輪の2番目のエッジを指定します。

使用上のノート

ノート:

SDO_UTIL.EXTRACT3Dファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、3次元のジオメトリにのみ適用されます。2次元のジオメトリについては、SDO_UTIL.EXTRACTファンクションを使用します。

このファンクションは、oracle.spatial.geometry.ElementExtractor JavaクラスのgetElementByLabelメソッド(Oracle Spatial and GraphのJava APIリファレンスを参照)を使用します。

次の例では、指定した3次元のジオメトリから、入力ジオメトリの複合表面1、ポリゴン4、輪1、エッジ2で構成されたサブセット・ジオメトリを抽出します。

SELECT SDO_UTIL.EXTRACT3D(
  SDO_GEOMETRY (3008,NULL,NULL ,
    SDO_ELEM_INFO_ARRAY(
      1,1007,1,
      1,1006,6,
      1,1003,1,
      16,1003,1,
      31,1003,1,
      46,1003,1,
      61,1003,1,
      76,1003,1),
    SDO_ORDINATE_ARRAY(
      1.0,0.0,-1.0,
      1.0,1.0,-1.0,
      1.0,1.0,1.0,
      1.0,0.0,1.0,
      1.0,0.0,-1.0,
      1.0,0.0,1.0,
      0.0,0.0,1.0,
      0.0,0.0,-1.0,
      1.0,0.0,-1.0,
      1.0,0.0,1.0,
      0.0,1.0,1.0,
      0.0,1.0,-1.0,
      0.0,0.0,-1.0,
      0.0,0.0,1.0,
      0.0,1.0,1.0,
      1.0,1.0,-1.0,
      0.0,1.0,-1.0,
      0.0,1.0,1.0,
      1.0,1.0,1.0,
      1.0,1.0,-1.0,
      1.0,1.0,1.0,
      0.0,1.0,1.0,
      0.0,0.0,1.0,
      1.0,0.0,1.0,
      1.0,1.0,1.0,
      1.0,1.0,-1.0,
      1.0,0.0,-1.0,
      0.0,0.0,-1.0,
      0.0,1.0,-1.0,
      1.0,1.0,-1.0
      )
    ), 
  '0,2,1,4,1') 
FROM DUAL;
 
SDO_UTIL.EXTRACT3D(SDO_GEOMETRY(3008,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1007,1,1,10
--------------------------------------------------------------------------------
SDO_GEOMETRY(3002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
0, 1, -1, 0, 1, 1))

関連トピック

35.16 SDO_UTIL.EXTRUDE

構文

SDO_UTIL.EXTRUDE(
     geometry  IN SDO_GEOMETRY, 
     grdheight IN SDO_NUMBER_ARRAY, 
     height    IN SDO_NUMBER_ARRAY, 
     tol       IN NUMBER, 
     optional3dSrid IN NUMBER DEFAULT NULL 
     ) RETURN SDO_GEOMETRY;

説明

2次元の入力ポリゴン・ジオメトリまたは複数のポリゴンで構成される入力ジオメトリから押し出された3次元のソリッド・ジオメトリを戻します。

パラメータ

geometry

押し出されるジオメトリを戻す場合に元となる2次元のポリゴン・ジオメトリを指定します。このジオメトリは、戻されるジオメトリの底面を形成します。

grdheight

ソリッドの底面でのZ(高さ)値のセットとして地上高を指定します。この配列内の数字には、入力ジオメトリの各頂点の底面におけるZ(高さ)値を指定する必要があります。

height

押し出されるジオメトリの高さの値を指定します。この配列内の数字には、grdheight配列の対応する各点の最上部におけるZ(高さ)値を指定する必要があります。たとえば、最初の頂点の底面における地上高が0で、その頂点の高さが10である場合、底面のその点においてソリッドは10単位分の高さまで拡張されます。

tol

許容差(「許容差」を参照)。

optional3dSrid

戻されるジオメトリに割り当てられる3次元座標系(SRID)を指定します。このパラメータを指定しないときは、入力ジオメトリのSRID値に基づいて、自動的に3次元のSRID値が割り当てられます。

使用上のノート

ノート:

SDO_UTIL.EXTRUDEファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリは、2次元のポリゴン・ジオメトリまたは複数のポリゴンで構成されるジオメトリである必要があります。

入力ジオメトリが複数の内部の輪を含むポリゴンである場合、このファンクションは、これらの内部の輪を1つの内部の輪へと内部的に結合し、元の外観をおおよそ表現する新しいジオメトリを作成してから、この新しいジオメトリに対して押出し処理を実行し、結果を戻します。

次の例では、2次元のポリゴン・ジオメトリから押し出したジオメトリを表現する3次元のソリッド・ジオメトリを戻します。

SELECT SDO_UTIL.EXTRUDE(
  SDO_GEOMETRY(
    2003, 
    null,
    null,
    SDO_ELEM_INFO_ARRAY(1,1003,1),
    SDO_ORDINATE_ARRAY(5, 1,8,1,8,6,5,7,5,1)),
  SDO_NUMBER_ARRAY(0,0,0,0,0),
  SDO_NUMBER_ARRAY(5,10,10,5,5),
  0.005) from dual;

SDO_UTIL.EXTRUDE(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_O
--------------------------------------------------------------------------------
SDO_GEOMETRY(3008, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1007, 1, 1, 1006, 6, 1, 10
03, 1, 16, 1003, 1, 31, 1003, 1, 46, 1003, 1, 61, 1003, 1, 76, 1003, 1), SDO_ORD
INATE_ARRAY(5, 1, 0, 5, 7, 0, 8, 6, 0, 8, 1, 0, 5, 1, 0, 5, 1, 5, 8, 1, 10, 8, 6
, 10, 5, 7, 5, 5, 1, 5, 5, 1, 0, 8, 1, 0, 8, 1, 10, 5, 1, 5, 5, 1, 0, 8, 1, 0, 8
, 6, 0, 8, 6, 10, 8, 1, 10, 8, 1, 0, 8, 6, 0, 5, 7, 0, 5, 7, 5, 8, 6, 10, 8, 6,
0, 5, 7, 0, 5, 1, 0, 5, 1, 5, 5, 7, 5, 5, 7, 0))

次の例では、内部の輪を含む2次元のポリゴン・ジオメトリから押し出したジオメトリを表現する3次元の複合ソリッド・ジオメトリを戻します。

SELECT SDO_UTIL.EXTRUDE(
  SDO_GEOMETRY(
    2003, 
    null, 
    null,
    SDO_ELEM_INFO_ARRAY(1, 1003, 1, 11, 2003, 1, 
      21, 2003,1, 31,2003,1, 41, 2003, 1),
    SDO_ORDINATE_ARRAY(0,0, 8,0, 8,8, 0,8, 0,0,
      1,3, 1,4, 2,4, 2,3, 1,3, 1,1, 1,2, 2,2, 2,1, 1,1,
      1,6, 1,7, 2,7, 2,6, 1,6, 3,2, 3,4, 4,4, 4,2, 3,2)),
  SDO_NUMBER_ARRAY(-1.0), 
  SDO_NUMBER_ARRAY(1.0), 
  0.0001) from dual;
 
SDO_UTIL.EXTRUDE(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1,11,200
--------------------------------------------------------------------------------
SDO_GEOMETRY(3008, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1008, 4, 1, 1007, 1, 1, 10
06, 16, 1, 1003, 1, 46, 1003, 1, 91, 1003, 1, 106, 1003, 1, 121, 1003, 1, 136, 1
003, 1, 151, 1003, 1, 166, 1003, 1, 181, 1003, 1, 196, 1003, 1, 211, 1003, 1, 22
6, 1003, 1, 241, 1003, 1, 256, 1003, 1, 271, 1003, 1, 286, 1003, 1, 301, 1007, 1
, 301, 1006, 10, 301, 1003, 1, 328, 1003, 1, 355, 1003, 1, 370, 1003, 1, 385, 10
03, 1, 400, 1003, 1, 415, 1003, 1, 430, 1003, 1, 445, 1003, 1, 460, 1003, 1, 475
, 1007, 1, 475, 1006, 6, 475, 1003, 1, 490, 1003, 1, 505, 1003, 1, 520, 1003, 1,
 535, 1003, 1, 550, 1003, 1, 565, 1007, 1, 565, 1006, 10, 565, 1003, 1, 592, 100
3, 1, 619, 1003, 1, 634, 1003, 1, 649, 1003, 1, 664, 1003, 1, 679, 1003, 1, 694,
 1003, 1, 709, 1003, 1, 724, 1003, 1), SDO_ORDINATE_ARRAY(4, 0, -1, 4, 2, -1, 4,
 4, -1, 3, 4, -1, 2, 4, -1, 2, 7, -1, 1, 7, -1, 1, 6, -1, 1, 4, -1, 1, 3, -1, 0,
 3, -1, 0, 8, -1, 8, 8, -1, 8, 0, -1, 4, 0, -1, 4, 0, 1, 8, 0, 1, 8, 8, 1, 0, 8,
 1, 0, 3, 1, 1, 3, 1, 1, 4, 1, 1, 6, 1, 1, 7, 1, 2, 7, 1, 2, 4, 1, 3, 4, 1, 4, 4
, 1, 4, 2, 1, 4, 0, 1, 4, 0, -1, 8, 0, -1, 8, 0, 1, 4, 0, 1, 4, 0, -1, 8, 0, -1,
 8, 8, -1, 8, 8, 1, 8, 0, 1, 8, 0, -1, 8, 8, -1, 0, 8, -1, 0, 8, 1, 8, 8, 1, 8,
8, -1, 0, 8, -1, 0, 3, -1, 0, 3, 1, 0, 8, 1, 0, 8, -1, 0, 3, -1, 1, 3, -1, 1, 3,
 1, 0, 3, 1, 0, 3, -1, 1, 3, -1, 1, 4, -1, 1, 4, 1, 1, 3, 1, 1, 3, -1, 1, 4, -1,
 1, 6, -1, 1, 6, 1, 1, 4, 1, 1, 4, -1, 1, 6, -1, 1, 7, -1, 1, 7, 1, 1, 6, 1, 1,
6, -1, 1, 7, -1, 2, 7, -1, 2, 7, 1, 1, 7, 1, 1, 7, -1, 2, 7, -1, 2, 4, -1, 2, 4,
 1, 2, 7, 1, 2, 7, -1, 2, 4, -1, 3, 4, -1, 3, 4, 1, 2, 4, 1, 2, 4, -1, 3, 4, -1,
 4, 4, -1, 4, 4, 1, 3, 4, 1, 3, 4, -1, 4, 4, -1, 4, 2, -1, 4, 2, 1, 4, 4, 1, 4,
4, -1, 4, 2, -1, 4, 0, -1, 4, 0, 1, 4, 2, 1, 4, 2, -1, 0, 3, -1, 1, 3, -1, 1, 1,
 -1, 2, 1, -1, 3, 2, -1, 4, 2, -1, 4, 0, -1, 0, 0, -1, 0, 3, -1, 0, 3, 1, 0, 0,
1, 4, 0, 1, 4, 2, 1, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, 0, 3, 1, 0, 3, -1, 0, 0
, -1, 0, 0, 1, 0, 3, 1, 0, 3, -1, 0, 0, -1, 4, 0, -1, 4, 0, 1, 0, 0, 1, 0, 0, -1
, 4, 0, -1, 4, 2, -1, 4, 2, 1, 4, 0, 1, 4, 0, -1, 4, 2, -1, 3, 2, -1, 3, 2, 1, 4
, 2, 1, 4, 2, -1, 3, 2, -1, 2, 1, -1, 2, 1, 1, 3, 2, 1, 3, 2, -1, 2, 1, -1, 1, 1
, -1, 1, 1, 1, 2, 1, 1, 2, 1, -1, 1, 1, -1, 1, 3, -1, 1, 3, 1, 1, 1, 1, 1, 1, -1
, 1, 3, -1, 0, 3, -1, 0, 3, 1, 1, 3, 1, 1, 3, -1, 1, 6, -1, 2, 6, -1, 2, 4, -1,
1, 4, -1, 1, 6, -1, 1, 6, 1, 1, 4, 1, 2, 4, 1, 2, 6, 1, 1, 6, 1, 1, 6, -1, 1, 4,
 -1, 1, 4, 1, 1, 6, 1, 1, 6, -1, 1, 4, -1, 2, 4, -1, 2, 4, 1, 1, 4, 1, 1, 4, -1,
 2, 4, -1, 2, 6, -1, 2, 6, 1, 2, 4, 1, 2, 4, -1, 2, 6, -1, 1, 6, -1, 1, 6, 1, 2,
 6, 1, 2, 6, -1, 1, 3, -1, 2, 3, -1, 2, 4, -1, 3, 4, -1, 3, 2, -1, 2, 1, -1, 2,
2, -1, 1, 2, -1, 1, 3, -1, 1, 3, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 3, 2, 1, 3, 4, 1,
 2, 4, 1, 2, 3, 1, 1, 3, 1, 1, 3, -1, 1, 2, -1, 1, 2, 1, 1, 3, 1, 1, 3, -1, 1, 2
, -1, 2, 2, -1, 2, 2, 1, 1, 2, 1, 1, 2, -1, 2, 2, -1, 2, 1, -1, 2, 1, 1, 2, 2, 1
, 2, 2, -1, 2, 1, -1, 3, 2, -1, 3, 2, 1, 2, 1, 1, 2, 1, -1, 3, 2, -1, 3, 4, -1,
3, 4, 1, 3, 2, 1, 3, 2, -1, 3, 4, -1, 2, 4, -1, 2, 4, 1, 3, 4, 1, 3, 4, -1, 2, 4
, -1, 2, 3, -1, 2, 3, 1, 2, 4, 1, 2, 4, -1, 2, 3, -1, 1, 3, -1, 1, 3, 1, 2, 3, 1
, 2, 3, -1))

関連トピック

なし。

35.17 SDO_UTIL.FROM_GEOJSON

構文

SDO_UTIL.FROM_GEOJSON(
     geometry  IN VARCHAR2, 
     crs       IN VARCHAR2 DEFAULT NULL, 
     srid      IN VARCHAR2 DEFAULT 4326 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GEOJSON(
     geometry  IN CLOB, 
     crs       IN VARCHAR2 DEFAULT NULL, 
     srid      IN VARCHAR2 DEFAULT 4326 
     ) RETURN SDO_GEOMETRY;

説明

GeoJSONオブジェクト(つまり、GeoJSON形式のジオメトリ・オブジェクト)をSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、GeoJSON形式のジオメトリを指定します。JSONオブジェクトのデータ型は、VARCHAR2またはCLOBです。

crs

(将来使用するために予約されています。デフォルトはnullです。)

srid

戻されるジオメトリで使用されるSDO_SRID値。デフォルトは4326で、WGS 84(経度/緯度)座標系のEPSG SRID値です。

使用上のノート

入力ジオメトリはGeoJSON形式である必要があります。Oracle Databaseに格納されているJSONデータの使用の詳細は、『Oracle Database JSON開発者ガイド』を参照してください。

SDO_GEOMETRYオブジェクトをGeoJSON形式に変換するには、SDO_UTIL.TO_GEOJSONファンクションを使用します。

次の例では、GeoJSON形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)この例では、srid => NULLを指定しているため、戻されるSDO_GEOMETRYオブジェクトのSDO_SRID値はパラメータを指定しない場合のデフォルトの4326ではなく、NULLになります。

DECLARE
  cola_b_geom SDO_GEOMETRY;
  returned_geom SDO_GEOMETRY;
  returned_json CLOB;

BEGIN

-- Populate geometry variable with cola market cols_b shape.
SELECT c.shape into cola_b_geom FROM cola_markets c
  WHERE c.name = 'cola_b';

-- From geometry to JSON
returned_json := SDO_UTIL.TO_GEOJSON(cola_b_geom);

-- From JSON to geometry
returned_geom := SDO_UTIL.FROM_GEOJSON(returned_json, srid => NULL);

END;
/

関連トピック

35.18 SDO_UTIL.FROM_GML311GEOMETRY

構文

SDO_UTIL.FROM_GML311GEOMETRY(
     geometry     IN CLOB,  
     srsNamespace IN VARCHAR2 DEFAULT NULL 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GML311GEOMETRY(
     geometry     IN CLOB, 
     srsNamespace IN VARCHAR2, 
     coordOrder   IN NUMBER 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GML311GEOMETRY(
     geometry  IN VARCHAR2, 
     srsNamespace  IN VARCHAR2 DEFAULT NULL 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GML311GEOMETRY(
     geometry  IN VARCHAR2, 
     coordOrder  IN NUMBER DEFAULT NULL 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GML311GEOMETRY(
     geometry  IN VARCHAR2, 
     srsNamespace  IN VARCHAR2, 
     coordOrder  IN NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

Geography Markup Language (GML 3.1.1)フラグメントをSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、GMLバージョン3.1.1形式のジオメトリを指定します。

srsNamespace

(Oracleで使用するために予約されています。)

coordOrder

GML形式のデータが、Oracle Spatialで使用される経度/緯度形式ではなく緯度/経度形式の場合、このパラメータには1を指定します。そうでない場合は、このパラメータを指定しないでください。(詳細は、「使用上のノート」を参照してください。)

使用上のノート

ノート:

SDO_UTIL.FROM_GML311GEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリは、Open GIS実装仕様に定義されたGMLバージョン3.1.1のジオメトリ・タイプを示す有効なGMLフラグメントである必要があります。

一部のEPSG測地座標系の定義では、軸順序が逆です。このようなSRIDでは、GML形式のデータは経度/緯度ではなく緯度/経度になる場合があります。このようなGMLをSDO_GEOMETRYタイプに変換する場合、SDO_GEOMETRYタイプで使用される順序は経度/緯度であるため、coordOrderパラメータに1を指定して、緯度/経度値が経度/緯度に変換されるようにする必要があります。

次の例では、GMLバージョン3.1.1形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  gmlgeom CLOB;
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;  
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';
 
-- To GML 3.1.1 geometry
gmlgeom := SDO_UTIL.TO_GML311GEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To GML 3.1.1 geometry result = ' || TO_CHAR(gmlgeom));
 
-- From GML 3.1.3 geometry
geom_result := SDO_UTIL.FROM_GML311GEOMETRY(gmlgeom);
 
END;
/
To GML 3.1.1 geometry result = <gml:Polygon srsName="SDO:"
xmlns:gml="http://www.opengis.net/gml"><gml:exterior><gml:LinearRing><gml:posLis
t srsDimension="2">5.0 1.0 8.0 1.0 8.0 6.0 5.0 7.0 5.0 1.0
</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>
 
PL/SQL procedure successfully completed.

35.19 SDO_UTIL.FROM_GMLGEOMETRY

構文

SDO_UTIL.FROM_GMLGEOMETRY(
     geometry     IN CLOB,  
     srsNamespace IN VARCHAR2 DEFAULT NULL 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_GMLGEOMETRY(
     geometry     IN VARCHAR2, 
     srsNamespace IN VARCHAR2 DEFAULT NULL 
     ) RETURN SDO_GEOMETRY;

説明

Geography Markup Language (GML 2.0)フラグメントをSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、GMLバージョン2.0形式のジオメトリを指定します。

srsNamespace

(Oracleで使用するために予約されています。)

使用上のノート

ノート:

SDO_UTIL.FROM_GMLGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリは、Open GIS実装仕様に定義されたGMLバージョン2.0のジオメトリ・タイプを示す有効なGMLフラグメントである必要があります。

次の例では、GMLバージョン2.0形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  gmlgeom CLOB;
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;  
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';
 
-- To GML geometry
gmlgeom := SDO_UTIL.TO_GMLGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To GML geometry result = ' || TO_CHAR(gmlgeom));
 
-- From GML geometry
geom_result := SDO_UTIL.FROM_GMLGEOMETRY(gmlgeom);
 
END;
/
To GML geometry result = <gml:Polygon srsName="SDO:"
xmlns:gml="http://www.opengis.net/gml"><gml:outerBoundaryIs><gml:LinearRing><gml
:coordinates decimal="." cs="," ts=" ">5.0,1.0 8.0,1.0 8.0,6.0 5.0,7.0 5.0,1.0
</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>
 
PL/SQL procedure successfully completed.

35.20 SDO_UTIL.FROM_JSON

構文

SDO_UTIL.FROM_JSON(
     geometry  IN VARCHAR2, 
     crs       IN VARCHAR2 DEFAULT NULL, 
     srid      IN VARCHAR2 DEFAULT -1 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_JSON(
     geometry  IN CLOB, 
     crs       IN VARCHAR2 DEFAULT NULL, 
     srid      IN VARCHAR2 DEFAULT -16 
     ) RETURN SDO_GEOMETRY;

説明

JSONオブジェクト(つまり、JSON形式のジオメトリ・オブジェクト)をSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、JSON形式のジオメトリを指定します。JSONオブジェクトのデータ型は、VARCHAR2またはCLOBです。JSON形式のジオメトリを変換することもできます。

crs

(将来使用するために予約されています。デフォルトはnullです。)

srid

(将来使用するために予約されています。デフォルトは-1です。)

使用上のノート

ノート:

SDO_UTIL.FROM_JSONファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリはJSON形式である必要があります。Oracle Databaseに格納されているJSONデータの使用の詳細は、『Oracle Database JSON開発者ガイド』を参照してください。

Spatial and GraphでのJSONのサポートの詳細は、「Oracle Spatial and GraphでのJSONおよびGeoJSONのサポート」を参照してください。

SDO_GEOMETRYオブジェクトをJSON形式に変換するには、SDO_UTIL.TO_JSONファンクションまたはSDO_UTIL.TO_JSON_VARCHARファンクションを使用します。

次の例では、JSON形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  cola_b_geom   SDO_GEOMETRY;
  returned_geom SDO_GEOMETRY;
  returned_json CLOB;
BEGIN
  -- Populate geometry variable with cola market cols_b shape.
  SELECT c.shape into cola_b_geom 
  FROM cola_markets c   
  WHERE c.name = 'cola_b';  

  -- From geometry to JSON 
  returned_json := SDO_UTIL.TO_JSON(cola_b_geom);

  -- From JSON to geometry 
  returned_geom := SDO_UTIL.FROM_JSON(returned_json);
  
END; 
/

次の例では、SDO_GEOMETRYへの変換対象となる指定のジオメトリを表すJSONオブジェクトを示します。(この場合、JSONは、「空間データの挿入、索引付けおよび問合せの例」で定義した、COLA_MARKETS表のcola_bジオメトリを反映します。)

SELECT SDO_UTIL.FROM_JSON(
  '{"polygon": {"boundary": [{"line": {"datapoints": [[5.0, 1.0], 
       [8.0, 1.0], [8.0, 6.0], [5.0, 7.0], [5.0, 1.0]]}}]}}') GEOM
FROM DUAL;

GEOM
------
SDO_GEOMETRY(2003, NULL, NULL, 
  SDO_ELEM_INFO_ARRAY(1, 1003, 1), 
  SDO_ORDINATE_ARRAY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))

35.21 SDO_UTIL.FROM_KMLGEOMETRY

構文

SDO_UTIL.FROM_KMLGEOMETRY(
     geometry  IN CLOB  
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_KMLGEOMETRY(
     geometry  IN VARCHAR2 
     ) RETURN SDO_GEOMETRY;

説明

KML (Keyhole Markup Language)ドキュメントをSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、KML形式のCLOB型またはVARCHAR2型のジオメトリを指定します。

使用上のノート

ノート:

SDO_UTIL.FROM_KMLGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリは、KML 2.1仕様に準拠した有効なドキュメントである必要があります。

このファンクションは、KMLドキュメント全体ではなく、KMLジオメトリ・タグのみを処理します。

次の例では、KML形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_cジオメトリについて、その定義およびデータを使用しています。)

-- Convert cola_c geometry to a KML document; convert that result to
-- a spatial geometry.
DECLARE
  kmlgeom CLOB;
  val_result VARCHAR2(5);
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_c';
 
-- To KML geometry
kmlgeom := SDO_UTIL.TO_KMLGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To KML geometry result = ' || TO_CHAR(kmlgeom));
 
-- From KML geometry
geom_result := SDO_UTIL.FROM_KMLGEOMETRY(kmlgeom);
-- Validate the returned geometry
val_result := SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(geom_result, 0.005);
DBMS_OUTPUT.PUT_LINE('Validation result = ' || val_result);
 
END;
/
To KML geometry result =
<Polygon><extrude>0</extrude><tessellate>0</tessellate><altitudeMode>relativeToG
round</altitudeMode><outerBoundaryIs><LinearRing><coordinates>3.0,3.0 6.0,3.0
6.0,5.0 4.0,5.0 3.0,3.0 </coordinates></LinearRing></outerBoundaryIs></Polygon>
Validation result = TRUE

関連トピック

35.22 SDO_UTIL.FROM_WKBGEOMETRY

構文

SDO_UTIL.FROM_WKBGEOMETRY(
     geometry  IN BLOB 
     ) RETURN SDO_GEOMETRY;

説明

well-knownバイナリ(WKB)形式のジオメトリをSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、WKB形式のジオメトリを指定します。

使用上のノート

ノート:

SDO_UTIL.FROM_WKBGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリの形式は、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownバイナリ(WKB)形式であることが必要です。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

SDO_GEOMETRYオブジェクトをWKB形式に変換するには、SDO_UTIL.TO_WKBGEOMETRYファンクションを使用します。

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  wkbgeom BLOB;
  wktgeom CLOB;
  val_result VARCHAR2(5);
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';
 
-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));
 
-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);
 
-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);
 
END;/
 
To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE                                                    
WKT validation result = TRUE

35.23 SDO_UTIL.FROM_WKTGEOMETRY

構文

SDO_UTIL.FROM_WKTGEOMETRY(
     geometry  IN CLOB 
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_WKTGEOMETRY(
     geometry  IN VARCHAR2 
     ) RETURN SDO_GEOMETRY;

説明

well-knownテキスト(WKT)形式のジオメトリをSpatial and Graphジオメトリ・オブジェクトに変換します。

パラメータ

geometry

SDO_GEOMETRY形式に変換する、WKT形式のジオメトリを指定します。

使用上のノート

ノート:

SDO_UTIL.FROM_WKTGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリの形式は、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownテキスト(WKT)形式であることが必要です。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

SDO_GEOMETRYオブジェクトをWKT形式のCLOBに変換するには、SDO_UTIL.TO_WKTGEOMETRYファンクションを使用します。(得られたCLOBは、SQLファンクションTO_CHARを使用して、VARCHAR2型に変換できます。)

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  wkbgeom BLOB;
  wktgeom CLOB;
  val_result VARCHAR2(5);
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';
 
-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));
 
-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);
 
-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);
 
END;/
 
To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE                                                    
WKT validation result = TRUE

35.24 SDO_UTIL.GEO_SEARCH

構文

SDO_UTIL.GEO_SEARCH(
     name  IN SDO_VARCHAR2, 
     fuzzy IN NUMBER DEFAULT NULL  
    ) RETURN SDO_GEO_SEARCH_TABLE;

説明

地名階層を含む表(ELOC_ADMIN_AREA_SEARCH)に対する問合せを行います。

パラメータ

name

地名階層を含む表にある1つ以上の名前。複数の名前の値はカンマを使用して区切ります。

この表については、「ELOC_ADMIN_AREA_SEARCH表」を参照してください。

fuzzy

name値との一致の検出にOracle Textファジー・マッチを使用するかどうかを決定します。0(ゼロ、デフォルト)はファジー・マッチを使用せず、1はファジー・マッチを使用します。ただし、詳細および例については「使用上のノート」を参照してください。

使用上のノート

このファンクションを使用するには、「位置データ・エンリッチメント」に記載の概念を理解する必要があります。ここには、必要な設定処理についての説明もあります。

場所のデータ・セットには、スペルと大/小文字に様々なバリエーションがある場合がありますが、fuzzyパラメータの値が0(デフォルト)の場合、名前の値は、場所のデータ・セットの値とスペルが一致する必要があります。値が1の場合、名前の値の些細な間違い(スペル・ミスなど)も一致と見なされます。たとえば:

  • fuzzy=>0の場合、‘nashua, nh, usa’および‘nashua, new hampshire, usa’が同じ標準名に一致します。

  • fuzzy=>1の場合、0の場合に一致する値に加え、‘nashuaa,NH,usa’(都市名がスペル・ミス)が同じ標準名に一致します。

次の例では、サンフランシスコに関する情報を検索します。ファジー・マッチは使用しません。

SELECT * from TABLE(sdo_util.geo_search('San Francisco,Ca,UNITED STATES'));

次の例では、ファジー・マッチを使用する(fuzzy値が1)ため、nameパラメータの都市名にスペル・ミスがありますが(Sanf Fracisco)、San Francisco, Californiaに一致するものが検出されます。

SELECT * from TABLE(sdo_util.geo_search('Sanf Fracisco,Ca,UNITED STATES', 1));

35.25 SDO_UTIL.GET_2D_FOOTPRINT

構文

SDO_UTIL.GET_2D_FOOTPRINT(
     geometry  IN SDO_GEOMETRY, 
     tolerance IN NUMBER  DEFAULT 0.0000005  
    ) RETURN SDO_GEOMETRY;

説明

3次元の入力ジオメトリのフットプリントを反映した2次元のジオメトリを戻します。

パラメータ

geometry

3次元のジオメトリ・オブジェクトを指定します。

tolerance

許容差(「許容差」を参照)。

使用上のノート

ノート:

SDO_UTIL.GET_2D_FOOTPRINTファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションを使用して、ビルなどの3Dジオメトリの(z=0のx-y面上の)2Dフットプリントを戻すことができます。

次の例では、3Dジオメトリの2Dフットプリントを戻します。FTPTSという表が存在し、少なくとも数値ID列と、複数面を持つ3次元のジオメトリを格納するSDO_GEOMETRY型のGEOMETRYという列が含まれていると想定します。

SELECT sdo_util.get_2d_footprint(geometry, 0.05) FROM ftpts WHERE id =1;

35.26 SDO_UTIL.GET_COORDINATE

構文

SDO_UTIL.GET_COORDINATE(
     geometry    IN SDO_GEOMETRY,
     coord_index IN NUMBER
     ) RETURN MDSYS.SDO_GEOMETRY DETERMINISTIC PARALLEL_ENABLE;

説明

ジオメトリの座標を返します。

パラメータ

geometry
入力ジオメトリを指定します。
coord_index
返されるジオメトリ座標の索引番号。

使用上のノート

指定されたcoord_index値に対応する座標(0-1、任意の大きな値など)がない場合、SDO_UTIL.GET_COORDINATEファンクションはジオメトリの最後の座標を返します。

次の例では、ジオメトリ・オブジェクトの2番目の座標cola_bを返します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SQL> SELECT SDO_UTIL.get_coordinate(c.shape,2) FROM cola_markets c WHERE c.name='cola_b';

SDO_UTIL.GET_COORDINATE(C.SHAPE,2)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(8, 1, NULL), NULL, NULL)

次の例では、指定された索引番号が0であるため、ジオメトリ・オブジェクトの最後の座標cola_bを返します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SQL> SELECT SDO_UTIL.get_coordinate(c.shape,0) FROM cola_markets c WHERE c.name='cola_b';

SDO_UTIL.GET_COORDINATE(C.SHAPE,0)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(5, 1, NULL), NULL, NULL)

35.27 SDO_UTIL.GETFIRSTVERTEX

構文

SDO_UTIL.GETFIRSTVERTEX(
     geometry  IN SDO_GEOMETRY 
     ) RETURN MDSYS.VERTEX_TYPE;

説明

入力ジオメトリの頂点の最初の座標を戻します。

パラメータ

geometry

入力ジオメトリを指定します。

使用上のノート

このファンクションは、次のように定義されるMDSYS.VERTEX_TYPE型のオブジェクトを戻します。

CREATE TYPE vertex_type AS OBJECT
 (x   NUMBER,
  y   NUMBER,
  z   NUMBER,
  w   NUMBER,
  v5  NUMBER,
  v6  NUMBER,
  v7  NUMBER,
  v8  NUMBER,
  v9  NUMBER,
  v10 NUMBER,
  v11 NUMBER,
  id  NUMBER);

MYSYS.VERTEX_TYPE型は、Oracleでのみ使用されます。この型を、ユーザーが作成する列の定義やファンクションで使用しないでください

この例では、DATA_2Dという表が次のとおり作成および移入されていると想定しています。

CREATE TABLE data_2d (geom_name varchar2(12), shape sdo_geometry);

INSERT INTO data_2d VALUES ( 'LINE1',
   sdo_geometry(2002, NULL, NULL,
   sdo_elem_info_array(1,2,1),
   sdo_ordinate_array(12,13, 14,15, 16,17, 18,19, 20,21)));

次のSELECT文は、SDO_UTIL.GetFirstVertexファンクションとSDO_UTIL.GetLastVertexファンクションの両方をコールします。結果は、最初の頂点は(12,13)であり、最後の頂点は(20,21)であることを示しています。(出力は、読みやすくするために変更が加えられています。)

SELECT geom_name,
       sdo_util.GetFirstVertex(a.shape).X,
       sdo_util.GetFirstVertex(a.shape).Y
FROM data_2d a;

GEOM_NAME    SDO_UTIL.GETFIRSTVERTEX(A.SHAPE).X SDO_UTIL.GETFIRSTVERTEX(A.SHAPE).Y
------------ ---------------------------------- ----------------------------------
LINE1                                        12                                 13


SELECT geom_name,
       sdo_util.GetLastVertex(a.shape).X,
       sdo_util.GetLastVertex(a.shape).Y
FROM data_2d a;

GEOM_NAME    SDO_UTIL.GETLASTVERTEX(A.SHAPE).X SDO_UTIL.GETLASTVERTEX(A.SHAPE).Y
------------ ---------------------------------- ----------------------------------
LINE1                                       20                                21

関連トピック

35.28 SDO_UTIL.GETLASTVERTEX

構文

SDO_UTIL.GETLASTVERTEX(
     geometry  IN SDO_GEOMETRY 
     ) RETURN MDSYS.VERTEX_TYPE;

説明

入力ジオメトリの頂点の最後の座標を戻します。

パラメータ

geometry

入力ジオメトリを指定します。

使用上のノート

このファンクションは、次のように定義されるMDSYS.VERTEX_TYPE型のオブジェクトを戻します。

CREATE TYPE vertex_type AS OBJECT
 (x   NUMBER,
  y   NUMBER,
  z   NUMBER,
  w   NUMBER,
  v5  NUMBER,
  v6  NUMBER,
  v7  NUMBER,
  v8  NUMBER,
  v9  NUMBER,
  v10 NUMBER,
  v11 NUMBER,
  id  NUMBER);

MYSYS.VERTEX_TYPE型は、Oracleでのみ使用されます。この型を、ユーザーが作成する列の定義やファンクションで使用しないでください

この例では、DATA_2Dという表が次のとおり作成および移入されていると想定しています。

CREATE TABLE data_2d (geom_name varchar2(12), shape sdo_geometry);

INSERT INTO data_2d VALUES ( 'LINE1',
   sdo_geometry(2002, NULL, NULL,
   sdo_elem_info_array(1,2,1),
   sdo_ordinate_array(12,13, 14,15, 16,17, 18,19, 20,21)));

次のSELECT文は、SDO_UTIL.GetFirstVertexファンクションとSDO_UTIL.GetLastVertexファンクションの両方をコールします。結果は、最初の頂点は(12,13)であり、最後の頂点は(20,21)であることを示しています。(出力は、読みやすくするために変更が加えられています。)

SELECT geom_name,
       sdo_util.GetFirstVertex(a.shape).X,
       sdo_util.GetFirstVertex(a.shape).Y
FROM data_2d a;

GEOM_NAME    SDO_UTIL.GETFIRSTVERTEX(A.SHAPE).X SDO_UTIL.GETFIRSTVERTEX(A.SHAPE).Y
------------ ---------------------------------- ----------------------------------
LINE1                                        12                                 13


SELECT geom_name,
       sdo_util.GetLastVertex(a.shape).X,
       sdo_util.GetLastVertex(a.shape).Y
FROM data_2d a;

GEOM_NAME    SDO_UTIL.GETLASTVERTEX(A.SHAPE).X SDO_UTIL.GETLASTVERTEX(A.SHAPE).Y
------------ ---------------------------------- ----------------------------------
LINE1                                       20                                21

関連トピック

35.29 SDO_UTIL.GETNUMELEM

構文

SDO_UTIL.GETNUMELEM(
     geometry  IN SDO_GEOMETRY 
     ) RETURN NUMBER;

説明

入力ジオメトリの要素の数を戻します。

パラメータ

geometry

要素の数を戻すジオメトリを指定します。

使用上のノート

なし。

次の例では、COLA_MARKETS表のSHAPE列にある各ジオメトリの要素の数を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT c.name, SDO_UTIL.GETNUMELEM(c.shape)
  FROM cola_markets c;
 
NAME                             SDO_UTIL.GETNUMELEM(C.SHAPE)                   
-------------------------------- ----------------------------                   
cola_a                                                      1                   
cola_b                                                      1                   
cola_c                                                      1                   
cola_d                                                      1 

関連トピック

35.30 SDO_UTIL.GETNUMVERTICES

構文

SDO_UTIL.GETNUMVERTICES(
     geometry  IN SDO_GEOMETRY 
     ) RETURN NUMBER;

説明

入力ジオメトリの頂点の数を戻します。

パラメータ

geometry

頂点の数を戻すジオメトリを指定します。

使用上のノート

なし。

次の例では、COLA_MARKETS表のSHAPE列にある各ジオメトリの頂点の数を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT c.name, SDO_UTIL.GETNUMVERTICES(c.shape)
  FROM cola_markets c;
 
NAME                             SDO_UTIL.GETNUMVERTICES(C.SHAPE)               
-------------------------------- --------------------------------               
cola_a                                                          2               
cola_b                                                          5               
cola_c                                                          5               
cola_d                                                          3 

35.31 SDO_UTIL.GETNURBSAPPROX

構文

SDO_UTIL.GETNURBSAPPROX(
     geometry  IN SDO_GEOMETRY, 
     tolerance IN NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

入力NURBS曲線ジオメトリの近似処理である線ストリング・ジオメトリを戻します。

パラメータ

geometry

NURBS曲線ジオメトリ・オブジェクト

tolerance

許容差(「許容差」を参照)。許容範囲値が妥当であるかぎり、このファンクションの操作および出力には影響しません(「使用上のノート」を参照)。

使用上のノート

ノート:

SDO_UTIL.GETNURBSAPPROXファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、NURBS曲線ジオメトリを直接処理できないサブプログラムで詳細な処理を行う目的で、入力ジオメトリの折れ線近似処理を戻すのに有用です。このファンクションは、いくつかのOracle Spatial and Graphファンクションの内部で呼び出されますが、ユーザーが直接呼び出すことも可能です。

入力ジオメトリは、(測地座標系でなく)投影座標系のNURBS曲線である必要があります。

入力ジオメトリが、1つ以上のNURBS曲線要素を含んでない場合は、入力ジオメトリを戻します。

Oracle Spatial and Graphによって内部使用されるため、入力には許容範囲値が必要です。ただし、ユーザーが直接呼び出す場合は、戻される折れ線は最大約200点まで含むことができるため、許容範囲値の影響を受けません。

NURBS曲線は終点で固定されるため、戻される線ストリング・ジオメトリの終点は、最初および最終の制御点になります。

NURBS (non-uniform rational B-spline)ジオメトリのサポートの詳細は、「Oracle Spatial and GraphにおけるNURBS曲線のサポート」を参照してください。

次の例では、空間表を作成してNURBS曲線を挿入した後、SDO_UTIL.GETNURBSAPPROXファンクションを(許容範囲値0.05で)使用して、NURBS曲線ジオメトリの近似処理である線ストリング・ジオメトリを戻します。

-- Create Table
create table test (gid  INTEGER,
                   geom mdsys.sdo_geometry);
 
-- Insert metadata
Insert into user_sdo_geom_metadata VALUES('TEST', 'GEOM',
  sdo_dim_array( sdo_dim_element('X', -10, 10, 0.05),
                 sdo_dim_element('Y', -10, 10, 0.05)),
                 NULL);
 
-- Two-dimensional NURBS curve with degree 3, 7 control points, and 11 knots
insert into test values(1, SDO_GEOMETRY(2002, NULL, NULL,
                                        SDO_ELEM_INFO_ARRAY(1, 2, 3),
                           SDO_ORDINATE_ARRAY(3, 7, 0, 0, 1, -0.5, 1, 1, 0.2, 2,
                                              1, 0.5, 3.5, 1, 0.8, 2, 1, 0.9, 1,
                                              1, 0.3, 0, 1, 11, 0, 0, 0, 0, 0.25,
                                              0.5, 0.75, 1.0, 1.0, 1.0, 1.0)));
 
-- sdo_util.getNurbsApprox gives an approximate polyline for the NURBS curve.
Select gid, sdo_util.getNurbsApprox(a.geom, 0.05) from test a where gid = 1;
 
       GID
----------
SDO_UTIL.GETNURBSAPPROX(A.GEOM,0.05)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SD
--------------------------------------------------------------------------------
         1
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
0, 0, -.02912839, .059699523, -.05624374, .118211319, -.08139356, .175559751, -.
10462535, .231769184, -.12598662, .286863981, -.14552488, .340868505, -.16328764
, .39380712, -.17932241, .445704191, -.1936767, .496584079, -.20639802, .5464711
5, -.21753387, .595389767, -.22713177, .643364292, -.23523922, .690419091, -.241
90374, .736578527, -.24717284, .781866962, -.25109401, .826308762, -.25371477, .
869928288, -.25508264, .912749906, -.25524512, .954797979, -.25424971, .99609687
, -.25214393, 1.03667094, -.24897529, 1.07654456, -.24479129, 1.11574209, -.2396
3945, 1.15428789, -.23356727, 1.19220633, -.22662227, 1.22952177, -.21885194, 1.
26625857, -.21030381, 1.3024411, -.20102538, 1.33809372, -.19106416, 1.37324079,
 -.18046765, 1.40790668, -.16928338, 1.44211576, -.15755884, 1.47589238, -.14534
154, 1.50926091, -.132679, 1.54224571, -.11961872, 1.57487115, -.10620822, 1.607
16159, -.092495, 1.63914139, -.07852657, 1.67083492, -.06435044, 1.70226654, -.0
5001412, 1.73346062, -.03556511, 1.76444151, -.02105094, 1.79523359, -.0065191,
1.82586121, .007982896, 1.85634874, .022407535, 1.88672054, .036707311, 1.917000
98, .050834714, 1.94721442, .064742236, 1.97738522, .078382506, 2.00753762, .091
725045, 2.03768051, .104772175, 2.06779294, .117529987, 2.09785056, .130004572,
2.12782899, .14220202, 2.15770388, .154128423, 2.18745085, .165789872, 2.2170455
6, .177192457, 2.24646363, .188342269, 2.27568069, .1992454, 2.3046724, .2099079
4, 2.33341438, .22033598, 2.36188226, .23053561, 2.3900517, .240512923, 2.417898
31, .250274008, 2.44539774, .259824957, 2.47252563, .269171861, 2.49925761, .278
32081, 2.52556931, .287277896, 2.55143638, .296049209, 2.57683445, .30464084, 2.
60173916, .31305888, 2.62612614, .321309421, 2.64997102, .329398552, 2.67324946,
 .337332365, 2.69593707, .345116951, 2.71800951, .352758401, 2.7394424, .3602628
05, 2.76021137, .367636255, 2.78029208, .374884841, 2.79966015, .382014654, 2.81
829122, .389031786, 2.83616093, .395942326, 2.85324491, .402752367, 2.8695188, .
409467999, 2.88495824, .416095312, 2.89953885, .422640398, 2.91323629, .42910934
8, 2.92602618, .435508253, 2.93788416, .441843203, 2.94878587, .448120289, 2.958
70695, .454345602, 2.96762302, .460525234, 2.97550973, .466665275, 2.98234271, .
472771816, 2.98809761, .478850948, 2.99275004, .484908761, 2.99627566, .49095134
8, 2.9986501, .496984798, 2.999849, .50301505, 2.999849, .509044541, 2.9986501,
.515072205, 2.99627566, .521096823, 2.99275004, .527117177, 2.98809761, .5331320
5, 2.98234271, .539140223, 2.97550973, .545140477, 2.96762302, .551131595, 2.958
70695, .557112359, 2.94878587, .56308155, 2.93788416, .56903795, 2.92602618, .57
4980341, 2.91323629, .580907505, 2.89953885, .586818223, 2.88495824, .592711277,
 2.8695188, .59858545, 2.85324491, .604439523, 2.83616093, .610272278, 2.8182912
2, .616082496, 2.79966015, .621868959, 2.78029208, .62763045, 2.76021137, .63336
575, 2.7394424, .639073641, 2.71800951, .644752905, 2.69593707, .650402323, 2.67
324946, .656020678, 2.64997102, .661606751, 2.62612614, .667159324, 2.60173916,
.672677178, 2.57683445, .678159097, 2.55143638, .683603861, 2.52556931, .6890102
52, 2.49925761, .694377052, 2.47252563, .699703043, 2.44539774, .704987007, 2.41
789831, .710227725, 2.3900517, .71542398, 2.36188226, .720574553, 2.33341438, .7
25678226, 2.3046724, .730733781, 2.27568069, .735739999, 2.24646363, .740695663,
 2.21704556, .745599554, 2.18745085, .750450454, 2.15770388, .755247146, 2.12782
899, .75998841, 2.09785056, .764673028, 2.06779294, .769299783, 2.03768051, .773
867456, 2.00753762, .778372773, 1.97738522, .782794569, 1.94721442, .787102465,
1.91700098, .791266007, 1.88672054, .795254739, 1.85634874, .799038208, 1.825861
21, .802585958, 1.79523359, .805867536, 1.76444151, .808852487, 1.73346062, .811
510356, 1.70226654, .813810689, 1.67083492, .815723031, 1.63914139, .817216927,
1.60716159, .818261924, 1.57487115, .818827566, 1.54224571, .8188834, 1.50926091
, .818398969, 1.47589238, .817343821, 1.44211576, .8156875, 1.40790668, .8133995
52, 1.37324079, .810449523, 1.33809372, .806806957, 1.3024411, .802441401, 1.266
25857, .797322399, 1.22952177, .791419497, 1.19220633, .784702242, 1.15428789, .
777140177, 1.11574209, .768702849, 1.07654456, .759359802, 1.03667094, .74908058
4, .99609687, .737834738, .954797979, .725591811, .912749906, .712321348, .86992
8288, .697992894, .826308762, .682575995, .781866962, .666040196, .736578527, .6
48355043, .690419091, .629490081, .643364292, .609414855, .595389767, .588098912
, .54647115, .565511797, .496584079, .541623054, .445704191, .51640223, .3938071
2, .48981887, .340868505, .46184252, .286863981, .432442724, .231769184, .401589
029, .175559751, .36925098, .118211319, .335398121, .059699523, .3, 0))
 
1 row selected.

35.32 SDO_UTIL.GETVERTICES

構文

SDO_UTIL.GETVERTICES(
     geometry             IN SDO_GEOMETRY,
     include_oriented_pt  IN NUMBER DEFAULT NULL
     ) RETURN VERTEX_SET_TYPE;

説明

入力ジオメトリの頂点の座標を戻します。

パラメータ

geometry

頂点の座標を戻すジオメトリを指定します。

include_oriented_pt
点座標と方向ベクトルの両方の戻り値を、方向付きの点の2つの頂点として制御します。

ノート:

これは、入力が方向付きの点ジオメトリである場合にのみ有効です。方向付きの点の詳細については、方向付きの点を参照してください。

有効な値は次のいずれかです。

  • 0: 頂点の座標のみを戻します
  • 1: 座標と方向ベクトルの両方を戻します

使用上のノート

このファンクションは、MDSYS.VERTEX_SET_TYPEのオブジェクトを戻します(このオブジェクトは、MDSYS.VERTEX_TYPEのオブジェクトの表で構成されます)。Oracle Spatial and Graphでは、VERTEX_SET_TYPE型を次のように定義します。

CREATE TYPE vertex_set_type as TABLE OF vertex_type;

Oracle Spatial and Graphは、VERTEX_TYPEオブジェクト型を次のとおり定義します。

CREATE TYPE vertex_type AS OBJECT
   (x   NUMBER,
    y   NUMBER,
    z   NUMBER,
    w   NUMBER,
    v5  NUMBER,
    v6  NUMBER,
    v7  NUMBER,
    v8  NUMBER,
    v9  NUMBER,
    v10 NUMBER,
    v11 NUMBER,
    id  NUMBER);

ノート:

VERTEX_SET_TYPE型およびVERTEX_TYPE型は、Oracleでのみ使用されます。これらの型を、ユーザーが作成する列の定義やファンクションで使用しないでください。

このファンクションは、ジオメトリを無効にしている頂点を検出する場合に有効です。たとえば、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションまたはSDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTプロシージャ(いずれについても「SDO_GEOMパッケージ(ジオメトリ)を参照)を使用してジオメトリが無効であると特定した場合は、GETVERTICESファンクションを使用して頂点を表形式で表示できます。

このファンクションは、点座標のみを戻し、入力が方向付きの点ジオメトリの場合は方向ベクトルを戻しません。方向ベクトルも戻すには、1に設定されたパラメータINCLUDE_ORIENTED_PTを渡す必要があります。の項の最後の例を参照してください。

次の例では、COLA_MARKETS表のSHAPE列にあるジオメトリの頂点のX座標、Y座標およびID値を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT c.mkt_id, c.name, t.X, t.Y, t.id
   FROM cola_markets c,
   TABLE(SDO_UTIL.GETVERTICES(c.shape)) t
   ORDER BY c.mkt_id, t.id;

    MKT_ID NAME                                      X          Y         ID    
---------- -------------------------------- ---------- ---------- ----------    
         1 cola_a                                    1          1          1    
         1 cola_a                                    5          7          2    
         2 cola_b                                    5          1          1    
         2 cola_b                                    8          1          2    
         2 cola_b                                    8          6          3    
         2 cola_b                                    5          7          4    
         2 cola_b                                    5          1          5    
         3 cola_c                                    3          3          1    
         3 cola_c                                    6          3          2    
         3 cola_c                                    6          5          3    
         3 cola_c                                    4          5          4    
         3 cola_c                                    3          3          5    
         4 cola_d                                    8          7          1    
         4 cola_d                                   10          9          2    
         4 cola_d                                    8         11          3    

15 rows selected.

次の例では、座標と方向ベクトルの両方を、方向付きの点ジオメトリの2つの頂点として、戻します。(この例では、例2-12で作成した点ジオメトリを使用します)。

select sdo_util.getvertices(c.shape, 1) from cola_markets c;

SDO_UTIL.GETVERTICES(C.SHAPE,1)(X, Y, Z, W, V5, V6, V7, V8, V9, V10, V11, ID)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
VERTEX_SET_TYPE(VERTEX_TYPE(12, 14, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1), VERTEX_TYPE(.3, .2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2))

35.33 SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS

構文

SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS;

説明

別のデータベースに転送された表領域内のすべての空間索引を初期化します。

パラメータ

なし。

使用上のノート

このプロシージャは、なんらかの空間索引を含む表領域にOracleトランスポータブル表領域機能を使用するためのサポートの一部です。このプロシージャを使用するのは、(A)リリース11.2より前のダンプ・ファイルのインポート操作が完了したとき、または(B)リリース11.2以上の異なるエンディアン・プラットフォームからのインポート操作が完了した後、のいずれかのみです。表領域に空間索引を持つ各ユーザーは、このプロシージャをコールする必要があります。

リリース11.2より前のダンプ・ファイルについては、SDO_UTIL.INITIALIZE_INDEXES_FOR_TTSプロシージャをコールした後、インポートされたトランスポータブル表領域にある各索引に対して次の書式の文を実行する必要があります。

ALTER INDEX spatial-index-from-imported-tts PARAMETERS ('CLEAR_TTS=TRUE');

トランスポータブル表領域および表領域を別のデータベースに転送する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

リリース11.2より前のダンプ・ファイルをインポートした後に使用する次の例では、別のデータベースに転送された表領域内のすべての空間索引を初期化します。また、その2つの空間索引に必要なALTER INDEX文も示します。

CALL SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS;
ALTER INDEX xyz1_spatial_idx PARAMETERS ('CLEAR_TTS=TRUE');
ALTER INDEX xyz2_spatial_idx PARAMETERS ('CLEAR_TTS=TRUE');

次の例では、空間索引の所有者は、SELECT文が文字列Yを戻した場合のみ、SDO_UTIL.INITIALIZE_INDEXES_FOR_TTSプロシージャをコールして、リリース11.2の異なるエンディアン・プラットフォームから空間索引がインポートされたことを反映する必要があります。

SELECT DECODE(BITAND(sdo_index_version, 1024), 1024, 'Y', 'N') ENDIAN_FLAG
  FROM user_sdo_index_metadata
  WHERE sdo_index_name = :index_name;
-- If the result is 'Y', perform the next statement.
CALL SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS;
-- No ALTER INDEX statements are needed.

この例では、SELECT文が文字列Nを戻したときにSDO_UTIL.INITIALIZE_INDEXES_FOR_TTSプロシージャをコールした場合、エンディアンの変換を実行する必要がないため、このプロシージャは何も実行しません。

関連トピック

なし。

35.34 SDO_UTIL.INSERT_SDO_GEOM_METADATA

構文

SDO_UTIL.INSERT_SDO_GEOM_METADATA(     
  owner       IN   VARCHAR2,
  table_name  IN VARCHAR2,
  column_name IN VARCHAR2,      
  diminfo     IN SDO_DIM_ARRAY,      
  srid        IN NUMBER);      

説明

空間表のメタデータをジオメトリ・メタデータ・ビューUSER_SDO_GEOMETRY_METADATAおよびALL_SDO_GEOMETRY_METADATAに追加します。

パラメータ

owner

空間表を所有するスキーマの名前。大文字である必要があります。

table_name

空間表の名前(SDO_GEOMETRY型の列を持つフィーチャ表)。大文字である必要があります。

column_name

SDO_GEOMETRY型の列の名前。大文字である必要があります。

diminfo

次元によって順序付けられたオブジェクト型の可変長配列。次元ごとに1つのエントリがあります。(SDO_DIM_ARRAY型の詳細は、DIMINFO」を参照してください。)

srid

次のいずれか: 列のすべてのジオメトリの座標系のSDO_SRID値、またはジオメトリに特定の座標系を関連付ける必要がない場合はNULL。

使用上のノート

このプロシージャは、SQL INSERT文を使用して空間表のメタデータをジオメトリ・メタデータ・ビューに追加するための代替方法です。(INSERT文を使用してUSER_SDO_GEOMETRY_METADATAビューを更新する場合は、空間データの挿入、索引付けおよび問合せを参照してください。)

他のユーザーのスキーマ内の空間表でこのプロシージャを使用するには、DBA権限または他のユーザーの表に対するSELECT権限が必要です。たとえばUSER1がUSER2.COLA_MARKETS表のジオメトリ・メタデータを挿入する場合、USER1はDBA権限またはUSER2.COLA_MARKETS表に対するSELECT権限を持っている必要があります。

次の例では、COLA_MARKETSという名前の空間表のメタデータを、USER2スキーマのSHAPEという名前のジオメトリ列に追加します。また、空間索引も作成します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

---------------------------------------------------------------------------
-- UPDATE METADATA VIEWS --
---------------------------------------------------------------------------
-- Add information to the USER_SDO_GEOM_METADATA and USER_SDO_GEOM_METADATA views. This 
-- is required before the spatial index can be created. Do this only once for each layer
-- (that is, table-column combination; here: cola_markets and shape).

EXECUTE SDO_UTIL.INSERT_SDO_GEOM_METADATA ('USER2', 'COLA_MARKETS', 'SHAPE', -
  SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 0, 20, 0.005), -
                SDO_DIM_ELEMENT('Y', 0, 20, 0.005)), - 
  NULL);

-------------------------------------------------------------------
-- CREATE THE SPATIAL INDEX --
-------------------------------------------------------------------

CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX_V2;

関連トピック

35.35 SDO_UTIL.INTERIOR_POINT

構文

SDO_UTIL.INTERIOR_POINT(
     geom IN SDO_GEOMETRY, 
     tol  IN NUMBER  DEFAULT 0.00000000005 
     ) RETURN SDO_GEOMETRY;

説明

ポリゴンのジオメトリ・オブジェクト上の内部の点(境界またはエッジ上ではない)を戻します。

パラメータ

geom

ポリゴンのジオメトリ・オブジェクトを指定します。ジオメトリのSDO_GTYPE値は2003または2007である必要があります。(SDO_GTYPE値の詳細は、「SDO_GTYPE」を参照。)

tol

許容差(「許容差」を参照)。

使用上のノート

このファンクションは、geom上の境界またはエッジ上ではなく内部の点を表現する、点のジオメトリ・オブジェクトを戻します。ジオメトリ・オブジェクト上のどの内部の点でも戻り値になる可能性がありますが、同じ geomおよびtolのパラメータ値を指定してこのファンクションを複数回コールしても同じ点が戻されます。

戻される点と元のジオメトリの関係はINSIDEです。これは、'mask=inside'を含めてSDO_RELATE演算子を使用することで確認できます。

ほとんどの場合、このファンクションは内部の点を戻す保証のないSDO_GEOM.SDO_POINTONSURFACEファンクションと比較して有用性が高くなります。

次の例では、cola_a上の内部の点であるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return an interior point on the surface of a geometry.
SELECT SDO_UTIL.INTERIOR_POINT(c.shape, 0.005)
  FROM cola_markets c
  WHERE c.name = 'cola_a';
 
SDO_UTIL.INTERIOR_POINT(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), 
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(2.75, 2.875, NULL), NULL, NULL)

関連トピック

なし。

35.36 SDO_UTIL.POINT_AT_BEARING

構文

SDO_UTIL.POINT_AT_BEARING(
     start_point IN SDO_GEOMETRY, 
     bearing     IN NUMBER, 
     distance    IN NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

開始点を基準として指定された距離および方位に存在する点ジオメトリを戻します。

パラメータ

start_point

必要な点を配置するために、指定された方位の距離計算の開始点となる点ジオメトリ・オブジェクトを指定します。測地座標系に基づく点ジオメトリを指定する必要があります。

bearing

北を基準として時計回りに測定されるラジアンの数値を指定します。-piからpiか、または0から2×piの範囲で指定する必要があります。(いずれの表記でも指定できます。)

distance

start_pointから初期の方位方向への計算の終了点までの数値(m)を指定します。地球の円周の半分より小さい値を指定する必要があります。

使用上のノート

入力する点ジオメトリは、測地座標系に基づく必要があります。非測地座標系に基づく場合、このファンクションはNULL値を戻します。

10進度をラジアンに変換したり、m単位ではない距離をm単位に変換するには、SDO_UTIL.CONVERT_UNITファンクションを使用します。開始点から終了点への方位と傾きを計算するには、SDO_UTIL.BEARING_TILT_FOR_POINTSプロシージャを使用できます。

次の例では、経度と緯度の座標が (-72, 43) である点から、1ラジアンの方位方向100kmの位置にある点を戻します。

SELECT SDO_UTIL.POINT_AT_BEARING(
  SDO_GEOMETRY(2001, 8307,
    SDO_POINT_TYPE(-72, 43, NULL), NULL, NULL),
  1,  -- 1 radian (57.296 degrees clockwise from North)
  100000 -- 100 kilometers
) FROM DUAL;
 
SDO_UTIL.POINT_AT_BEARING(SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(-72,43,NULL),NUL
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
-70.957053, 43.4811935)) 

35.37 SDO_UTIL.POLYGONTOLINE

構文

SDO_UTIL.POLYGONTOLINE(
     geometry  IN SDO_GEOMETRY 
     ) RETURN SDO_GEOMETRY;

説明

ジオメトリ内のすべてのポリゴンタイプ要素を線タイプ要素に変換し、それに応じてSDO_GTYPE値を設定します。

パラメータ

geometry

変換するジオメトリを指定します。

使用上のノート

戻される各線タイプ要素の頂点の順序は、関連付けられたポリゴンタイプ要素の頂点の順序と同じです。また、各線タイプ・セグメントの開始点および終了点は同じ点になります。

入力ジオメトリが線の場合、入力ジオメトリが戻されます。

次の例では、cola_b (「空間データの挿入、索引付けおよび問合せの例」を参照)と同じジオメトリである入力ポリゴン・ジオメトリを、線ストリング・ジオメトリに変換します。戻されるジオメトリでは、SDO_GTYPE値(2002)は2次元のLINEジオメトリを示します。SDO_ELEM_INFO配列のSDO_ETYPE値(2)およびSDO_INTERPRETATION値(1)は、頂点が直線セグメントにより接続されている線ストリングを示します。

SELECT SDO_UTIL.POLYGONTOLINE(
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
    SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
  )
) FROM DUAL;

SDO_UTIL.POLYGONTOLINE(SDO_GEOMETRY(2003,--TWO-DIMENSIONALPOLYGONNULL,NULL,SDO_E
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 1, 8, 1, 8, 6, 5, 7, 5, 1))

関連トピック

なし。

35.38 SDO_UTIL.RECTIFY_GEOMETRY

構文

SDO_UTIL.RECTIFY_GEOMETRY(
     geometry  IN SDO_GEOMETRY, 
     tolerance IN NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

入力ジオメトリの特定の問題点を修正して、有効なジオメトリを戻します。

パラメータ

geometry

修正可能な問題を確認するジオメトリを指定します。

tolerance

許容差(「許容差」を参照)。

使用上のノート

このファンクションは、ジオメトリを無効とする次の問題点があるかどうかを確認し、問題点を修正したジオメトリを戻します。

  • 重複する頂点

  • 自分自身と交わるポリゴン境界

  • 方向が無効な、ポリゴンの外部または内部の輪(両方の輪の向きが無効な場合も含む)

入力ジオメトリが無効となる理由が他にある場合、このファンクションは例外を発生します。

入力ジオメトリが有効な場合、このファンクションは、入力ジオメトリと同じジオメトリを戻します。

空間データをロードおよび検証する際の推奨手順の一部としてこのファンクションを使用する方法については、「空間データのロードおよび検査の推奨手順」を参照してください。

このファンクションは、ジオメトリの簡略化プロセスの一部として、SDO_UTIL.SIMPLIFYファンクションによって内部的に使用されます。

必要な場合は、SDO_GEOM.SDO_SELF_UNIONファンクションが内部的にコールされます。

次の例では、cola_bジオメトリをチェックして、修正可能な問題点があるかどうかを確認します。(ここでは、ジオメトリが有効なため、入力ジオメトリが戻ります。例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT SDO_UTIL.RECTIFY_GEOMETRY(shape, 0.005)
  FROM COLA_MARKETS c WHERE c.name = 'cola_b';
 
SDO_UTIL.RECTIFY_GEOMETRY(SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), 
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))

35.39 SDO_UTIL.REMOVE_DUPLICATE_VERTICES

構文

SDO_UTIL.REMOVE_DUPLICATE_VERTICES(
     geometry  IN SDO_GEOMETRY, 
     tolerance IN NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

重複する(冗長の)頂点をジオメトリから削除します。

パラメータ

geometry

重複する頂点を削除するジオメトリを指定します。

tolerance

許容差(「許容差」を参照)。

使用上のノート

ジオメトリの2つの連続する頂点が、ジオメトリに関連付けられた許容差以内である場合、そのジオメトリは無効とみなされます。この場合、Spatial and Graphのジオメトリ検証ファンクションが、エラーORA-13356を戻します。REMOVE_DUPLICATE_VERTICESファンクションを使用すると、このような無効なジオメトリを有効なジオメトリに変更できます。

また、このファンクションによってポリゴンが閉じられ、輪の最初の頂点が最後の頂点と等しくなります。

このファンクションは、点ジオメトリ(方向付きの点を含む)ではサポートされません。

入力ジオメトリに重複する頂点が存在しない場合、入力ジオメトリが戻されます。

次の例では、cola_b(「空間データの挿入、索引付けおよび問合せの例」を参照)と同じジオメトリである入力ジオメトリから、重複する頂点を削除します。ただし、この例で使用するジオメトリは、2つ目の頂点(8,1)と同じ点である3つ目の頂点を追加することによって、意図的に無効な状態で作成されています。

SELECT SDO_UTIL.REMOVE_DUPLICATE_VERTICES(
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
    SDO_ORDINATE_ARRAY(5,1, 8,1, 8,1, 8,6, 5,7, 5,1) -- 2nd and 3rd points
                                                -- are duplicates.
  ),
  0.005 -- tolerance value
) FROM DUAL;

SDO_UTIL.REMOVE_DUPLICATE_VERTICES(SDO_GEOMETRY(2003,--TWO-DIMENSIONALPOLYGONNUL
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))

関連トピック

なし。

35.40 SDO_UTIL.REVERSE_LINESTRING

構文

SDO_UTIL.REVERSE_LINESTRING(
     geometry  IN SDO_GEOMETRY 
     ) RETURN SDO_GEOMETRY;

説明

線ストリング・ジオメトリを、その入力ジオメトリの頂点を逆順序にして戻します。

パラメータ

geometry

出力ジオメトリで頂点を反転させる線ストリング・ジオメトリを指定します。入力ジオメトリのSDO_GTYPE値は2002である必要があります。(SDO_GTYPE値の詳細は、「SDO_GTYPE」を参照。)

使用上のノート

入力ジオメトリのSDO_GTYPE値は2002である必要があるため、このファンクションを使用してLRSジオメトリを反転することはできません。LRSジオメトリを反転するには、SDO_LRS.REVERSE_GEOMETRYファンクションを使用します(「SDO_LRSパッケージ(線形参照システム)」を参照)。

次の例では、入力ジオメトリの頂点を反転させた線ストリング・ジオメトリを戻します。

SELECT SDO_UTIL.REVERSE_LINESTRING(
  SDO_GEOMETRY(2002, 8307, NULL, SDO_ELEM_INFO_ARRAY(1,2,1),
    SDO_ORDINATE_ARRAY(-72,43, -71.5,43.5, -71,42, -70,40))
) FROM DUAL;
 
SDO_UTIL.REVERSE_LINESTRING(SDO_GEOMETRY(2002,8307,NULL,SDO_ELEM_INFO_ARRAY(1,2,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
-70, 40, -71, 42, -71.5, 43.5, -72, 43))

35.41 SDO_UTIL.SIMPLIFY

構文

SDO_UTIL.SIMPLIFY(
     geometry     IN SDO_GEOMETRY, 
     threshold    IN NUMBER 
     tolerance    IN NUMBER DEFAULT 0.0000005, 
     remove_loops IN NUMBER DEFAULT 0 
     ) RETURN SDO_GEOMETRY;

説明

Douglas-Peuckerアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

パラメータ

geometry

簡略化するジオメトリを指定します。

threshold

ジオメトリの簡略化に使用するしきい値を指定します。正の数字を指定する必要があります。(0 (ゼロ)を指定した場合、入力ジオメトリが戻されます。)入力ジオメトリが測地ジオメトリである場合、値はm単位になります。非測地ジオメトリである場合、値はデータに関連付けられた単位の数値になります。

しきい値が小さくなると、戻されるジオメトリは入力ジオメトリにより近くなり、しきい値が大きくなると、戻されるジオメトリの点は少なくなります。詳細は、「使用上のノート」を参照してください。

tolerance

許容差(「許容差」を参照)。この値は、threshold以下にする必要があります。パフォーマンスを向上させるには、thresholdと同じ値を指定しないでください。値を指定しない場合のデフォルト値は、0.0000005です。

remove_loops

一部の線ジオメトリでは、線を簡略化すると、途中で自己交差するループとなることがあります。これは(線としては)有効なジオメトリですが、場合によっては、簡略化操作の結果にこれらのループが存在することは望ましくないことがあります。0の値(デフォルト)を指定すると、このようなループは除去されません。1の値(または、他の任意の正の数)を指定すると、このようなループはすべて除去され、単純な線セグメントが常に戻されます。

使用上のノート

このファンクションでは他に、円弧から線ストリングへの変換、重複している頂点の削除、およびポリゴンのエッジの重複の修正も行われます。このファンクションで問題が修正させるのは、有効なジオメトリが確実に戻されるように、簡略化プロセスの最後でSDO_UTIL.RECTIFY_GEOMETRYファンクションを内部的にコールする場合があるためです。ただし、完全に整列された2つのジオメトリが独立して簡略化されている場合、ジオメトリは簡略化後に整列されない可能性があります。

このファンクションは、元のジオメトリよりも解像度の低いジオメトリが必要な場合に有効です。たとえば、川筋または行政的境界の多数のカーブをディスプレイの解像度で表示できない場合、ジオメトリを簡略化して主なカーブのみを表示させると、パフォーマンスが向上する場合があります。

3次元以上のジオメトリにこのファンクションを使用する場合、最初の2次元のみが問合せ処理で使用され、戻されるジオメトリの最初の2次元のみが有効とみなされます。

このファンクションで使用されるDouglas-Peuckerアルゴリズムの詳細は、地図作成法に関する書籍および参考資料を参照してください。(これらのドキュメントでは、しきい値のかわりに許容差という用語が使用される場合もありますが、Oracle Spatial and Graphの許容差とは意味が異なります。)

このファンクションを、Visvalingham-Whyattアルゴリズムを使用するSDO_UTIL.SIMPLIFYVWと比較してください。

戻されるジオメトリは、ジオメトリの定義およびしきい値に応じてポリゴン、線または点となります。適用される考慮点は次のとおりです。

  • •ジオメトリに関連付けられたしきい値が十分に大きい場合、ポリゴンを線または点に、線を点に簡略化できます。たとえば、細長い矩形の平行な2長辺間の距離がしきい値よりも小さい場合、その矩形は線に簡略化されます。線の開始点と終了点の間の距離がしきい値よりも小さい場合、その線は点に簡略化されます。

  • 穴のあるポリゴンで、外部の輪または内部の輪(穴)が線または点に簡略化される場合、内部の輪は結果のジオメトリには存在しなくなります(結果のジオメトリには含まれません)。

  • 入力ジオメトリの位相特性は、簡略化後には保持されない場合があります。集合ジオメトリの場合は、個々の要素が重ならないようにするため、要素の数が増えることがあります。どのような場合でも、このファンクションが無効なジオメトリを戻すことはありません。

このファンクションは、線形参照システム(LRS)ジオメトリ(「線形参照システム」を参照)ではサポートされません。

次の例では、「LRSファンクションの例」図7-20に示す道路の頂点を反映した線ストリング・ジオメトリを簡略化します(ただし、この例のジオメトリはLRSジオメトリではありません)。しきい値は6であるため、結果の線ストリングには、開始点、終了点および(12, 4,12)の3つの点のみが含まれます。

SELECT SDO_UTIL.SIMPLIFY(
  SDO_GEOMETRY(
    2002,  -- line string, 2 dimensions (X,Y)
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
    SDO_ORDINATE_ARRAY(
      2,2,   -- Starting point
      2,4,
      8,4,
      12,4,
      12,10,
      8,10,
      5,14)  -- Ending point
  ),
  6, -- threshold value for geometry simplification
  0.5  -- tolerance
) FROM DUAL;

SDO_UTIL.SIMPLIFY(SDO_GEOMETRY(2002,--LINESTRING,2DIMENSIONS(X,Y)NULL,NULL,SDO_E
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 12, 4, 5, 14))

図35-1に、この例の結果を示します。図35-1では、黒い太実線が結果のジオメトリを示し、開始点と終了点の間の薄い色の細実線が入力ジオメトリを示しています。

図35-1 ジオメトリの簡略化

図35-1の説明が続きます
図35-1「ジオメトリの簡略化」の説明

35.42 SDO_UTIL.SIMPLIFYVW

構文

SDO_UTIL.SIMPLIFYVW(
     geometry         IN SDO_GEOMETRY, 
     vertex_threshold IN NUMBER, 
     tolerance        IN NUMBER DEFAULT 0.0000005, 
     remove_loops     IN NUMBER DEFAULT 0 
     ) RETURN SDO_GEOMETRY;

説明

Visvalingham-Whyattアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。

パラメータ

geometry

簡略化するジオメトリを指定します。

vertex_threshold

ジオメトリの簡略化に使用するしきい値を指定します(0から100までの割合の値として表します)。値が小さくなると、戻されるジオメトリは入力ジオメトリにより近くなり、値が大きくなると、戻されるジオメトリの点は少なくなります。

異なる値を試して、必要な簡略化レベルを決定することができます。

tolerance

許容差(「許容差」を参照)。値を指定しない場合のデフォルト値は、0.0000005です。

remove_loops

一部の線ジオメトリでは、線を簡略化すると、途中で自己交差するループとなることがあります。これは(線としては)有効なジオメトリですが、場合によっては、簡略化操作の結果にこれらのループが存在することは望ましくないことがあります。0の値(デフォルト)を指定すると、このようなループは除去されません。1の値(または、他の任意の正の数)を指定すると、このようなループはすべて除去され、単純な線セグメントが常に戻されます。

使用上のノート

ノート:

SDO_UTIL.SIMPLIFYVWファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

SDO_UTIL.SIMPLIFYファンクションの「使用上のノート」を参照してください(同じように入力ジオメトリを簡略化していますが、異なるアルゴリズム(Douglas-Peucker)を使用しています)。

次の例では、SDO_UTIL.SIMPLIFYの例で使用されている線ストリング・ジオメトリと同じものを簡略化します。

SELECT SDO_UTIL.SIMPLIFYVW(
  SDO_GEOMETRY(
    2002,  -- line string, 2 dimensions (X,Y)
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
    SDO_ORDINATE_ARRAY(
      2,2,   -- Starting point
      2,4,
      8,4,
      12,4,
      12,10,
      8,10,
      5,14)  -- Ending point
  ),
  80, -- threshold "percentage" value for geometry simplification
  0.5  -- tolerance
) FROM DUAL;

SDO_UTIL.SIMPLIFYVW(SDO_GEOMETRY(2002,--LINESTRING,2DIMENSIONS(X,Y)NULL,NULL,SDO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 12, 4, 5, 14))

この場合(vertex_threshold値として80を使用)に結果として生成されるジオメトリには、SDO_UTIL.SIMPLIFYの例と同じ点が含まれますが、メジャー次元情報は含まれません(つまり、頂点は2,2、12,4および5,14です)。vertex_threshold値を大幅に低く設定すると、結果としてより多くの頂点を含むジオメトリが生成される可能性があります。

35.43 SDO_UTIL.THEME3D_GET_BLOCK_TABLE

構文

SDO_UTIL.THEME3D_GET_BLOCK_TABLE(
     theme_name  IN VARCHAR2 
     ) RETURN NUMBER;

説明

3Dテーマ(DEM、PCおよびTINのテーマ)のブロック表がある場合は、それらを戻します。

パラメータ

theme_name

3Dテーマの名前を指定します。この値は、USER_SDO_3DTHEMESビューまたはALL_SDO_3DTHEMESビュー(「xxx_SDO_3DTHEMESビュー」を参照)の値である必要があります。

使用上のノート

ノート:

SDO_UTIL.THEME3D_GET_BLOCK_TABLEファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、テーマに関連付けられているブロック表がある場合に、テーマのブロック表の名前を戻します。関連付けられているブロック表がない場合、ファンクションはNULL値を戻します。

この例では、USER_SDO_3DTHEMES表内の各テーマに対して、複数のLODと1つのテクスチャを所有するかどうかをチェックし、ブロック表名を戻します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
  name,
  sdo_util.theme3d_has_lod(name) "Has LOD",
  sdo_util.theme3d_has_texture(name) "Has Texture",
  sdo_util.theme3d_get_block_table(name) "Block Table"
FROM user_sdo_3dthemes
ORDER BY name;
 
NAME                                Has LOD Has Texture Block Table
-------------------------------- ---------- ----------- -------------------------
DEM Hawaii Theme 4326                     1           0 DEM_BLOCKS_HAWAII_4326
DEM Hawaii Theme w/ Map Tiles             1           1 DEM_BLOCKS_HAWAII_4326
DEM Splitted Theme                        1           0 DEM_SPLITTED_HAWAII_4326
Geom Theme                                0           0
GeomForDEM Theme                          0           0
GeomForTIN Theme                          0           0
PC Category Theme                         1           0 PC_BLOCKS_CATEGORY
PC Hawaii Theme 4326                      1           0 PC_BLOCKS_HAWAII_4326
PC Intensity Theme                        1           0 PC_BLOCKS_INTENSITY
PC LAS File Theme                         1           0 PC_BLOCKS_LAS
PC RGB Theme                              1           0 PC_BLOCKS_RGB
PC Split Theme                            1           0 PC_SPLIT_BLOCKS_4326
PC Subset Hawaii Theme                    1           0 PC_SUBSET_BLOCKS_4326
PC Theme                                  0           0 PC_BLOCKS_NULL_CRS
TIN Hawaii Theme 4326                     1           0 TIN_BLOCKS_HAWAII_4326
TIN Hawaii Theme w/ Map Tiles             1           1 TIN_BLOCKS_HAWAII_4326
TIN Split Theme                           1           0 TIN_SPLIT_BLOCKS_4326
TIN Subset Hawaii Theme                   1           0 TIN_SUBSET_BLOCKS_4326
 
18 rows selected.

35.44 SDO_UTIL.THEME3D_HAS_LOD

構文

SDO_UTIL.THEME3D_HAS_LOD(
     theme_name  IN VARCHAR2 
     ) RETURN NUMBER;

説明

3Dテーマに(ピラミッド化を使用するDEM、PCおよびTINテーマの場合)複数の詳細レベル(LOD)が含まれているかどうか、またはテーマが(SDO_GEOMETRYのテーマの場合)複数のLODの一連のテーマに含まれているかどうかをチェックします。

パラメータ

theme_name

3Dテーマの名前を指定します。この値は、USER_SDO_3DTHEMESビューまたはALL_SDO_3DTHEMESビュー(「xxx_SDO_3DTHEMESビュー」を参照)の値である必要があります。

使用上のノート

ノート:

SDO_UTIL.THEME3D_HAS_LODファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、テーマに複数のLODまたは複数のLODを持つテーマへのリンクが含まれていない場合は0 (ゼロ)を戻し、それ以外の場合は1を戻します。

この例では、USER_SDO_3DTHEMES表内の各テーマに対して、複数のLODと1つのテクスチャを所有するかどうかをチェックし、ブロック表名を戻します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
  name,
  sdo_util.theme3d_has_lod(name) "Has LOD",
  sdo_util.theme3d_has_texture(name) "Has Texture",
  sdo_util.theme3d_get_block_table(name) "Block Table"
FROM user_sdo_3dthemes
ORDER BY name;
 
NAME                                Has LOD Has Texture Block Table
-------------------------------- ---------- ----------- -------------------------
DEM Hawaii Theme 4326                     1           0 DEM_BLOCKS_HAWAII_4326
DEM Hawaii Theme w/ Map Tiles             1           1 DEM_BLOCKS_HAWAII_4326
DEM Splitted Theme                        1           0 DEM_SPLITTED_HAWAII_4326
Geom Theme                                0           0
GeomForDEM Theme                          0           0
GeomForTIN Theme                          0           0
PC Category Theme                         1           0 PC_BLOCKS_CATEGORY
PC Hawaii Theme 4326                      1           0 PC_BLOCKS_HAWAII_4326
PC Intensity Theme                        1           0 PC_BLOCKS_INTENSITY
PC LAS File Theme                         1           0 PC_BLOCKS_LAS
PC RGB Theme                              1           0 PC_BLOCKS_RGB
PC Split Theme                            1           0 PC_SPLIT_BLOCKS_4326
PC Subset Hawaii Theme                    1           0 PC_SUBSET_BLOCKS_4326
PC Theme                                  0           0 PC_BLOCKS_NULL_CRS
TIN Hawaii Theme 4326                     1           0 TIN_BLOCKS_HAWAII_4326
TIN Hawaii Theme w/ Map Tiles             1           1 TIN_BLOCKS_HAWAII_4326
TIN Split Theme                           1           0 TIN_SPLIT_BLOCKS_4326
TIN Subset Hawaii Theme                   1           0 TIN_SUBSET_BLOCKS_4326
 
18 rows selected.

35.45 SDO_UTIL.THEME3D_HAS_TEXTURE

構文

SDO_UTIL.THEME3D_HAS_TEXTURE(
     theme_name  IN VARCHAR2 
     ) RETURN NUMBER;

説明

3Dテーマに(DEM、TIN、マップ・タイル・サーバーおよびSDO_GEOMETRYのテーマの場合)テクスチャが含まれているかどうかをチェックします。

パラメータ

theme_name

3Dテーマの名前を指定します。この値は、USER_SDO_3DTHEMESビューまたはALL_SDO_3DTHEMESビュー(「xxx_SDO_3DTHEMESビュー」を参照)の値である必要があります。

使用上のノート

ノート:

SDO_UTIL.THEME3D_HAS_TEXTUREファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、テーマにテクスチャが含まれていない場合は0 (ゼロ)を戻し、それ以外の場合は1を戻します。

この例では、USER_SDO_3DTHEMES表内の各テーマに対して、複数のLODと1つのテクスチャを所有するかどうかをチェックし、ブロック表名を戻します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
  name,
  sdo_util.theme3d_has_lod(name) "Has LOD",
  sdo_util.theme3d_has_texture(name) "Has Texture",
  sdo_util.theme3d_get_block_table(name) "Block Table"
FROM user_sdo_3dthemes
ORDER BY name;
 
NAME                                Has LOD Has Texture Block Table
-------------------------------- ---------- ----------- -------------------------
DEM Hawaii Theme 4326                     1           0 DEM_BLOCKS_HAWAII_4326
DEM Hawaii Theme w/ Map Tiles             1           1 DEM_BLOCKS_HAWAII_4326
DEM Splitted Theme                        1           0 DEM_SPLITTED_HAWAII_4326
Geom Theme                                0           0
GeomForDEM Theme                          0           0
GeomForTIN Theme                          0           0
PC Category Theme                         1           0 PC_BLOCKS_CATEGORY
PC Hawaii Theme 4326                      1           0 PC_BLOCKS_HAWAII_4326
PC Intensity Theme                        1           0 PC_BLOCKS_INTENSITY
PC LAS File Theme                         1           0 PC_BLOCKS_LAS
PC RGB Theme                              1           0 PC_BLOCKS_RGB
PC Split Theme                            1           0 PC_SPLIT_BLOCKS_4326
PC Subset Hawaii Theme                    1           0 PC_SUBSET_BLOCKS_4326
PC Theme                                  0           0 PC_BLOCKS_NULL_CRS
TIN Hawaii Theme 4326                     1           0 TIN_BLOCKS_HAWAII_4326
TIN Hawaii Theme w/ Map Tiles             1           1 TIN_BLOCKS_HAWAII_4326
TIN Split Theme                           1           0 TIN_SPLIT_BLOCKS_4326
TIN Subset Hawaii Theme                   1           0 TIN_SUBSET_BLOCKS_4326
 
18 rows selected.

35.46 SDO_UTIL.TILE_GEOMETRY

構文

SDO_UTIL.TILE_GEOMETRY(
  geom                   IN SDO_GEOMETRY,
  x_axis_min             IN NUMBER,
  x_axis_max             IN NUMBER,
  y_axis_min             IN NUMBER,
  y_axis_max             IN NUMBER,
  tile_resolution        IN NUMBER,
  resolution_factor      IN NUMBER   := 0,         
  perform_intersection   IN VARCHAR2 := 'TRUE',
  compute_percent        IN VARCHAR2 := 'FALSE',
  geodetic_tolerance     IN NUMBER   := .05) 
  RETURN mdsys.tile_geom_table_type DETERMINISTIC
         PIPELINED PARALLEL_ENABLE;

説明

指定された四角形解像度と解像度係数に基づいてジオメトリを四角形処理します。MDSYS.TILE_GEOM_TYPEオブジェクトの表であるMDSYS.TILE_GEOM_TABLE_TYPEを戻します。

パラメータ

geom

四角形処理するジオメトリ。

x_axis_min

四角形処理ドメインのX軸上の最小値。(詳細は、「使用上のノート」を参照してください。)

x_axis_max

四角形処理ドメインのX軸上の最大値。(詳細は、「使用上のノート」を参照してください。)

y_axis_min

四角形処理ドメインのY軸上の最小値。(詳細は、「使用上のノート」を参照してください。)

y_axis_max

四角形処理ドメインのY軸上の最大値。(詳細は、「使用上のノート」を参照してください。)

tile_resolution

四角形のサイズ値。(詳細は、「使用上のノート」を参照してください。)

resolution_factor

tile_resolutionパラメータに適用される値係数。

デフォルト値は0です。(詳細は、「使用上のノート」を参照してください。)

perform_intersection

文字列値TRUE (デフォルト)は、境界の四角形をジオメトリ境界にクリップします。

文字列値FALSEは、ジオメトリ境界に沿って最大の四角形を戻します。

compute_percent

デフォルトの文字列値はFALSEです。

文字列値TRUEは、0から1までの値を計算します。この値を計算するには、perform_intersectionTRUEに設定する必要があります。

geodetic_tolerance

デフォルトは0.05です。

このパラメータは、四角形に対するジオメトリが経度/緯度の場合にのみ使用されます。デフォルト値は、0.05より小さい値でオーバーライドできます。

使用上のノート

SDO_UTIL.TILE_GEOMETRYファンクションを使用すると、次の処理ができます。
  • 農地や土地区画などのジオメトリの四角形処理
  • ラスターのセルと同じ空間を占める四角形によるジオメトリの四角形処理。

    ラスター・セル・サイズの四角形には、ラスターのエクステントを四角形処理ドメインとして使用し、tile_resolutionをラスター解像度に設定します。

このファンクションは、次のように定義されるMDSYS.TILE_GEOM_TABLE_TYPEタイプの表を戻します。

CREATE OR REPLACE TYPE mdsys.tile_geom_table_type AS TABLE OF tile_geom_type;

前述のコードで使用されたオブジェクト・タイプMDSYS.TILE_GEOM_TYPEは、次のように定義されます。

CREATE OR REPLACE TYPE mdsys.tile_geom_type AS OBJECT (
  tile_id      NUMBER,
  status       CHAR,             
  percent      NUMBER,
  tile_center  SDO_GEOMETRY,    
  geom         SDO_GEOMETRY);
オブジェクト・タイプMDSYS.TILE_GEOM_TYPEの定義に使用されるパラメータは次のとおりです。
  • tile_id: 1から始まる、各四角形に割り当てられる一意の番号。
  • status: 値は次のいずれかです。
    • 'I': 内側の四角形
    • 'B': ジオメトリの境界四角形
  • percent: ジオメトリ領域と同じ空間を占める四角形領域の割合。0から1までの値。内側の四角形は常に1を戻します。
  • tile_center: 四角形の中心点。
  • geom: ジオメトリ四角形。パラメータperform_intersectionTRUEの場合、境界四角形はジオメトリ境界にクリップされます。
SDO_UTIL.TILE_GEOMETRYファンクションで使用されるパラメータx_axis_minx_axis_maxy_axis_minおよびy_axis_maxは、四角形処理ドメインを表します。四角形処理ドメインは、四角形に必要なすべてのジオメトリが含まれるエクステントです。たとえば、経度/緯度ジオメトリの場合、次のパラメータ値を使用して四角形処理ドメインを指定できます。
  • x_axis_min: -180
  • x_axis_max: 180
  • y_axis_min: -90
  • y_axis_max: 90
また、複数のジオメトリを四角形処理する際に同じ四角形処理ドメインが指定されている場合、ジオメトリが重なるときに共通の四角形が生成されることに注意してください。

tile_resolutionおよびresolution_factorパラメータは、次で強調されているように四角形のサイズに影響します。

  • 目的の四角形のサイズ値は、tile_resolutionパラメータによって決まります。たとえば、値5の場合、四角形は5x5になるか、パラメータresolution_factorが0でない場合は、5x5の倍数になります。
  • resolution_factorは、指定された場合、tile_resolutionパラメータに係数を適用し、tile_resolutionよりも小さいまたは大きい四角形でジオメトリを四角形処理します。

    次の表では、resolution_factor値によって決定される四角形のサイズについて説明します。

    解像度係数値 四角形のサイズ
    0 (デフォルト) 係数は適用されません。四角形のサイズは、tile_resolutionパラメータによって決定されます。

    詳細は、例-1を参照してください。

    > 0 生成される四角形は、tile_resolutionパラメータに対して倍数分小さくなります。たとえば、次のresolution_factor値の場合:
    • 1: 四角形のサイズはtile_resolutionの1/4倍に小さくなります
    • 2: 四角形のサイズはtile_resolutionの1/16倍に小さくなります
    • 3: 四角形のサイズはtile_resolutionの1/64倍に小さくなります

    詳細は、例-2を参照してください。

    < 0 生成される四角形は、tile_resolutionパラメータに対して倍数分大きくなります。たとえば、次のresolution_factor値の場合:
    • -1: 四角形のサイズはtile_resolutionの4倍に大きくなります
    • -2: 四角形のサイズはtile_resolutionの16倍に大きくなります
    • -3: 四角形のサイズはtile_resolutionの64倍に大きくなります

    詳細は、例-3を参照してください。

    ただし、四角形を生成する場合、小さい方の四角形は大きい方の四角形に完全に含まれます。また、異なる解像度で生成された四角形は(大きくても小さくても)常に整列されます。

次の各例では、ラスターのセルと同じ空間を占める四角形でジオメトリを四角形処理します。また、ラスターのエクステントは投影される(経度、緯度ではない)ため、ドメインのエクステントはラスターのエクステントに設定されます。各例のパラメータperform_intersection => 'TRUE'により、境界四角形は農場の境界にクリップされます。

例1

この例では、ラスター・セルのサイズに等しい四角形で農場ジオメトリを四角形処理します。ラスターの解像度が1000であるため、四角形は1000x1000になります。

WITH
  part0 AS (SELECT b.tile_id,
                   b.status,
                   b.percent,
                   b.tile_center,
                   b.geom
            FROM farm_plots a,
            TABLE (sdo_util.tile_geometry(geom                 => a.geom,
                                          x_axis_min           => 272039.5,
                                          x_axis_max           => 275188.5,
                                          y_axis_min           => 370575.5,
                                          y_axis_max           => 380165.5,
                                          tile_resolution      => 1000,
                                          resolution_factor    => 0,
                                          perform_intersection => 'TRUE',
                                          compute_percent      => 'TRUE',
                                          geodetic_tolerance   => NULL)) b
            WHERE a.id = -1)
 SELECT tile_id, geom FROM part0 ORDER BY tile_id;

次の図に、結果の出力を示します。

図35-2 tile_resolutionと同じ四角形のサイズ

図35-2の説明が続きます
「図35-2 tile_resolutionと同じ四角形のサイズ」の説明

例2

次の例では、resolution_factor => 1が指定されているため、1000 x 1000の1/4倍に小さくなった四角形で農場ジオメトリを四角形処理します。

WITH
  part0 AS (SELECT b.tile_id,
                   b.status,
                   b.percent,
                   b.tile_center,
                   b.geom
            FROM farm_plots a,
            TABLE (sdo_util.tile_geometry(geom                 => a.geom,
                                          x_axis_min           => 272039.5,
                                          x_axis_max           => 275188.5,
                                          y_axis_min           => 370575.5,
                                          y_axis_max           => 380165.5,
                                          tile_resolution      => 1000,
                                          resolution_factor    => 1,
                                          perform_intersection => 'TRUE',
                                          compute_percent      => 'TRUE',
                                          geodetic_tolerance   => NULL)) b
            WHERE a.id = -1)
 SELECT tile_id, geom FROM part0 ORDER BY tile_id;

次の図に、結果の出力を示します。

図35-3 tile_resolutionより小さい四角形のサイズ

図35-3の説明が続きます
「図35-3 tile_resolutionより小さい四角形のサイズ」の説明

例3

次の例では、resolution_factor => -1が指定されているため、1000 x 1000の4倍に大きくなった四角形で農場ジオメトリを四角形処理します。

WITH
  part0 AS (SELECT b.tile_id,
                   b.status,
                   b.percent,
                   b.tile_center,
                   b.geom
            FROM farm_plots a,
            TABLE (sdo_util.tile_geometry(geom                 => a.geom,
                                          x_axis_min           => 272039.5,
                                          x_axis_max           => 275188.5,
                                          y_axis_min           => 370575.5,
                                          y_axis_max           => 380165.5,
                                          tile_resolution      => 1000,
                                          resolution_factor    => -1,
                                          perform_intersection => 'TRUE',
                                          compute_percent      => 'TRUE',
                                          geodetic_tolerance   => NULL)) b
            WHERE a.id = -1)
 SELECT tile_id, geom FROM part0 ORDER BY tile_id;

次の図に、結果の出力を示します。

図35-4 tile_resolutionより大きい四角形のサイズ

図35-4の説明が続きます
「図35-4 tile_resolutionより大きい四角形のサイズ」の説明

35.47 SDO_UTIL.TO_GEOJSON

構文

SDO_UTIL.TO_GEOJSON(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

SDO_GEOMETRYオブジェクトをGeoJSON形式のCLOB型のジオメトリに変換します。

パラメータ

geometry

GeoJSONオブジェクトに変換する、SDO_GEOMETRY形式のジオメトリ。

使用上のノート

Oracle Databaseに格納されているJSONデータの使用の詳細は、『Oracle Database JSON開発者ガイド』を参照してください。

GeoJSON形式のジオメトリをSDO_GEOMETRYオブジェクトに変換するには、SDO_UTIL.FROM_GEOJSONファンクションを使用します。

次の例では、JSON形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  cola_b_geom SDO_GEOMETRY;
  returned_geom SDO_GEOMETRY;
  returned_json CLOB;

BEGIN

-- Populate geometry variable with cola market cols_b shape.
SELECT c.shape into cola_b_geom FROM cola_markets c
  WHERE c.name = 'cola_b';

-- From geometry to JSON
returned_json := SDO_UTIL.TO_GEOJSON(cola_b_geom);

-- From JSON to geometry
returned_geom := SDO_UTIL.FROM_GEOJSON(returned_json);

END;
/

次の例では、指定したジオメトリを表すGeoJSONオブジェクトを示します。(この場合、ジオメトリ定義は、COLA_MARKETS表のcola_bジオメトリ(「空間データの挿入、索引付けおよび問合せの例」を参照)を反映します。)

SELECT SDO_UTIL.TO_GEOJSON(SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))) from DUAL;

SDO_UTIL.TO_GEOJSON(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1),SD
--------------------------------------------------------------------------------
{ "type": "Polygon", "coordinates": [ [ [5, 1], [8, 1], [8, 6], [5, 7], [5, 1] ]

関連トピック

35.48 SDO_UTIL.TO_GML311GEOMETRY

構文

SDO_UTIL.TO_GML311GEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatial and Graphジオメトリ・オブジェクトをGeography Markup Language (GMLバージョン3.1.1)フラグメントに変換します。

パラメータ

geometry

GMLバージョン3.1.1のフラグメントを戻すジオメトリを指定します。

使用上のノート

ノート:

SDO_UTIL.TO_GML311GEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

このファンクションは、Open GIS実装仕様に定義されたいくつかのGMLジオメトリ・タイプに基づいて、入力ジオメトリをGMLバージョン3.1.1のフラグメントに変換します。

ポリゴンの定義には、Oracle9i以降のリリースのSpatial and Graphの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(ETYPE=1003)、次に0 (ゼロ)個以上の内側の境界要素が格納されます(ETYPE=2003)。穴のあるポリゴンでは、外側の境界をSDO_ORDINATES定義によって先に格納し、次に内側の境界の座標を格納する必要があります。

LRSジオメトリは、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_LRS.CONVERT_TO_STD_GEOMファンクションまたはSDO_LRS.CONVERT_TO_STD_LAYERファンクションを使用して)標準ジオメトリに変換しておく必要があります。(CONVERT_TO_STD_GEOMファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

円弧または円は、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用して)稠密化しておくか、または(SDO_GEOM.SDO_BUFFERファンクションを使用して)ポリゴンとして表現しておく必要があります。(SDO_ARC_DENSIFYファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

ラベル点は廃棄されます。したがって、ジオメトリがSDO_POINT、SDO_ELEM_INFOおよびSDO_ORDINATESフィールドに値を持つ場合、SDO_POINTはGMLフラグメントに出力されません。

SDO_SRID値は、srsName="SDO:<srid>"の形式で出力されます。たとえば、"SDO:8307"はSDO_SRID値が8307であることを示し、"SDO:"はSDO_SRID値がNULLであることを示します。SDO_SRID値の妥当性または一貫性チェックは行われません。たとえば、値がMDSYS.CS_SRS表に存在するかどうか、またはUSER_SDO_GEOM_METADATAビューのレイヤーのSRID値と競合するかどうかの確認は行われません。

NLS_NUMERIC_CHARACTERS設定で小数点文字に',' (カンマ)が指定されている場合でも、座標は常に、<coordinates>タグ、decimal='.'cs=',' (座標セパレータにカンマ)、およびts=' ' (組セパレータに空白)を使用して出力されます。

GML出力の形式は整えられないため、タグの改行またはインデントは行われません。SQL*Plusで戻されるCLOBの内容を確認するには、TO_CHAR()ファンクションを使用するか、またはSQL*PlusパラメータのLONGを適切な値に設定してください(SET LONG 40000など)。形式を整えてGMLを出力するか、またはSQLXやOracle XML DBファンクション(XMLELEMENTなど)でTO_GMLGEOMETRYの戻り値を使用するには、XMLTYPE (clobval CLOB)コンストラクタを使用してください。

次の例では、COLA_MARKETS表のcola_bジオメトリについてGMLバージョン3.1.1のフラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Convert cola_b geometry to GML 3.1.1 fragment.
SELECT TO_CHAR(SDO_UTIL.TO_GML311GEOMETRY(shape)) AS Gml311Geometry 
  FROM COLA_MARKETS c WHERE c.name = 'cola_b';

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml"><gml:exterior
><gml:LinearRing><gml:posList srsDimension="2">5.0 1.0 8.0 1.0 8.0 6.0 5.0 7.0 5
.0 1.0 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>

次の例では、COLA_MARKETS表のcola_dジオメトリの円弧を稠密化したGMLバージョン3.1.1のフラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SET LONG 40000
SELECT XMLTYPE(SDO_UTIL.TO_GML311GEOMETRY(
  SDO_GEOM.SDO_ARC_DENSIFY(c.shape, m.diminfo, 'arc_tolerance=0.05')))
    AS Gml311Geometry FROM cola_markets c, user_sdo_geom_metadata m 
    WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
    AND c.name = 'cola_d';

GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">             
  <gml:exterior>                                                                
    <gml:LinearRing>                                                            
      <gml:posList srsDimension="2">8.0 7.0 8.76536686473018 7.15224093497743 9.
4142135623731 7.58578643762691 9.84775906502257 8.23463313526982 10.0 9.0 9.8477
5906502257 9.76536686473018 9.4142135623731 10.4142135623731 8.76536686473018 10
.8477590650226 8.0 11.0 7.23463313526982 10.8477590650226 6.58578643762691 10.41
42135623731 6.15224093497743 9.76536686473018 6.0 9.0 6.15224093497743 8.2346331
3526982 6.58578643762691 7.5857864376269 7.23463313526982 7.15224093497743 8.0 7
.0 </gml:posList>                                                               
    </gml:LinearRing>                                                           
  </gml:exterior>                                                               
</gml:Polygon>

次の例では、LRSジオメトリを標準ジオメトリに変換して、そのジオメトリのGMLバージョン3.1.1のフラグメントを戻します。(例では、「LRSファンクションの例」の定義およびデータを使用しています。)

SET LONG 40000
-- Convert LRS grometry to standard geometry before using TO_GML311GEOMETRY.
SELECT XMLTYPE(SDO_UTIL.TO_GML311GEOMETRY(
  SDO_LRS.CONVERT_TO_STD_GEOM(route_geometry)))
  AS Gml311Geometry FROM lrs_routes a WHERE a.route_id = 1;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Curve srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">               
  <gml:segments>                                                                
    <gml:LineStringSegment>                                                     
      <gml:posList srsDimension="2">2.0 2.0 2.0 4.0 8.0 4.0 12.0 4.0 12.0 10.0 8
.0 10.0 5.0 14.0 </gml:posList>                                                 
    </gml:LineStringSegment>                                                    
  </gml:segments>                                                               
</gml:Curve>

次の例では、様々なジオメトリ・タイプのGMLバージョン3.1.1のフラグメントを戻します。

-- Point geometry with coordinates in SDO_ORDINATES. Note the
--    coordinates in the GML are (10.0 10.0) and the values in the
--    SDO_POINT field are discarded.
SELECT TO_CHAR(
  SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2001, 8307,
    sdo_point_type(-80, 70, null),
    sdo_elem_info_array(1,1,1), sdo_ordinate_array(10, 10)))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Point srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:posLis
t srsDimension="2">10.0 10.0 </gml:posList></gml:Point>                         
                                                                                
 
-- Multipolygon
SET LONG 40000
SELECT SDO_UTIL.TO_GML311GEOMETRY(
  sdo_geometry(2007, 8307, null,
   sdo_elem_info_array(1,1003,1, 13,1003,1, 23,1003,3),
   sdo_ordinate_array(10.10,10.20, 20.50,20.10, 30.30,30.30, 40.10,40.10,
     30.50, 30.20, 10.10, 10.20,
     5,5, 5,6, 6,6, 6,5, 5,5, 7,7, 8,8 ))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:MultiSurface srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml
:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimens
ion="2">10.1 10.2 20.5 20.1 30.3 30.3 40.1 40.1 30.5 30.2 10.1 10.2 </gml:posLis
t></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surface
Member><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">
5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gml:posList></gml:LinearRing></gml:ext
erior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon><gml:ext
erior><gml:LinearRing><gml:posList srsDimension="2">7.0 7.0 8.0 7.0 8.0 8.0 7.0 
8.0 7.0 7.0 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:su
rfaceMember></gml:MultiSurface>                                                 
                                                                                
SET LONG 80
-- Rectangle (geodetic)
SELECT TO_CHAR(
  SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 8307, null,
   sdo_elem_info_array(1,1003,3),
    sdo_ordinate_array(10.10,10.10, 20.10,20.10 )))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:exte
rior><gml:LinearRing><gml:posList srsDimension="2">10.1 10.1 20.1 10.1 20.1 20.1
 10.1 20.1 10.1 10.1 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon
>

-- Polygon with holes
SELECT TO_CHAR(
  SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 262152, null,
   sdo_elem_info_array(1,1003,3, 5, 2003, 1, 13, 2003, 1),
   sdo_ordinate_array(10.10,10.20, 40.50, 41.10, 30.30, 30.30, 30.30,
     40.10, 40.10, 40.10, 30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml"><gml:ex
terior><gml:LinearRing><gml:posList srsDimension="2">10.1 10.2 40.5 10.2 40.5 41
.1 10.1 41.1 10.1 10.2 </gml:posList></gml:LinearRing></gml:exterior><gml:interi
or><gml:LinearRing><gml:posList srsDimension="2">30.3 30.3 30.3 40.1 40.1 40.1 3
0.3 30.3 </gml:posList></gml:LinearRing></gml:interior><gml:interior><gml:Linear
Ring><gml:posList srsDimension="2">5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gml
:posList></gml:LinearRing></gml:interior></gml:Polygon>                         
                                                                                
 
-- Creating an XMLTYPE from the GML fragment. Also useful for "pretty
--  printing" the GML output.
SET LONG 40000
SELECT XMLTYPE(
  SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 262152, null,
   sdo_elem_info_array(1,1003,1, 11, 2003, 1, 21, 2003, 1),
   sdo_ordinate_array(10.10,10.20, 40.50,10.2, 40.5,41.10, 10.1,41.1,
     10.10, 10.20, 30.30,30.30, 30.30, 40.10, 40.10, 40.10, 40.10, 30.30,
     30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml">       
  <gml:exterior>                                                                
    <gml:LinearRing>                                                            
      <gml:posList srsDimension="2">10.1 10.2 40.5 10.2 40.5 41.1 10.1 41.1 10.1
 10.2 </gml:posList>                                                            
    </gml:LinearRing>                                                           
  </gml:exterior>                                                               
  <gml:interior>                                                                
    <gml:LinearRing>                                                            
      <gml:posList srsDimension="2">30.3 30.3 30.3 40.1 40.1 40.1 40.1 30.3 30.3
 30.3 </gml:posList>                                                            
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
    </gml:LinearRing>                                                           
  </gml:interior>                                                               
  <gml:interior>                                                                
    <gml:LinearRing>                                                            
      <gml:posList srsDimension="2">5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gm
l:posList>                                                                      
    </gml:LinearRing>                                                           
  </gml:interior>                                                               
</gml:Polygon>                                                                  

関連トピック

SDO_UTIL.TO_GMLGEOMETRY

35.49 SDO_UTIL.TO_GMLGEOMETRY

構文

SDO_UTIL.TO_GMLGEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

または

SDO_UTIL.TO_GML311GEOMETRY(
     geometry   IN SDO_GEOMETRY, 
     coordOrder IN NUMBER 
     ) RETURN CLOB;

説明

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatial and Graphジオメトリ・オブジェクトをGeography Markup Language (GML 2.0)フラグメントに変換します。

パラメータ

geometry

GMLフラグメントを戻すジオメトリを指定します。

coordOrder

(Oracleで使用するために予約されています。)

使用上のノート

ノート:

SDO_UTIL.TO_GMLGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

このファンクションは、Open GIS実装仕様に定義されたいくつかのGMLジオメトリ・タイプに基づいて、入力ジオメトリをGMLフラグメントに変換します。

ポリゴンの定義には、Oracle9i以降のリリースのSpatial and Graphの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(ETYPE=1003)、次に0 (ゼロ)個以上の内側の境界要素が格納されます(ETYPE=2003)。穴のあるポリゴンでは、外側の境界をSDO_ORDINATES定義によって先に格納し、次に内側の境界の座標を格納する必要があります。

LRSジオメトリは、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_LRS.CONVERT_TO_STD_GEOMファンクションまたはSDO_LRS.CONVERT_TO_STD_LAYERファンクションを使用して)標準ジオメトリに変換しておく必要があります。(CONVERT_TO_STD_GEOMファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

円弧または円は、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用して)稠密化しておくか、または(SDO_GEOM.SDO_BUFFERファンクションを使用して)ポリゴンとして表現しておく必要があります。(SDO_ARC_DENSIFYファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

ラベル点は廃棄されます。したがって、ジオメトリがSDO_POINT、SDO_ELEM_INFOおよびSDO_ORDINATESフィールドに値を持つ場合、SDO_POINTはGMLフラグメントに出力されません。

SDO_SRID値は、srsName="SDO:<srid>"の形式で出力されます。たとえば、"SDO:8307"はSDO_SRID値が8307であることを示し、"SDO:"はSDO_SRID値がNULLであることを示します。SDO_SRID値の妥当性または一貫性チェックは行われません。たとえば、値がMDSYS.CS_SRS表に存在するかどうか、またはUSER_SDO_GEOM_METADATAビューのレイヤーのSRID値と競合するかどうかの確認は行われません。

NLS_NUMERIC_CHARACTERS設定で小数点文字に',' (カンマ)が指定されている場合でも、座標は常に、<coordinates>タグ、decimal='.'cs=',' (座標セパレータにカンマ)、およびts=' ' (組セパレータに空白)を使用して出力されます。

GML出力の形式は整えられないため、タグの改行またはインデントは行われません。SQL*Plusで戻されるCLOBの内容を確認するには、TO_CHAR()ファンクションを使用するか、またはSQL*PlusパラメータのLONGを適切な値に設定してください(SET LONG 40000など)。形式を整えてGMLを出力するか、またはSQLXやOracle XML DBファンクション(XMLELEMENTなど)でTO_GMLGEOMETRYの戻り値を使用するには、XMLTYPE (clobval CLOB)コンストラクタを使用してください。

次の例では、COLA_MARKETS表のcola_bジオメトリのGMLフラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Convert cola_b geometry to GML fragment.
SELECT TO_CHAR(SDO_UTIL.TO_GMLGEOMETRY(shape)) AS GmlGeometry 
  FROM COLA_MARKETS c WHERE c.name = 'cola_b';

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml"><gml:outerBou
ndaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">5,1 8,1 8,6 5
,7 5,1 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>

次の例では、COLA_MARKETS表のcola_dジオメトリの円弧を稠密化したGMLフラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SET LONG 40000
SELECT XMLTYPE(SDO_UTIL.TO_GMLGEOMETRY(
  SDO_GEOM.SDO_ARC_DENSIFY(c.shape, m.diminfo, 'arc_tolerance=0.05')))
    AS GmlGeometry FROM cola_markets c, user_sdo_geom_metadata m 
    WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
    AND c.name = 'cola_d';

GMLGEOMETRY                                                                     
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml"><gml:outerBou
ndaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">8,7 8.7653668
6473018,7.15224093497743 9.4142135623731,7.58578643762691 9.84775906502257,8.234
63313526982 10,9 9.84775906502257,9.76536686473018 9.4142135623731,10.4142135623
731 8.76536686473018,10.8477590650226 8,11 7.23463313526982,10.8477590650226 6.5
8578643762691,10.4142135623731 6.15224093497743,9.76536686473018 6,9 6.152240934
97743,8.23463313526982 6.58578643762691,7.5857864376269 7.23463313526982,7.15224
093497743 8,7 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Pol
ygon>

次の例では、LRSジオメトリを標準ジオメトリに変換して、そのジオメトリのGMLフラグメントを戻します。(例では、「LRSファンクションの例」の定義およびデータを使用しています。)

SET LONG 40000
-- Convert LRS geometry to standard geometry before using TO_GMLGEOMETRY.
SELECT XMLTYPE(SDO_UTIL.TO_GMLGEOMETRY(
  SDO_LRS.CONVERT_TO_STD_GEOM(route_geometry)))
  AS GmlGeometry FROM lrs_routes a WHERE a.route_id = 1;

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:LineString srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">          
  <gml:coordinates decimal="." cs="," ts=" ">2,2 2,4 8,4 12,4 12,10 8,10 5,14 </
gml:coordinates>                                                                
</gml:LineString>

次の例では、様々なジオメトリ・タイプのGMLフラグメントを戻します。

-- Point geometry with coordinates in SDO_ORDINATES. Note the
-- coordinates in the GML are (10,10) and the values in the
-- SDO_POINT field are discarded.
SELECT TO_CHAR(
  SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry(2001, 8307,
    sdo_point_type(-80, 70, null),
    sdo_elem_info_array(1,1,1), sdo_ordinate_array(10, 10)))
)
AS GmlGeometry FROM DUAL;

GMLGEOMETRY                                                                     
--------------------------------------------------------------------------------
<gml:Point srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:coordi
nates decimal="." cs="," ts=" ">10,10 </gml:coordinates></gml:Point>            
                 

-- Multipolygon
SET LONG 40000
SELECT SDO_UTIL.TO_GMLGEOMETRY(
  sdo_geometry(2007, 8307, null,
    sdo_elem_info_array(1,1003,1, 13,1003,1, 23,1003,3),
    sdo_ordinate_array(10.10,10.20, 20.50,20.10, 30.30,30.30, 40.10,40.10,
      30.50, 30.20, 10.10, 10.20,
      5,5, 5,6, 6,6, 6,5, 5,5, 7,7, 8,8 ))
 )
 AS GmlGeometry FROM DUAL;
 
GMLGEOMETRY                                                                     
--------------------------------------------------------------------------------
<gml:MultiPolygon srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml
:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinate
s decimal="." cs="," ts=" ">10.1,10.2 20.5,20.1 30.3,30.3 40.1,40.1 30.5,30.2 10
.1,10.2 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon><
/gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:Lin
earRing><gml:coordinates decimal="." cs="," ts=" ">5.0,5.0 5.0,6.0 6.0,6.0 6.0,5
.0 5.0,5.0 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygo
n></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:
LinearRing><gml:coordinates decimal="." cs="," ts=" ">7.0,7.0 8.0,7.0 8.0,8.0 7.
0,8.0 7.0,7.0 </gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Pol
ygon></gml:polygonMember></gml:MultiPolygon>                                    

SQL> SET LONG 80

-- Rectangle (geodetic)
SELECT TO_CHAR(
  SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry(2003, 8307, null,
    sdo_elem_info_array(1,1003,3),
    sdo_ordinate_array(10.10,10.10, 20.10,20.10 )))
) 
AS GmlGeometry FROM DUAL;

GMLGEOMETRY                                                                     
--------------------------------------------------------------------------------
<gml:Box srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:coordina
tes decimal="." cs="," ts=" ">10.1,10.1 20.1,20.1 </gml:coordinates></gml:Box>  
                                                                                

-- Polygon with holes
SELECT TO_CHAR(
  SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry(2003, 262152, null,
    sdo_elem_info_array(1,1003,3, 5, 2003, 1, 13, 2003, 1),
    sdo_ordinate_array(10.10,10.20, 40.50, 41.10, 30.30, 30.30, 30.30,
      40.10, 40.10, 40.10, 30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS GmlGeometry FROM DUAL;

GMLGEOMETRY                                                                     
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml"><gml:ou
terBoundaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">10.1,10
.2, 40.5,10.2, 40.5,41.1, 10.1,41.1, 10.1,10.2 </gml:coordinates></gml:LinearRin
g></gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates de
cimal="." cs="," ts=" ">30.3,30.3 30.3,40.1 40.1,40.1 30.3,30.3 </gml:coordinate
s></gml:LinearRing></gml:innerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><g
ml:coordinates decimal="." cs="," ts=" ">5,5 5,6 6,6 6,5 5,5 </gml:coordinates><
/gml:LinearRing></gml:innerBoundaryIs></gml:Polygon>                            
                                                                                

-- Creating an XMLTYPE from the GML fragment. Also useful for "pretty
-- printing" the GML output.
SET LONG 40000
SELECT XMLTYPE(
  SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry(2003, 262152, null,
    sdo_elem_info_array(1,1003,1, 11, 2003, 1, 21, 2003, 1),
    sdo_ordinate_array(10.10,10.20, 40.50,10.2, 40.5,41.10, 10.1,41.1,
      10.10, 10.20, 30.30,30.30, 30.30, 40.10, 40.10, 40.10, 40.10, 30.30,
      30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS GmlGeometry FROM DUAL;

GMLGEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml"><gml:ou
terBoundaryIs><gml:LinearRing><gml:coordinates decimal="." cs="," ts=" ">10.1,10
.2 40.5,10.2 40.5,41.1 10.1,41.1 10.1,10.2 </gml:coordinates></gml:LinearRing></
gml:outerBoundaryIs><gml:innerBoundaryIs><gml:LinearRing><gml:coordinates decima
l="." cs="," ts=" ">30.3,30.3 30.3,40.1 40.1,40.1 40.1,30.3 30.3,30.3 </gml:coor
dinates></gml:LinearRing></gml:innerBoundaryIs><gml:innerBoundaryIs><gml:LinearR
ing><gml:coordinates decimal="." cs="," ts=" ">5,5 5,6 6,6 6,5 5,5 </gml:coordin
ates></gml:LinearRing></gml:innerBoundaryIs></gml:Polygon> 

次の例では、TO_GMLGEOMETRYファンクションと、Oracle XML DB XMLTYPEデータ型、XMLELEMENTファンクションおよびXMLFORESTファンクションを併用します。

SELECT xmlelement("State", xmlattributes(
  'http://www.opengis.net/gml' as "xmlns:gml"),
  xmlforest(state as "Name", totpop as "Population",
  xmltype(sdo_util.to_gmlgeometry(geom)) as "gml:geometryProperty"))
  AS theXMLElements FROM states WHERE state_abrv in ('DE', 'UT');

THEXMLELEMENTS
--------------------------------------------------------------------------------
<State xmlns:gml="http://www.opengis.net/gml">
  <Name>Delaware</Name>
  <Population>666168</Population>
  <gml:geometryProperty>
    <gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">
      <gml:outerBoundaryIs>
        <gml:LinearRing>
          <gml:coordinates decimal="." cs="," ts=" ">-75.788704,39.721699 -75.78
8704,39.6479 -75.767014,39.377106 -75.76033,39.296497 -75.756294,39.24585 -75.74
8016,39.143196 -75.722961,38.829895 -75.707695,38.635166 -75.701912,38.560619 -7
5.693871,38.460011 -75.500336,38.454002 -75.341614,38.451855 -75.049339,38.45165
3 -75.053841,38.538429 -75.06015,38.605465 -75.063263,38.611275 -75.065308,38.62
949 -75.065887,38.660919 -75.078697,38.732403 -75.082527,38.772045 -75.091667,38
.801208 -75.094185,38.803699 -75.097572,38.802986 -75.094116,38.793579 -75.09926
6,38.78756 -75.123619,38.781784 -75.137962,38.782703 -75.18692,38.803772 -75.215
019,38.831547 -75.23735,38.849014 -75.260498,38.875 -75.305908,38.914673 -75.316
399,38.930309 -75.317284,38.93676 -75.312851,38.945576 -75.312859,38.945618 -75.
31205,38.967804 -75.31778,38.986012 -75.341431,39.021233 -75.369606,39.041359 -7
5.389229,39.051422 -75.40181,39.06702 -75.401306,39.097713 -75.411369,39.148029
-75.407845,39.175201 -75.396271,39.187778 -75.39225,39.203377 -75.40181,39.23104
9 -75.402817,39.253189 -75.409355,39.264759 -75.434006,39.290424 -75.439041,39.3
13065 -75.453125,39.317093 -75.457657,39.326653 -75.469231,39.330677 -75.486336,
39.341743 -75.494888,39.354324 -75.504448,39.357346 -75.51284,39.366291 -75.5129
24,39.366482 -75.523773,39.392052 -75.538651,39.415707 -75.56749,39.436436 -75.5
9137,39.463696 -75.592941,39.471806 -75.590019,39.488026 -75.587311,39.496136 -7
5.5774,39.508076 -75.554192,39.506947 -75.528442,39.498005 -75.530373,39.510303
-75.527145,39.531326 -75.52803,39.535168 -75.53437,39.540592 -75.519386,39.55528
6 -75.512291,39.567505 -75.515587,39.580639 -75.528046,39.584 -75.538269,39.5935
67 -75.554016,39.601727 -75.560143,39.622578 -75.556602,39.6348 -75.549599,39.63
7699 -75.542397,39.645901 -75.535507,39.647099 -75.514999,39.668499 -75.507523,3
9.69685 -75.496597,39.701302 -75.488914,39.714722 -75.477997,39.714901 -75.47550
2,39.733501 -75.467972,39.746975 -75.463707,39.761101 -75.448494,39.773857 -75.4
38301,39.783298 -75.405701,39.796101 -75.415405,39.801678 -75.454102,39.820202 -
75.499199,39.833199 -75.539703,39.8381 -75.5802,39.838417 -75.594017,39.837345 -
75.596107,39.837044 -75.639488,39.82893 -75.680145,39.813839 -75.71096,39.796352
 -75.739716,39.772881 -75.760689,39.74712 -75.774101,39.721699 -75.788704,39.721
699 </gml:coordinates>
        </gml:LinearRing>
      </gml:outerBoundaryIs>
    </gml:Polygon>
  </gml:geometryProperty>
</State>

<State xmlns:gml="http://www.opengis.net/gml">
  <Name>Utah</Name>
  <Population>1722850</Population>
  <gml:geometryProperty>
    <gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">
      <gml:outerBoundaryIs>
        <gml:LinearRing>
          <gml:coordinates decimal="." cs="," ts=" ">-114.040871,41.993805 -114.
038803,41.884899 -114.041306,41 -114.04586,40.116997 -114.046295,39.906101 -114.
046898,39.542801 -114.049026,38.67741 -114.049339,38.572968 -114.049095,38.14864
 -114.0476,37.80946 -114.05098,37.746284 -114.051666,37.604805 -114.052025,37.10
3989 -114.049797,37.000423 -113.484375,37 -112.898598,37.000401 -112.539604,37.0
00683 -112,37.000977 -111.412048,37.001514 -111.133018,37.00079 -110.75,37.00320
1 -110.5,37.004265 -110.469505,36.998001 -110,36.997967 -109.044571,36.999088 -1
09.045143,37.375 -109.042824,37.484692 -109.040848,37.881176 -109.041405,38.1530
27 -109.041107,38.1647 -109.059402,38.275501 -109.059296,38.5 -109.058868,38.719
906 -109.051765,39 -109.050095,39.366699 -109.050697,39.4977 -109.050499,39.6605
 -109.050156,40.222694 -109.047577,40.653641 -109.0494,41.000702 -109.2313,41.00
2102 -109.534233,40.998184 -110,40.997398 -110.047768,40.997696 -110.5,40.994801
 -111.045982,40.998013 -111.045815,41.251774 -111.045097,41.579899 -111.045944,4
2.001633 -111.506493,41.999588 -112.108742,41.997677 -112.16317,41.996784 -112.1
72562,41.996643 -112.192184,42.001244 -113,41.998314 -113.875,41.988091 -114.040
871,41.993805 </gml:coordinates>
        </gml:LinearRing>
      </gml:outerBoundaryIs>
    </gml:Polygon>
  </gml:geometryProperty>
</State>

関連トピック

SDO_UTIL.TO_GML311GEOMETRY

35.50 SDO_UTIL.TO_JSON

構文

SDO_UTIL.TO_JSON(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

SDO_GEOMETRYオブジェクトをCLOB形式のJSONオブジェクトに変換します。

パラメータ

geometry

JSONオブジェクトに変換する、SDO_GEOMETRY形式のジオメトリ。

使用上のノート

Oracle Databaseに格納されているJSONデータの使用の詳細は、『Oracle Database JSON開発者ガイド』を参照してください。

Spatial and GraphでのJSONのサポートの詳細は、「Oracle Spatial and GraphでのJSONおよびGeoJSONのサポート」を参照してください。

SDO_UTIL.TO_JSON_VARCHARファンクション(VARCHAR2の結果を戻す)の実行速度は、このファンクションより速いです。ただし、VARCHAR2の結果を戻すため、非常に小さいジオメトリでしか使用できません。4000バイト超(またはデータベース・パラメータMAX_STRING_SIZEがEXTENDEDに設定されている場合は、32767バイト)のJSONを生成するジオメトリは、切り捨てられた無効なJSONオブジェクトとなります。

JSON形式のジオメトリをSDO_GEOMETRYオブジェクトに変換するには、SDO_UTIL.FROM_JSONファンクションを使用します。

次の例では、JSON形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  cola_b_geom   SDO_GEOMETRY;
  returned_geom SDO_GEOMETRY;
  returned_json CLOB;
BEGIN
  -- Populate geometry variable with cola market cols_b shape.
  SELECT c.shape into cola_b_geom FROM cola_markets c
  WHERE c.name = 'cola_b';
  -- From geometry to JSON
  returned_json := SDO_UTIL.TO_JSON(cola_b_geom);

  -- From JSON to geometry
  returned_geom := SDO_UTIL.FROM_JSON(returned_json);
END;
/

次の例では、指定されたジオメトリを表すJSONオブジェクトを示します。(この場合、ジオメトリ定義は、COLA_MARKETS表のcola_bジオメトリ(「空間データの挿入、索引付けおよび問合せの例」を参照)を反映します。)

SELECT SDO_UTIL.TO_JSON(
  SDO_GEOMETRY(2003, NULL, NULL, 
    SDO_ELEM_INFO_ARRAY(1, 1003, 1), 
    SDO_ORDINATE_ARRAY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))) JSON 
FROM DUAL;  
JSON
------
{"polygon": {"boundary": [{"line": {"datapoints": [[5.0, 1.0], [8.0, 1.0], [8.0, 6.0], [5.0, 7.0], [5.0, 1.0]]}}]}}

35.51 SDO_UTIL.TO_JSON_VARCHAR

構文

SDO_UTIL.TO_JSON_VARCHAR(
     geometry  IN SDO_GEOMETRY 
     ) RETURN VARCHAR2;

説明

SDO_GEOMETRYオブジェクトをVARCHAR2形式のJSONオブジェクトに変換します。

パラメータ

geometry

JSONオブジェクトに変換する、SDO_GEOMETRY形式のジオメトリ。

使用上のノート

Oracle Databaseに格納されているJSONデータの使用の詳細は、『Oracle Database JSON開発者ガイド』を参照してください。

Spatial and GraphでのJSONのサポートの詳細は、「Oracle Spatial and GraphでのJSONおよびGeoJSONのサポート」を参照してください。

このファンクション(VARCHAR2の結果を戻す)の実行速度は、SDO_UTIL.TO_JSON (CLOBの結果を戻す)より速いです。ただし、非常に小さいジオメトリでしか使用できません。4000バイト超(またはデータベース・パラメータMAX_STRING_SIZEがEXTENDEDに設定されている場合は、32767バイト)のJSONを生成するジオメトリは、切り捨てられた無効なJSONオブジェクトとなります。

JSON形式のジオメトリをSDO_GEOMETRYオブジェクトに変換するには、SDO_UTIL.FROM_JSONファンクションを使用します。

次の例では、JSON形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  cola_b_geom   SDO_GEOMETRY;
  returned_geom SDO_GEOMETRY;
  returned_json VARCHAR2(4000);
BEGIN
  -- Populate geometry variable with cola market cols_b shape.
  SELECT c.shape into cola_b_geom FROM cola_markets c
  WHERE c.name = 'cola_b';
  -- From geometry to JSON
  returned_json := SDO_UTIL.TO_JSON_VARCHAR(cola_b_geom);

  -- From JSON to geometry
  returned_geom := SDO_UTIL.FROM_JSON(returned_json);
END;
/

次の例では、指定したジオメトリを表すGeoJSONオブジェクトを示します。(この場合、ジオメトリ定義は、COLA_MARKETS表のcola_bジオメトリ(「空間データの挿入、索引付けおよび問合せの例」を参照)を反映します。)

SELECT SDO_UTIL.TO_JSON_VARCHAR(
  SDO_GEOMETRY(2003, NULL, NULL, 
    SDO_ELEM_INFO_ARRAY(1, 1003, 1), 
    SDO_ORDINATE_ARRAY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1))) JSON 
FROM DUAL;  
JSON
------
{"polygon": {"boundary": [{"line": {"datapoints": [[5.0, 1.0], [8.0, 1.0], [8.0, 6.0], [5.0, 7.0], [5.0, 1.0]]}}]}}

35.52 SDO_UTIL.TO_KMLGEOMETRY

構文

SDO_UTIL.TO_KMLGEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

Spatial and Graphジオメトリ・オブジェクトをKML (Keyhole Markup Language)ドキュメントに変換します。

パラメータ

geometry

KMLドキュメントを戻すジオメトリを指定します。

使用上のノート

ノート:

SDO_UTIL.TO_KMLGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

ポリゴンの定義には、Oracle9i以降のリリースのSpatial and Graphの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(ETYPE=1003)、次に0 (ゼロ)個以上の内側の境界要素が格納されます(ETYPE=2003)。穴のあるポリゴンでは、外側の境界をSDO_ORDINATES定義によって先に格納し、次に内側の境界の座標を格納する必要があります。

LRSジオメトリは、TO_KMLGEOMETRYファンクションに渡す前に、(SDO_LRS.CONVERT_TO_STD_GEOMファンクションまたはSDO_LRS.CONVERT_TO_STD_LAYERファンクションを使用して)標準ジオメトリに変換しておく必要があります。

円弧または円は、TO_KMLGEOMETRYファンクションに渡す前に、(SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用して)稠密化しておくか、または(SDO_GEOM.SDO_BUFFERファンクションを使用して)ポリゴンとして表現しておく必要があります。

ラベル点は廃棄されます。したがって、ジオメトリがSDO_POINT、SDO_ELEM_INFOおよびSDO_ORDINATESフィールドに値を持つ場合、SDO_POINTはKMLドキュメントに出力されません。

KML 2.1ではソリッドがサポートされていないため、ソリッド・ジオメトリは、KML MultiGeometryオブジェクトに変換されます。その後、MultiGeometryに対してSDO_UTIL.FROM_KMLGEOMETRYファンクションを使用した場合、結果としてOracle Spatial and Graphソリッド・ジオメトリは生成されません(つまり、SDO_GTYPE値は、SOLIDまたはMULTISOLIDのジオメトリ・タイプを反映しません)。

KML出力の形式は整えられないため、タグの改行またはインデントは行われません。SQL*Plusで戻されるCLOBの内容を確認するには、TO_CHAR()ファンクションを使用するか、またはSQL*PlusパラメータのLONGを適切な値に設定してください(SET LONG 2000など)。形式を整えてGMLを出力するか、またはSQLXやOracle XML DBファンクション(XMLELEMENTなど)でTO_KMLGEOMETRYの戻り値を使用するには、XMLTYPE (clobval CLOB)コンストラクタを使用してください。

次の例では、KML形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_cジオメトリについて、その定義およびデータを使用しています。)

-- Convert cola_c geometry to a KML document; convert that result to
-- a spatial geometry.
set long 2000;
DECLARE
  kmlgeom CLOB;
  val_result VARCHAR2(5);
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_c';
 
-- To KML geometry
kmlgeom := SDO_UTIL.TO_KMLGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To KML geometry result = ' || TO_CHAR(kmlgeom));
 
-- From KML geometry
geom_result := SDO_UTIL.FROM_KMLGEOMETRY(kmlgeom);
-- Validate the returned geometry.
val_result := SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(geom_result, 0.005);
DBMS_OUTPUT.PUT_LINE('Validation result = ' || val_result);
 
END;
/
To KML geometry result =
<Polygon><extrude>0</extrude><tessellate>0</tessellate><altitudeMode>relativeToG
round</altitudeMode><outerBoundaryIs><LinearRing><coordinates>3.0,3.0 6.0,3.0
6.0,5.0 4.0,5.0 3.0,3.0 </coordinates></LinearRing></outerBoundaryIs></Polygon>
Validation result = TRUE

関連トピック

35.53 SDO_UTIL.TO_WKBGEOMETRY

構文

SDO_UTIL.TO_WKBGEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN BLOB;

説明

Spatial and Graphジオメトリ・オブジェクトをwell-knownバイナリ(WKB)形式に変換します。

パラメータ

geometry

WKB形式に変換するSDO_GEOMETRYオブジェクトを指定します。

使用上のノート

入力ジオメトリは、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownバイナリ(WKB)形式に変換されます。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

WKB形式のジオメトリをSDO_GEOMETRYオブジェクトに変換するには、SDO_UTIL.FROM_WKBGEOMETRYファンクションを使用します。

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  wkbgeom BLOB;
  wktgeom CLOB;
  val_result VARCHAR2(5);
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';
 
-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));
 
-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);
 
-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);
 
END;/
 
To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE                                                    
WKT validation result = TRUE

35.54 SDO_UTIL.TO_WKTGEOMETRY

構文

SDO_UTIL.TO_WKTGEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

Spatial and Graphジオメトリ・オブジェクトをwell-knownテキスト(WKT)形式に変換します。

パラメータ

geometry

WKT形式に変換するSDO_GEOMETRYオブジェクトを指定します。

使用上のノート

入力ジオメトリは、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownテキスト(WKT)形式に変換されます。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

WKT形式のジオメトリをSDO_GEOMETRYオブジェクトに変換するには、SDO_UTIL.FROM_WKTGEOMETRYファンクションを使用します。

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  wkbgeom BLOB;
  wktgeom CLOB;
  val_result VARCHAR2(5);
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';
 
-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));
 
-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);
 
-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);
 
END;/
 
To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE                                                    
WKT validation result = TRUE

35.55 SDO_UTIL.VALIDATE_3DTHEME

構文

SDO_UTIL.VALIDATE_3DTHEME(
     theme_name  IN VARCHAR2 
     ) RETURN VARCHAR2;

説明

3Dテーマを検証します。

パラメータ

theme_name

3Dテーマの名前を指定します。この値は、USER_SDO_3DTHEMESビューまたはALL_SDO_3DTHEMESビュー(「xxx_SDO_3DTHEMESビュー」を参照)の値である必要があります。

使用上のノート

ノート:

SDO_UTIL.VALIDATE_3DTHEMEファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、テーマのタイプに適した複数の妥当性チェックを実行します。チェックごとに、文字列TRUE (問題がない場合)または問題の簡単な説明を戻します。

指定したテーマが定義されていない場合、出力はその名前の付いたテーマがないことを示します。

次の例では、USER_SDO_3DTHEMES表のテーマを検証します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
    name || ': ' ||
    sdo_util.validate_3dtheme(name) "Theme validity"
  FROM user_sdo_3dthemes
  ORDER BY name;
 
Theme validity
---------------------------------------------------------------------------------
Test PC Hawaii Theme 4326: TRUE
Test PC Hawaii Theme 4326 A: No Theme-related Metadata
Test PC Hawaii Theme 4326 A2: XML metadata for "Test PC Hawaii Theme 4326 A2" not well-formed
Test PC Hawaii Theme 4326 C1: SRID 0 not found
Test PC Hawaii Theme 4326 C2: No VERTICAL SRID 5758 allowed
Test PC Hawaii Theme 4326 D: THEME_COLUMN column and xml metadata do not match, regarding feature table column
Test PC Hawaii Theme 4326 D2: User "MDMETT"'s table "PCS_HAWAII_4326" has no column "PC3", according to USER_TAB_COLUMNS
.
 
Test PC Hawaii Theme 4326 D3: User "MDMETT" has no table "PCS_HAWAII_4326A", according to USER_TABLES.
Test PC Hawaii Theme 4326 D4: THEME_TYPE column and xml metadata do not match, regarding geometric feature type
Test PC Hawaii Theme 4326 D5: User "MDMETT"'s table "PCS_HAWAII_4326" has a column "PC" of type "SDO_PC", not "SDO_PC3",
 according to USER_TAB_COLUMNS.
 
Test PC Hawaii Theme 4326 E: Elevation not strictly monotonously rising from position 1 to 2 (value 123.2 >= 123.1)
Test PC Hawaii Theme 4326 E2: No elevation @color specified at position 2
Test PC Hawaii Theme 4326 E3: No @elevation specified at position 2
Test PC Hawaii Theme 4326 E4: Elevation @color at position 2 does not have hex format RRGGBB
Test PC Hawaii Theme 4326 E5: Elevation @color at position 2 does not have hex format RRGGBB (character 6)
 
15 rows selected.

35.56 SDO_UTIL.VALIDATE_SCENE

構文

SDO_UTIL.VALIDATE_SCENE(
     scene_name  IN VARCHAR2 
     ) RETURN VARCHAR2;

説明

3Dシーンを検証します。

パラメータ

scene_name

3Dシーンの名前を指定します。この値は、USER_SDO_SCENESビューまたはALL_SDO_SCENESビュー(「xxx_SDO_SCENESビュー」を参照)の値である必要があります。

使用上のノート

ノート:

SDO_UTIL.VALIDATE_SCENEファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、複数の妥当性チェックを実行します。チェックごとに、文字列TRUE (問題がない場合)または問題の簡単な説明を戻します。

指定したシーンが定義されていない場合、出力はその名前の付いたシーンがないことを示します。

次の例は、USER_SDO_SCENES表のシーンを検証します。(シーンがUSER_SDO_SCENES表に挿入済であることを想定します。)

SELECT
    name || ': ' ||
    sdo_util.validate_scene(name) "Scene validity"
  FROM user_sdo_scenes
  ORDER BY name;
 
Scene validity
---------------------------------------------------------------------------------
Test PC Hawaii Scene 4326: TRUE
Test PC Hawaii Scene 4326 A: No Scene-related Metadata
Test PC Hawaii Scene 4326 A2: XML metadata for "Test PC Hawaii Scene 4326 A2" not well-formed
Test PC Hawaii Scene 4326 B: Referenced theme "Test PC Hawaii Theme 4326 A": No Theme-related Metadata
Test PC Hawaii Scene 4326 C1: SRID 0 not found
Test PC Hawaii Scene 4326 C2: No VERTICAL SRID 5758 allowed
 
6 rows selected.

35.57 SDO_UTIL.VALIDATE_VIEWFRAME

構文

SDO_UTIL.VALIDATE_VIEWFRAME(
     viewframe_name  IN VARCHAR2 
     ) RETURN VARCHAR2;

説明

3Dビューフレームを検証します。

パラメータ

viewframe_name

3Dテーマの名前を指定します。この値は、USER_SDO_VIEWFRAMESビューまたはALL_SDO_VIEWFRAMESビュー(「xxx_SDO_VIEWFRAMESビュー」を参照)の値である必要があります。

使用上のノート

ノート:

SDO_UTIL.VALIDATE_VIEWFRAMEファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

このファンクションは、複数の妥当性チェックを実行します。チェックごとに、文字列TRUE (問題がない場合)または問題の簡単な説明を戻します。

指定したビューフレームが定義されていない場合、出力はその名前の付いたビューフレームがないことを示します。

次の例では、USER_SDO_3DTHEMES表のテーマを検証します。(テーマがUSER_SDO_3DTHEMES表に挿入済であることを想定します。)

SELECT
    name || ': ' ||
    sdo_util.validate_viewframe(name) "Viewframe validity"
  FROM user_sdo_viewframes
  ORDER BY name;
 
Viewframe validity
---------------------------------------------------------------------------------
Test PC Hawaii Viewpoint 4326: TRUE
Test PC Hawaii Viewpoint 4326 A: No Viewframe-related Metadata
Test PC Hawaii Viewpoint 4326 A2: XML metadata for "Test PC Hawaii Viewpoint 4326 A2" not well-formed
Test PC Hawaii Viewpoint 4326 B1: Referenced scene "Made up": No scene with name "Made up"
Test PC Hawaii Viewpoint 4326 B2: Referenced scene "Test PC Hawaii Scene 4326 B": Referenced theme "Test PC Hawaii Theme
 4326 A": No Theme-related Metadata
 
Test PC Hawaii Viewpoint 4326 B3: SCENE_NAME column and xml metadata do not match, regarding scene name
Test PC Hawaii Viewpoint 4326 C1: SRID 0 not found
Test PC Hawaii Viewpoint 4326 C2: No VERTICAL SRID 5758 allowed
 
8 rows selected.

35.58 SDO_UTIL.VALIDATE_WKBGEOMETRY

構文

SDO_UTIL.VALIDATE_WKBGEOMETRY(
     geometry  IN BLOB 
     ) RETURN VARCHAR2;

説明

標準well-knownバイナリ(WKB)形式の入力ジオメトリが有効かどうかを確認し、有効な場合は文字列TRUE、無効な場合は文字列FALSEを戻します。

パラメータ

geometry

有効かどうかを確認するWKB形式のジオメトリを指定します。

使用上のノート

ノート:

SDO_UTIL.VALIDATE_WKBGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリが有効であるためには、その形式が、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownバイナリ(WKB)形式であることが必要です。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

well-knownテキスト(WKT)形式のジオメトリが有効かどうかを確認するには、SDO_UTIL.VALIDATE_WKTGEOMETRYファンクションを使用します。

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  wkbgeom BLOB;
  wktgeom CLOB;
  val_result VARCHAR2(5);
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';
 
-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));
 
-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);
 
-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);
 
END;/
 
To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE                                                    
WKT validation result = TRUE

35.59 SDO_UTIL.VALIDATE_WKTGEOMETRY

構文

SDO_UTIL.VALIDATE_WKTGEOMETRY(
     geometry  IN CLOB 
     ) RETURN VARCHAR2;

または

SDO_UTIL.VALIDATE_WKTGEOMETRY(
     geometry  IN VARCHAR2 
     ) RETURN VARCHAR2;

説明

標準well-knownテキスト(WKT)形式のCLOB型またはVARCHAR2型の入力ジオメトリが有効かどうかを確認し、有効な場合は文字列TRUE、無効な場合は文字列FALSEを戻します。

パラメータ

geometry

有効かどうかを確認するWKT形式のジオメトリを指定します。

使用上のノート

ノート:

SDO_UTIL.VALIDATE_WKTGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリが有効であるためには、その形式が、Open Geospatial Consortiumおよび国際標準化機構(ISO)で定義されているwell-knownテキスト(WKT)形式であることが必要です。

このファンクションは、『ISO 13249-3, Information technology - Database languages - SQL Multimedia and Application Packages - Part 3: Spatial』のSQL Multimedia勧告を基にしています。

well-knownバイナリ(WKB)形式のジオメトリが有効かどうかを確認するには、SDO_UTIL.VALIDATE_WKBGEOMETRYファンクションを使用します。

次の例は、WKBおよびWKT形式への変換と逆変換を実行し、WKBおよびWKTジオメトリが有効かどうかを確認しています。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_bジオメトリについて、その定義およびデータを使用しています。)

DECLARE
  wkbgeom BLOB;
  wktgeom CLOB;
  val_result VARCHAR2(5);
  geom_result SDO_GEOMETRY;
  geom SDO_GEOMETRY;
BEGIN
SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_b';
 
-- To WBT/WKT geometry
wkbgeom := SDO_UTIL.TO_WKBGEOMETRY(geom);
wktgeom := SDO_UTIL.TO_WKTGEOMETRY(geom);
DBMS_OUTPUT.PUT_LINE('To WKT geometry result = ' || TO_CHAR(wktgeom));
 
-- From WBT/WKT geometry
geom_result := SDO_UTIL.FROM_WKBGEOMETRY(wkbgeom);
geom_result := SDO_UTIL.FROM_WKTGEOMETRY(wktgeom);
 
-- Validate WBT/WKT geometry
val_result := SDO_UTIL.VALIDATE_WKBGEOMETRY(wkbgeom);
DBMS_OUTPUT.PUT_LINE('WKB validation result = ' || val_result);
val_result := SDO_UTIL.VALIDATE_WKTGEOMETRY(wktgeom);
DBMS_OUTPUT.PUT_LINE('WKT validation result = ' || val_result);
 
END;/
 
To WKT geometry result = POLYGON ((5.0 1.0, 8.0 1.0, 8.0 6.0, 5.0 7.0, 5.0 1.0))
WKB validation result = TRUE                                                    
WKT validation result = TRUE