ヘッダーをスキップ
Oracle® Spatial開発者ガイド
11gリリース2 (11.2)
B72087-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

この章では、表32-1に示す空間ユーティリティ・サブプログラムについて説明します。

表32-1 空間ユーティリティ・サブプログラム

サブプログラム 説明

SDO_UTIL.AFFINETRANSFORMS


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

SDO_UTIL.APPEND


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

SDO_UTIL.BEARING_TILT_FOR_POINTS


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

SDO_UTIL.CIRCLE_POLYGON


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

SDO_UTIL.CONCAT_LINES


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

SDO_UTIL.CONVERT_UNIT


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

SDO_UTIL.ELLIPSE_POLYGON


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

SDO_UTIL.EXTRACT


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

SDO_UTIL.EXTRACT_ALL


2次元の入力ジオメトリのすべての要素およびサブ要素を、1つ以上のジオメトリの配列として戻します。

SDO_UTIL.EXTRACT3D


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

SDO_UTIL.EXTRUDE


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

SDO_UTIL.FROM_GML311GEOMETRY


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

SDO_UTIL.FROM_GMLGEOMETRY


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

SDO_UTIL.FROM_KMLGEOMETRY


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

SDO_UTIL.FROM_WKBGEOMETRY


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

SDO_UTIL.FROM_WKTGEOMETRY


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

SDO_UTIL.GETNUMELEM


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

SDO_UTIL.GETNUMVERTICES


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

SDO_UTIL.GETVERTICES


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

SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS


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

SDO_UTIL.INTERIOR_POINT


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

SDO_UTIL.POINT_AT_BEARING


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

SDO_UTIL.POLYGONTOLINE


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

SDO_UTIL.PREPARE_FOR_TTS


別のデータベースに転送する表領域を準備し、転送操作中に空間索引が保持されるようにします。

SDO_UTIL.RECTIFY_GEOMETRY


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

SDO_UTIL.REMOVE_DUPLICATE_VERTICES


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

SDO_UTIL.REVERSE_LINESTRING


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

SDO_UTIL.SIMPLIFY


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

SDO_UTIL.TO_GML311GEOMETRY


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

SDO_UTIL.TO_GMLGEOMETRY


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

SDO_UTIL.TO_KMLGEOMETRY


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

SDO_UTIL.TO_WKBGEOMETRY


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

SDO_UTIL.TO_WKTGEOMETRY


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

SDO_UTIL.VALIDATE_WKBGEOMETRY


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

SDO_UTIL.VALIDATE_WKTGEOMETRY


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


SDO_UTIL.AFFINETRANSFORMS

構文

SDO_UTIL.AFFINETRANSFORMS(

     geometry IN SDO_GEOMETRY,

     scaling IN VARCHAR2,

     tx IN NUMBER,

     ty IN NUMBER,

     ty IN NUMBER,

     scaling IN VARCHAR2,

     psc1 IN SDO_GEOMETRY

     sx IN NUMBER,

     sy IN NUMBER,

     sz IN NUMBER,

     rotation IN VARCHAR2,

     p1 IN SDO_GEOMETRY,

     line1 IN SDO_GEOMETRY,

     angle IN NUMBER,

     dir IN NUMBER,

     shearing IN VARCHAR2

     shxy IN NUMBER,

     shyx IN NUMBER,

     shxz IN NUMBER,

     shzx IN NUMBER,

     shyz IN NUMBER,

     shzy IN NUMBER,

     reflection IN VARCHAR2

     pref IN SDO_GEOMETRY,

     lineR IN SDO_GEOMETRY,

     dirR IN NUMBER,

     planeR IN VARCHAR2,

     n IN SDO_NUMBER_ARRAY,

     bigD IN SDO_NUMBER_ARRAY,

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

translation

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

tx

移動のためのX軸値を指定します。

ty

移動のためのY軸値を指定します。

tz

移動のためのZ軸値を指定します。

scaling

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

psc1

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

sx

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

sy

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

sz

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

rotation

文字列値がTRUEである場合は回転が実行され、文字列値がFALSEの場合は回転が実行されません。

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

p1

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

line1

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

angle

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

dir

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

shearing

文字列値がTRUEである場合はせん断が実行され、文字列値がFALSEの場合はせん断が実行されません。

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

shxy

Y軸方向に沿ってX座標値を基にせん断するための値を指定します。

shyx

X軸方向に沿ってY座標値を基にせん断するための値を指定します。

shxz

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

shzx

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

shyz

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

shzy

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

reflection

文字列値がTRUEである場合は反転が実行され、文字列値がFALSEの場合は反転が実行されません。

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

pref

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

lineR

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

dirR

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

planeR

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

n

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

bigD

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

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

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

使用上の注意

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

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

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

-- Polygon reflection in 2D about a specified line segment
SELECT SDO_UTIL.AFFINETRANSFORMS(
  geometry => MDSYS.SDO_GEOMETRY(2003, NULL, NULL, 
     MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
     MDSYS.SDO_ORDINATE_ARRAY(
       1.5,0,
       2.5,1,
       1.5,2,
       0.5,2,
       0.5,0,
       1.5,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 => MDSYS.SDO_GEOMETRY(2002,0,NULL, 
    MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),
    MDSYS.SDO_ORDINATE_ARRAY(2.5,0.0,2.5,2.0)), 
  dirR => -1, 
  planeR => 'FALSE', 
  n => NULL,   
  bigD => NULL
) FROM DUAL;

SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>MDSYS.SDO_GEOMETRY(2003,NULL,NULL,MDSYS.SDO_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3.5, 0, 2.5, 1, 3.5, 2, 4.5, 2, 4.5, 0, 3.5, 0))

次の例では、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))

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ファンクションを使用します(第24章を参照)。APPENDファンクションの方が、SDO_GEOM.SDO_UNIONファンクションよりも高速に実行されます。

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

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

次の例では、cola_aジオメトリおよびcola_cジオメトリを追加します。(例では、2.1項の定義およびデータを使用しています。)

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

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

許容差を指定します(1.5.5項を参照)。

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

SDO_UTIL.CIRCLE_POLYGON

構文

SDO_UTIL.CIRCLE_POLYGON(

     center_longitude IN NUMBER,

     center_latitude IN NUMBER,

     radius IN NUMBER,

     arc_tolerance IN NUMBER

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

center_longitude

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

center_latitude

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

radius

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

arc_tolerance

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

使用上の注意

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

次の例では、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))

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ファンクションを使用します(第25章を参照)。

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

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

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

SDO_AGGR_CONCAT_LINES空間集計ファンクション(第20章を参照)を使用すると、単一線または複数線の複数の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)) 

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表(6.8.2項を参照)、MDSYS.SDO_AREA_UNITS表(2.10項参照)またはMDSYS.SDO_DIST_UNITS表(2.10項を参照)の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 

関連項目

なし。

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

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パラメータ値に関連付けられます。(詳細は、第24章SDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。)

使用上の注意

このファンクションを使用すると、楕円が使用できない(Oracle Spatialの測地データで楕円が無効となる)場合に、指定された中心点の周囲に楕円状のポリゴンを作成できます。戻されるジオメトリの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))

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次元のジオメトリを指定する必要があります。

要素

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

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

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

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

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

使用上の注意

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

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

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

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

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

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

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

次の例では、cola_cジオメトリの1つ目(1つのみ)の要素を抽出します。(例では、2.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.2項例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)) 

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値を持つジオメトリ(2.2.1項を参照)は、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(ゼロ)の要素については、2.7.7項を参照してください。

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

次の例では、cola_bジオメトリからすべての要素を抽出します。(例では、2.1項の定義およびデータを使用しています。)

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.2項例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                                                                   
--------------------------------------------------------------------------------

関連項目

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番目のエッジを指定します。

使用上の注意

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

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

次の例では、指定した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))

関連項目

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

許容差を指定します(1.5.5項を参照)。

optional3dSrid

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

使用上の注意

入力ジオメトリは、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))

関連項目

なし。

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 VARCHAR2,

     srsNamespace IN VARCHAR2 DEFAULT NULL

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

srsNamespace

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

使用上の注意

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

次の例では、GMLバージョン3.1.1形式への変換と逆変換を示します。(例では、2.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.

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のジオメトリ・オブジェクトに変換します。

パラメータ

geometry

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

srsNamespace

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

使用上の注意

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

次の例では、GMLバージョン2.0形式への変換と逆変換を示します。(例では、2.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 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.

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ジオメトリ・オブジェクトに変換します。

パラメータ

geometry

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

使用上の注意

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

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

次の例では、KML形式への変換と逆変換を示します。(例では、2.1項の特に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

SDO_UTIL.FROM_WKBGEOMETRY

構文

SDO_UTIL.FROM_WKBGEOMETRY(

     geometry IN BLOB

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

使用上の注意

入力ジオメトリの形式は、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ジオメトリが有効かどうかを確認しています。(例では、2.1項の特に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

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ジオメトリ・オブジェクトに変換します。

パラメータ

geometry

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

使用上の注意

入力ジオメトリの形式は、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ジオメトリが有効かどうかを確認しています。(例では、2.1項の特に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

SDO_UTIL.GETNUMELEM

構文

SDO_UTIL.GETNUMELEM(

     geometry IN SDO_GEOMETRY

     ) RETURN NUMBER;

説明

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

パラメータ

geometry

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

使用上の注意

なし。

次の例では、COLA_MARKETS表のSHAPE列にある各ジオメトリの要素の数を戻します。(例では、2.1項の定義およびデータを使用しています。)

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 

SDO_UTIL.GETNUMVERTICES

構文

SDO_UTIL.GETNUMVERTICES(

     geometry IN SDO_GEOMETRY

     ) RETURN NUMBER;

説明

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

パラメータ

geometry

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

使用上の注意

なし。

次の例では、COLA_MARKETS表のSHAPE列にある各ジオメトリの頂点の数を戻します。(例では、2.1項の定義およびデータを使用しています。)

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 

SDO_UTIL.GETVERTICES

構文

SDO_UTIL.GETVERTICES(

     geometry IN SDO_GEOMETRY

     ) RETURN VERTEX_SET_TYPE;

説明

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

パラメータ

geometry

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

使用上の注意

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

CREATE TYPE vertex_set_type as TABLE OF vertex_type;

Oracle Spatialでは、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プロシージャ(第24章を参照)によってジオメトリが無効であると識別された場合は、GETVERTICESファンクションを使用して、頂点を表形式で参照できます。

次の例では、COLA_MARKETS表のSHAPE列にあるジオメトリの頂点のX座標、Y座標およびID値を戻します。(例では、2.1項の定義およびデータを使用しています。)

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.

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プロシージャをコールした場合、エンディアンの変換を実行する必要がないため、このプロシージャは何も実行しません。

関連項目

なし。

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値の詳細は、2.2.1項を参照。)

tol

許容差を指定します(1.5.5項を参照)。

使用上の注意

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

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

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

次の例では、cola_a上の内部の点であるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)

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

関連項目

なし。

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

SDO_UTIL.POLYGONTOLINE

構文

SDO_UTIL.POLYGONTOLINE(

     geometry IN SDO_GEOMETRY

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

使用上の注意

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

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

次の例では、cola_b (2.1項図2-1例2-1を参照)と同じジオメトリである入力ポリゴン・ジオメトリを、線ストリング・ジオメトリに変換します。戻されるジオメトリでは、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))

関連項目

なし。

SDO_UTIL.PREPARE_FOR_TTS

構文

SDO_UTIL.PREPARE_FOR_TTS(

     table_space IN VARCHAR2);

説明

(非推奨の機能。以前の使用方法は、「別のデータベースに転送する表領域を準備し、転送操作中に空間索引が保持されるようにします。」でした)

パラメータ

TABLE_SPACE

転送する表領域を指定します。空間表を含む表領域を指定する必要があります。パーティション化された表の場合、いずれかのパーティションの表領域を指定する必要があります。

使用上の注意

Oracle Database リリース11.2で有効なこのプロシージャは、非推奨となっています。トランスポータブル表領域のエクスポート操作を実行する前に、PREPARE_FOR_TTSプロシージャをコールする必要はありません。

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

なし。

SDO_UTIL.RECTIFY_GEOMETRY

構文

SDO_UTIL.RECTIFY_GEOMETRY(

     geometry IN SDO_GEOMETRY,

     tolerance IN NUMBER

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

tolerance

許容差を指定します(1.5.5項を参照)。

使用上の注意

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

  • 重複する頂点

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

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

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

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

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

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

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

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

SDO_UTIL.REMOVE_DUPLICATE_VERTICES

構文

SDO_UTIL.REMOVE_DUPLICATE_VERTICES

     geometry IN SDO_GEOMETRY,

     tolerance IN NUMBER

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

tolerance

許容差を指定します(1.5.5項を参照)。

使用上の注意

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

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

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

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

次の例では、cola_b(2.1項図2-1および例2-1を参照)と同じジオメトリである入力ジオメトリから、重複する頂点を削除します。ただし、この例で使用するジオメトリは、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))

関連項目

なし。

SDO_UTIL.REVERSE_LINESTRING

構文

SDO_UTIL.REVERSE_LINESTRING(

     geometry IN SDO_GEOMETRY

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

使用上の注意

入力ジオメトリのSDO_GTYPE値は2002である必要があるため、このファンクションを使用してLRSジオメトリを反転することはできません。LRSジオメトリを反転するには、SDO_LRS.REVERSE_GEOMETRYファンクションを使用します(第25章を参照)。

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

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

SDO_UTIL.SIMPLIFY

構文

SDO_UTIL.SIMPLIFY(

     geometry IN SDO_GEOMETRY,

     threshold IN NUMBER

     tolerance IN NUMBER DEFAULT 0.0000005

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

threshold

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

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

tolerance

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

使用上の注意

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

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

3次元以上のジオメトリにこのファンクションを使用する場合、最初の2次元のみが問合せ処理で使用され、戻されるジオメトリの最初の2次元のみが有効とみなされます。たとえば、戻されるLRSジオメトリのメジャー値が、そのジオメトリの実際のメジャーを反映しない場合があります。この場合、アプリケーションの要件によって、簡略化操作の後でいくつかのオプションを選択する場合があります(新しいメジャー値の無視、新しいLRSジオメトリの再定義よるメジャー値のリセットなど)。

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

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

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

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

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

次の例では、7.7項図7-20に示す道路を簡略化します。しきい値(6)は入力ジオメトリに対して十分に大きいため、結果のLRS線ストリングには、開始点、終了点および (12, 4,12) の3つの点のみが含まれます。このファンクションは2次元のみを考慮するため、戻されるジオメトリのメジャー値は無効になります。

SELECT SDO_UTIL.SIMPLIFY(
  SDO_GEOMETRY(
    3302,  -- line string, 3 dimensions (X,Y,M), 3rd is linear ref. dimension
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments
    SDO_ORDINATE_ARRAY(
      2,2,0,   -- Starting point - Exit1; 0 is measure from start.
      2,4,2,   -- Exit2; 2 is measure from start. 
      8,4,8,   -- Exit3; 8 is measure from start. 
      12,4,12,  -- Exit4; 12 is measure from start. 
      12,10,NULL,  -- Not an exit; measure automatically calculated and filled.
      8,10,22,  -- Exit5; 22 is measure from start.  
      5,14,27)  -- Ending point (Exit6); 27 is measure from start.
  ),
  6, -- threshold value for geometry simplification
  0.5  -- tolerance
) FROM DUAL;

SDO_UTIL.SIMPLIFY(SDO_GEOMETRY(3302,--LINESTRING,3DIMENSIONS(X,Y,M),3RDISLINEARR
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 12, 4, 12, 5, 14, 27)) 

図32-1に、この例の結果を示します。図32-1では、黒い太実線が結果のジオメトリを示し、開始点と終了点の間の薄い色の細実線が入力ジオメトリを示しています。また、終端に矢印の付いた細い破線は、セグメントの方向を示しています。

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

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

SDO_UTIL.TO_GML311GEOMETRY

構文

SDO_UTIL.TO_GML311GEOMETRY(

     geometry IN SDO_GEOMETRY

     ) RETURN CLOB;

説明

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

パラメータ

geometry

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

使用上の注意

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

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

ポリゴンの定義には、Oracle9i以降のリリースのSpatialの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(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のフラグメントを戻します。(例では、2.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のフラグメントを戻します。(例では、2.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のフラグメントを戻します。(例では、7.7項の定義およびデータを使用しています。)

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

構文

SDO_UTIL.TO_GMLGEOMETRY(

     geometry IN SDO_GEOMETRY

     ) RETURN CLOB;

説明

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

パラメータ

geometry

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

使用上の注意

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

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

ポリゴンの定義には、Oracle9i以降のリリースのSpatialの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(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フラグメントを戻します。(例では、2.1項の定義およびデータを使用しています。)

-- 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フラグメントを戻します。(例では、2.1項の定義およびデータを使用しています。)

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フラグメントを戻します。(例では、7.7項の定義およびデータを使用しています。)

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_KMLGEOMETRY

構文

SDO_UTIL.TO_KMLGEOMETRY(

     geometry IN SDO_GEOMETRY

     ) RETURN CLOB;

説明

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

パラメータ

geometry

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

使用上の注意

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

ポリゴンの定義には、Oracle9i以降のリリースのSpatialの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(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ソリッド・ジオメトリは生成されません(つまり、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形式への変換と逆変換を示します。(例では、2.1項の特に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

SDO_UTIL.TO_WKBGEOMETRY

構文

SDO_UTIL.TO_WKBGEOMETRY(

     geometry IN SDO_GEOMETRY

     ) RETURN BLOB;

説明

Spatialジオメトリ・オブジェクトを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ジオメトリが有効かどうかを確認しています。(例では、2.1項の特に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

SDO_UTIL.TO_WKTGEOMETRY

構文

SDO_UTIL.TO_WKTGEOMETRY(

     geometry IN SDO_GEOMETRY

     ) RETURN CLOB;

説明

Spatialジオメトリ・オブジェクトを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ジオメトリが有効かどうかを確認しています。(例では、2.1項の特に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

SDO_UTIL.VALIDATE_WKBGEOMETRY

構文

SDO_UTIL.VALIDATE_WKBGEOMETRY(

     geometry IN BLOB

     ) RETURN VARCHAR2;

説明

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

パラメータ

geometry

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

使用上の注意

入力ジオメトリが有効であるためには、その形式が、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ジオメトリが有効かどうかを確認しています。(例では、2.1項の特に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

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形式のジオメトリを指定します。

使用上の注意

入力ジオメトリが有効であるためには、その形式が、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ジオメトリが有効かどうかを確認しています。(例では、2.1項の特に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