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

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

35.1 SDO_UTIL.AFFINETRANSFORMS

構文

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

説明

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

パラメータ

geometry

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

translation

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

tx

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

ty

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

tz

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

scaling

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

psc1

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

sx

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

sy

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

sz

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

rotation

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

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

p1

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

line1

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

angle

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

dir

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

shearing

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

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

shxy

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

shyx

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

shxz

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

shzx

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

shyz

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

shzy

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

reflection

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

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

pref

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

lineR

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

dirR

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

planeR

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

n

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

bigD

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

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

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

使用上のノート

ノート:

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

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

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

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

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

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

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

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

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

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

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

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

35.2 SDO_UTIL.APPEND

構文

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

説明

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

パラメータ

geometry1

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

geometry2

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

使用上のノート

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

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

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

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

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

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

35.3 SDO_UTIL.BEARING_TILT_FOR_POINTS

構文

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

説明

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

パラメータ

start_point

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

end_point

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

tol

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

bearing

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

tilt

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

使用上のノート

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

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

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

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

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

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

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

35.4 SDO_UTIL.CIRCLE_POLYGON

構文

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

または

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

または

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

説明

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

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

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

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

パラメータ

point

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

center_longitude

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

center_latitude

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

radius

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

arc_tolerance

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

start_azimuth

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

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

end_azimuth

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

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

orientation

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

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

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

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

arc

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

使用上のノート

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

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

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

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

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

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

関連トピック

35.5 SDO_UTIL.CONCAT_LINES

構文

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

説明

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

パラメータ

geometry1

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

geometry2

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

使用上のノート

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

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

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

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

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

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

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

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

35.6 SDO_UTIL.CONVERT_UNIT

構文

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

説明

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

パラメータ

value

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

in_unit

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

out_unit

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

使用上のノート

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

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

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

関連トピック

なし。

35.7 SDO_UTIL.CONVERT3007TO3008

構文

SDO_UTIL.CONVERT3007TO3008(
     geometry  IN SDO_GEOMETRY  
     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

使用上のノート

ノート:

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

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

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

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

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

35.8 SDO_UTIL.DELETE_SDO_GEOM_METADATA

構文

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

説明

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

パラメータ

owner

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

table_name

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

column_name

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

使用上のノート

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

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

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

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

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

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

関連トピック

35.9 SDO_UTIL.DENSIFY_GEOMETRY

構文

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

説明

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

パラメータ

geometry

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

間隔

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

使用上のノート

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

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

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

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

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

関連トピック

35.10 SDO_UTIL.DROP_WORK_TABLES

構文

SDO_UTIL.DROP_WORK_TABLES(
     oidstr IN VARCHAR2);

説明

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

パラメータ

oidstr

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

使用上のノート

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

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

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

EXECXUTE SDO_UTIL.DROP_WORK_TABLES('A1B2C3');

35.11 SDO_UTIL.ELLIPSE_POLYGON

構文

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

説明

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

パラメータ

center_longitude

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

center_latitude

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

semi_major_axis

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

semi_minor_axis

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

azimuth

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

arc_tolerance

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

使用上のノート

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

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

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

関連トピック

35.12 SDO_UTIL.EXPAND_GEOM

構文

SDO_UTIL.EXPAND_GEOM(
     geometry  IN SDO_GEOMETRY  
     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

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

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

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

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

35.13 SDO_UTIL.EXTRACT

構文

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

説明

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

パラメータ

geometry

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

element

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

ring

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

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

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

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

使用上のノート

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

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

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

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

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

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

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

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

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

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

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

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

1 row created.

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

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

35.14 SDO_UTIL.EXTRACT_ALL

構文

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

説明

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

パラメータ

geometry

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

flatten

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

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

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

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

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

使用上のノート

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

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

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

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

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

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

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

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

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

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

1 row created.

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

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

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

関連トピック

35.15 SDO_UTIL.EXTRACT3D

構文

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

説明

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

パラメータ

geometry

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

label

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

  • pointID: 点の番号

  • edgeID: エッジの番号

  • ringID: 輪の番号

  • polygonID: ポリゴンの番号

  • csurfID: 複合表面の番号

  • solidID: ソリッドの番号

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

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

使用上のノート

ノート:

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

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

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

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

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

関連トピック

35.16 SDO_UTIL.EXTRUDE

構文

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

説明

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

パラメータ

geometry

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

grdheight

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

height

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

tol

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

optional3dSrid

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

使用上のノート

ノート:

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

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

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

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

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

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

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

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

関連トピック

なし。

35.17 SDO_UTIL.FROM_GEOJSON

構文

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

または

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

説明

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

パラメータ

geometry

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

crs

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

srid

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

使用上のノート

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

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

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

DECLARE
  cola_b_geom SDO_GEOMETRY;
  returned_geom SDO_GEOMETRY;
  returned_json CLOB;

BEGIN

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

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

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

END;
/

関連トピック

35.18 SDO_UTIL.FROM_GML311GEOMETRY

構文

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

または

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

または

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

または

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

または

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

説明

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

パラメータ

geometry

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

srsNamespace

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

coordOrder

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

使用上のノート

ノート:

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

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

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

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

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

35.19 SDO_UTIL.FROM_GMLGEOMETRY

構文

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

または

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

説明

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

パラメータ

geometry

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

srsNamespace

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

使用上のノート

ノート:

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

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

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

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

35.20 SDO_UTIL.FROM_JSON

構文

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

または

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

説明

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

パラメータ

geometry

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

crs

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

srid

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

使用上のノート

ノート:

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

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

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

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

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

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

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

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

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

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

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

35.21 SDO_UTIL.FROM_KMLGEOMETRY

構文

SDO_UTIL.FROM_KMLGEOMETRY(
     geometry  IN CLOB  
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_KMLGEOMETRY(
     geometry  IN VARCHAR2 
     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

使用上のノート

ノート:

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

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

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

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

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

関連トピック

35.22 SDO_UTIL.FROM_WKBGEOMETRY

構文

SDO_UTIL.FROM_WKBGEOMETRY(
     geometry  IN BLOB,
     srid      IN NUMBER DEFAULT NULL
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_WKBGEOMETRY(
     geometry  IN CLOB,
     srid      IN NUMBER DEFAULT NULL
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_WKBGEOMETRY(
     geometry  IN VARCHAR2,
     srid      IN NUMBER DEFAULT NULL
     ) RETURN SDO_GEOMETRY;

説明

Well-Known Binary (WKB)またはExtended Well-Known Binary形式のジオメトリを空間ジオメトリ・オブジェクトに変換します。

パラメータ

geometry

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

srid

入力ジオメトリを記述するオプションのSRID。指定した値は、入力ジオメトリのSRID指定よりも優先されます。

使用上のノート

ノート:

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

入力ジオメトリは、Well-Known Binary (WKB)形式か、またはExtended Well-Known Binary形式です。入力は、オプションでASCIIとして16進エンコードされたCLOBまたはVARCHAR2にすることができます。結果は、入力ジオメトリを表すために必要な最も適した最小限のSDO_GEOMETRY型になります。

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

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

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

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

35.23 SDO_UTIL.FROM_WKTGEOMETRY

構文

SDO_UTIL.FROM_WKTGEOMETRY(
     geometry  IN CLOB,
     srid      IN NUMBER DEFAULT NULL
     ) RETURN SDO_GEOMETRY;

または

SDO_UTIL.FROM_WKTGEOMETRY(
     geometry  IN VARCHAR2,
     srid      IN NUMBER DEFAULT NULL
     ) RETURN SDO_GEOMETRY;

説明

Well-Known Text (WKT)またはExtended Well-Known Text (EWKT)形式のジオメトリを空間ジオメトリ・オブジェクトに変換します。

パラメータ

geometry

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

srid

入力ジオメトリを記述するオプションのSRID。指定した値は、入力ジオメトリのSRID指定よりも優先されます。

使用上のノート

ノート:

  • Oracle Databaseリリース19.25以降、SDO_UTIL.FROM_WKTGEOMETRYファンクションは、入力ジオメトリ(WKT形式)内の誤った輪の回転を自動的に検証および修正します。検証プロセスでは、必要に応じて、修正された方向を正確に反映するように、結果のSDO_GEOMETRYオブジェクトのSDO_GTYPE属性も更新されます。
  • SDO_UTIL.FROM_WKTGEOMETRYファンクションは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

入力ジオメトリは、Well-Known Text ()形式またはEWKT形式にすることができます。結果は、入力ジオメトリを表すために必要な最も適した最小限のSDO_GEOMETRY型になります。

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

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

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

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

35.24 SDO_UTIL.GEO_SEARCH

構文

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

説明

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

パラメータ

name

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

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

fuzzy

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

使用上のノート

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

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

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

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

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

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

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

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

35.25 SDO_UTIL.GET_2D_FOOTPRINT

構文

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

説明

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

パラメータ

geometry

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

tolerance

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

使用上のノート

ノート:

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

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

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

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

35.26 SDO_UTIL.GET_COORDINATE

構文

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

説明

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

パラメータ

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

使用上のノート

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

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

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

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

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

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

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

35.27 SDO_UTIL.GET_TILE_ENVELOPE

構文

SDO_UTIL.GET_TILE_ENVELOPE(
    tile_x     IN NUMBER,
    tile_y     IN NUMBER,
    tile_zoom  IN NUMBER,
    google_ts  IN BOOLEAN DEFAULT TRUE
) RETURN MDSYS.SDO_GEOMETRY;

説明

タイル住所をタイル・エンベロープ(正方形を記述するSDOジオメトリ)に変換します。

パラメータ

tile_x

フェッチするタイルの原点のX座標。

このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、max(X) = (2^tile_zoom) - 1で計算できます。有効範囲外のX座標を指定すると、例外が発生します。

tile_y

フェッチするタイルの原点のY座標(NUMBER形式)。

このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、max(Y) = (2^tile_zoom) - 1で計算できます。有効範囲外のY座標を指定すると、例外が発生します。

tile_zoom

地図の分割に必要なタイルの数を決定します。これらのセグメントは、地図全体を読み取ることなく、より高い解像度で結合できます。

たとえば、ゼロのtile_zoomは、詳細がそれほど表示されずに、地図全体が単一のタイルとなります。ntile_zoomは、地図を2^n x 2^n個のタイル(つまり、X軸に沿ったタイルの数にY軸に沿ったタイルの数を乗算した数)に分割します。たとえば、8tile_zoomでは、65,536個のタイルになります。これは、nの値が大きいほど、タイル内の詳細度が高くなることを意味します。有効範囲外のパラメータ値では例外が発生することに注意してください。

google_ts

Googleタイル処理方法が使用されているかどうかを示すブール値。

タイル住所の読取り時には、次の2つのタイル処理方法がサポートされています。

  • GOOGLE: このタイル処理方法では、タイルの原点(X,Y)が北西の角になります。X座標はタイルが西から東に読み取られるにつれて増加します。Y座標はタイルが北から南に読み取られるにつれて増加します。
  • TMS: このタイル処理方法では、タイルの原点(X,Y)が南西の角になります。X座標はタイルが西から東に読み取られるにつれて増加しますが、Y座標はタイルが南から北に読み取られるにつれて増加します。

使用上のノート

なし。

次の例では、デフォルトのGoogleタイル処理方法を使用して、タイル座標をSDO_GEOMETRYに変換します。

SELECT SDO_UTIL.GET_TILE_ENVELOPE(131, 84, 8) FROM DUAL;

SDO_UTIL.GET_TILE_ENVELOPE(131,84,8)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
-----------------------------------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 3857, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARRAY(465715.526, 6727436.88, 630085.712, 6891807.07))

次の例では、TMSタイル処理方法を使用してタイル座標をSDO_GEOMETRYに変換します。

SELECT SDO_UTIL.GET_TILE_ENVELOPE(131, 171, 8) FROM DUAL;

SDO_UTIL.GET_TILE_ENVELOPE(131,171,8,FALSE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
------------------------------------------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 3857, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARRAY(465715.526, -6891807.1, 630085.712, -6727436.9))

35.28 SDO_UTIL.GET_VECTORTILE

構文

SDO_UTIL.GET_VECTORTILE(
    TABLE_NAME       IN VARCHAR2,
    GEOM_COL_NAME    IN VARCHAR2,
    TILE_X           IN NUMBER,
    TILE_Y           IN NUMBER,
    TILE_ZOOM        IN NUMBER,
    ATT_COL_NAMES    IN MDSYS.SDO_STRING_ARRAY DEFAULT NULL,
    SIMPLE_PREDICATE IN MDSYS.SDO_STRING_ARRAY DEFAULT NULL,
    LAYER_NAME       IN VARCHAR2 DEFAULT 'LAYER',
    TILE_EXTENT      IN NUMBER DEFAULT 4096,
    GOOGLE_TS        IN BOOLEAN DEFAULT TRUE,
    MAX_FEATURES     IN NUMBER DEFAULT 20000,
    ROWID_FLG        IN BOOLEAN DEFAULT FALSE
    ) RETURN BLOB;

または

SDO_UTIL.GET_VECTORTILE(
    TABLE_NAME       IN VARCHAR2,
    GEOM_COL_NAME    IN VARCHAR2,
    TILE_X           IN NUMBER,
    TILE_Y_PBF       IN VARCHAR2,
    TILE_ZOOM        IN NUMBER,
    ATT_COL_NAMES    IN MDSYS.SDO_STRING_ARRAY DEFAULT NULL,
    SIMPLE_PREDICATE IN MDSYS.SDO_STRING_ARRAY DEFAULT NULL,
    LAYER_NAME       IN VARCHAR2 DEFAULT 'LAYER',
    TILE_EXTENT      IN NUMBER DEFAULT 4096,
    GOOGLE_TS        IN BOOLEAN DEFAULT TRUE,
    MAX_FEATURES     IN NUMBER DEFAULT 20000,
    ROWID_FLG        IN BOOLEAN DEFAULT FALSE
    ) RETURN BLOB;

または

FUNCTION GET_VECTORTILE(
  CUR              IN SYS_REFCURSOR,
  TILE_X           IN NUMBER,              
  TILE_Y           IN NUMBER,
  TILE_ZOOM        IN NUMBER,
  LAYER_NAME       IN VARCHAR2 DEFAULT 'LAYER',
  TILE_EXTENT      IN NUMBER DEFAULT 4096,
  GOOGLE_TS        IN BOOLEAN DEFAULT TRUE,
  MAX_FEATURES     IN NUMBER DEFAULT 20000
) RETURN BLOB;

説明

Mapbox Vector Tile (MVT)を表すBLOBを生成します。

パラメータ

table_name

名前付きジオメトリ列および属性列リストで名前が付いたすべての列を含む有効な表またはビューの名前。

表(またはビュー)に対してREADアクセス権があることを確認してください。必要な権限がない場合、または表が存在しない場合は、例外が発生します。

geom_col_name

table_nameのSDO_GEOMETRY型列またはファンクションベースの空間索引の名前。

列がtable_nameに存在しない場合、またはSDO_GEOMETRY型でない場合は、例外が発生します。

cur

APEXアプリケーションで使用されるSQL問合せのCURSOR

書式はCURSOR(<user_SQL_query>)です。

また、SQL問合せについて、次のことに注意してください。

  • SELECT句の最初の列は、ジオメトリ列である必要があります。
  • WHERE句にmask=anyinteractmin_resolution=' || res || 'およびbypass_point=trueパラメータを指定して、SDO_RELATEをコールする必要があります。WHERE句には、必要に応じて、SQL問合せの他の述語も含めることができます。

    min_resolutionパラメータの値は、((40075016.0/(2<tile_zoom>)) * .001)という式を使用して計算できます。ここで40075016はズーム・レベル0のタイルのX軸およびY軸に沿ったメートル数を示すデフォルト値、tile_zoomはリクエストされるタイルのズーム、.001は変更されない定数です。

    WHERE句にSDO_RELATEメソッドのコールが指定されていない場合でも、結果のタイルは同じままになります。ただし、関心のあるジオメトリのみでなく、すべてのジオメトリが処理されるため、タイルの計算コストは大幅に高くなります。

  • オプションで、ベクター・タイルに必要な分布情報の量に応じて、SQL問合せにORDER BY句およびFETCH FIRST ROWS ONLY句を指定できます。

CURSORNULLの場合、または指定された問合せが無効である場合は、例外が発生します。

tile_x

フェッチするタイルの原点のX座標。

このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、max(X) = (2^tile_zoom) - 1で計算できます。有効範囲外のX座標を指定すると、例外が発生します。

tile_y

フェッチするタイルの原点のY座標(NUMBER形式)。

このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、max(Y) = (2^tile_zoom) - 1で計算できます。有効範囲外のY座標を指定すると、例外が発生します。

tile_y_pbf

フェッチするタイルの原点のY座標(VARCHAR2形式)。

tile_y_pbf値は、数値とその後の任意のファイル拡張子を指定するVARCHAR2文字列です。Y縦座標値は、文字列内のファイル拡張子を削除した後に抽出されます。たとえば、文字列値‘23.pbf’または‘23.XYZ’を考えてみます。次に、23がY座標値として抽出され、'.'の後のすべてが削除され、無視されます。

このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、max(Y) = (2^tile_zoom) - 1で計算できます。有効範囲外のY座標を指定すると、例外が発生します。

tile_zoom

地図の分割に必要なタイルの数を決定します。これらのセグメントは、地図全体を読み取ることなく、より高い解像度で結合できます。

たとえば、ゼロのtile_zoomは、詳細がそれほど表示されずに、地図全体が単一のタイルとなります。ntile_zoomは、地図を2^n x 2^n個のタイル(つまり、X軸に沿ったタイルの数にY軸に沿ったタイルの数を乗算した数)に分割します。たとえば、8tile_zoomでは、65,536個のタイルになります。nの値が大きいほど、タイル内の詳細度が高くなることを意味します。有効範囲外のパラメータ値では例外が発生することに注意してください。

att_col_names

フィーチャの非空間データを含む属性列名。

これはオプションのパラメータです。たとえば、郡ポリゴンを問い合せる場合、郡名、郡が存在する都道府県、およびその郡の総人口にも関心がある場合があります。これらの列は、ATT_COL_NAMES => sdo_string_array('COUNTY','STATE','TOTPOP')のようにSDO_STRING_ARRAYとして指定されます。

配列の各項目は、表内(table_name)で一意の有効な列名である必要があります。ただし、これらの制限に違反しても、次の理由により致命的ではありません。

  • 項目名が表内の列で見つからない場合、その項目名は単に無視されます。
  • 同じ項目名の複数の列が指定されている場合は、最後の項目値のみが使用されます。

また、配列にリストされている項目値は、Oracleの標準の大/小文字ルールに従っており、'COUNTY''County'および'county'は重複とみなされ、これらはすべて'COUNTY'に解決されることに注意してください。ただし、'"COUNTY"''"County"'および'"county"'は重複とはみなされないため、これら3つはすべて競合することなく表の列名として指定できます。

att_col_namesリストに指定される列でサポートされるデータ型(ANSIとOracleの組込みの両方)を次の表に示します。

表35-1 att_col_namesリストの列でサポートされるデータ型

カテゴリ データ型
文字データ型
  • CHAR
  • CHARACTER
  • CHAR VARYING
  • CHARACTER VARYING
  • NATIONAL CHAR
  • NATIONAL CHARACTER
  • NATIONAL CHAR VARYING
  • NATIONAL CHARACTER VARYING
  • NCHAR
  • NCHAR VARYING
  • NVARCHAR2
  • VARCHAR
  • VARCHAR2
数値データ型
  • DEC
  • DECIMAL
  • DOUBLE PRECISION
  • FLOAT
  • INT
  • INTEGER
  • NUMBER
  • NUMERIC
  • REAL
  • SMALLINT
日付と時間
  • DATE
  • TIMESTAMP

関連項目:

Oracle SQLデータ型の詳細は、『Oracle Database SQL言語リファレンス』データ型を参照してください。

att_col_namesリストに指定される列でサポートされないデータ型を次に示します。

  • BINARY FLOAT
  • BINARY DOUBLE
  • LONG
  • LONG RAW
  • RAW
  • INTERVAL YEAR TO MONTH
  • INTERVAL DAY TO SECOND
  • BLOB
  • CLOB
  • NCLOB
  • BFILE
  • ROWID
  • UROWID
  • SDO_GEOMETRYSDO_TOPO_GEOMETRYおよびSDO_GEORASTERを含むユーザー定義のデータ型

ノート:

  • SDO_GEOMETRYは引き続き有効であり、実際、ベクター・タイル・リクエストで指定するgeom_col_nameに必要なデータ型です。
  • att_col_namesリストにサポートされていないデータ型の列が1つ以上指定されている場合、それらの列は無視され、タイルは列が要求されなかったかのように返されます。
simple_predicate

述語を形成する3つの要素(オペランド演算子)で構成される書式設定されたSDO_STRING配列。

3つの組を形成する要素については、次の点に注意してください。

  • 3つの最初の要素であるオペランドは、表内(table_name)の有効な列名である必要があります。列名が有効でない場合は、例外が発生します。
  • 3つの要素の2番目は演算子で、次の演算子のみがサポートされています。
    • =, !=, <, >, <=, >=
    • IS [NOT] NULL
    • AND
    • [NOT] LIKE
  • 3つの要素の3番目はで、文字列または数値である必要があります。たとえば、'answer'は文字列として扱われます。一方で、'42'42は両方とも数値として扱われます。
  • 3つの要素が複数ある場合は、AND演算子で結合された複数の述語が形成されます。たとえば、次のSIMPLE_PREDICATE配列があるとします。

    SIMPLE_PREDICATE => sdo_string_array('STATE', '=', 'WI', 'COUNTY', 'LIKE', 'B*', 'TOTPOP', '>', '50000')

    これは、"STATE"='WI' AND "COUNTY" LIKE 'B*' AND "TOTPOP" > 50000という述語が形成されます。

layer_name

ベクター・タイルのレイヤーの名前。

これはオプションのパラメータです。ベクター・タイルでは、デフォルトの'LAYER'値を持つ単一のレイヤーのみがサポートされます。

tile_extent

タイルの幅と高さを表す整数座標。

これはオプションのパラメータです。デフォルト値の4096は、ベクター・タイルの高さが4096単位で、幅が4096単位であることを示します。これらの単位の実際のサイズは、タイルのズーム・レベルによって異なります。タイル内の2つの座標間の距離は、ズーム・レベル0のほうがズーム・レベル12よりもはるかに大きくなります。標準以外のタイル処理方法を使用する場合のみ、デフォルトのパラメータ値を変更することをお薦めします。

google_ts

Googleタイル処理方法が使用されているかどうかを示すブール値。

これはオプションのパラメータです。デフォルト値はTRUEで、これはGOOGLEタイル処理方法を示します。

タイル住所の読取り時には、次の2つのタイル処理方法がサポートされています。

  • GOOGLE (デフォルト): このタイル処理方法では、タイルの原点(X,Y)が北西の角になります。X座標はタイルが西から東に読み取られるにつれて増加します。Y座標はタイルが北から南に読み取られるにつれて増加します。
  • TMS: このタイル処理方法では、タイルの原点(X,Y)が南西の角になります。X座標はタイルが西から東に読み取られるにつれて増加しますが、Y座標はタイルが南から北に読み取られるにつれて増加します
max_features

レイヤーに含まれるフィーチャの最大数。

これはオプションのパラメータであり、デフォルト値は20000です。

ベクター・タイルはレイヤーで構成されます。レイヤーはフィーチャで構成されます。フィーチャは、タイル・エンベロープと相互作用するジオメトリおよびその属性列です。州全体または国全体を覆う大規模なタイル・エンベロープの場合、建物の数とその属性は非常に多くなる可能性があります。過剰な数のフィーチャの処理は、CPUとメモリーの両方でリソースを大量に消費する可能性があります。

したがって、このパラメータを使用すると、レイヤーに含めるフィーチャの最大数を制御できます。

rowid_flg

ROWIDを属性列として取得するかどうかを示すブール値。

これはオプションのパラメータであり、デフォルト値はFALSEです。

FALSEの場合、ROWIDはタイル・フィーチャに列属性として含まれません。

TRUEの場合は、ROWIDがタイル・フィーチャに列属性として含まれます。

詳細は、「使用上のノート」を参照してください。

使用上のノート

SDO_UTIL.GET_VECTORTILEファンクションは、次の3つの書式をサポートしています(の先頭を参照してください)。

  • 最初の書式では、特定のズーム・レベルでX座標とY座標(両方ともNUMBER形式)を入力として受け取り、指定されたタイル住所によって定義されたタイル・エンベロープと相互作用するすべてのフィーチャを含むBLOBを返します。
  • 2番目の書式では、特定のズーム・レベルでX座標(NUMBER形式)と、.PBF接尾辞が付いたY座標(VARCHAR2形式)を入力として受け取り、BLOBベクター・タイル・データを返します。
  • 3番目の書式は、SQL問合せを使用したベクター・タイルの生成に適用されます。ベクター・タイルの作成に必要な行をフェッチするには、カーソル入力が必要です。出力ベクター・タイル・データはBLOBとして返されます。

BLOBの各フィーチャは、タイル・エンベロープと相互作用するジオメトリと、そのジオメトリに関連付けられているリクエストされた属性列で構成されることに注意してください。

タイルは、地図の一部を記述するポリゴン(正方形)です。タイル・エンベロープは、X軸とY軸の両方の両端を2.5%ずつ追加してタイルを覆う正方形でもあります。ユーザーから見ると、タイルとタイル・エンベロープは両方とも同じです。タイル・エンベロープは、MASK=ANYINTERACTが設定されたSDO_RELATEのコールでフィルタとして使用されます。

SDO_UTIL.GET_VECTORTILEファンクションでは、タイル・エンベロープのかわりにX、Y原点、ズーム・レベルおよびタイル方法が渡されることに注意してください。このファンクションは、タイル・エンベロープを形成するSDO_UTIL.GET_TILE_ENVELOPEを内部的にコールします。

SQL問合せ内でSDO_UTIL.GET_VECTORTILEファンクションをコールする場合は、次の点を考慮する必要があります。

  • タイル・エンベロープの作成に使用されるタイル住所(tile_xtile_yおよびtile_zoom)およびタイル処理方法(google_ts)が、ベクター・タイル・ファンクションに渡されるものと同じであることを確認します。そうしないと、異なる住所または方法によって異なるタイル・エンベロープが提供される場合があるため、ファンクションでデータが返されない可能性があります。
  • 同様に、フェッチする行数を決定するためにSQL問合せにmax_featuresを指定する場合は、問合せの最大フィーチャ値がベクター・タイル・ファンクションに渡される値と同じであることを確認します。また、次の点にも注意してください。
    • 問合せで指定されたmax_features値がベクター・タイルAPIで指定された値より大きい場合、問合せは引き続き多数の行の読取りが試行しますが、フィーチャの処理はAPIに渡されたmax_features値に制限されます。
    • 問合せで指定されたmax_features値がベクター・タイルAPIで指定された値より小さい場合、問合せは指定された行数をフェッチして終了します。
  • rowid_flgパラメータは、カーソル入力をサポートするSDO_UTIL.GET_VECTORTILEファンクション書式には含まれません。この場合、SELECT句にROWIDTOCHAR(<table_alias>.rowid) "ROWID"を追加することで、ROWID列属性を取得できます。この属性列は、取得する列のリストの任意の場所に配置できます。また、取得するリスト内の唯一の列にすることもできます。
    • "ROWID"疑似列名は単なる提示です。任意の名前を選択できます。
    • ROWIDTOCHARファンクション・コールでは、ROWIDの生成元の表の別名をROWIDの接頭辞として付ける必要があります。問合せにはデータ表とタイル・エンベロープ表の2つの表があるため、どちらの表からROWIDが生成されるかを明確にするためにこの別名が必要です。
    • 問合せから返される行数を制限する場合は、WHERE NUMROW <= :xを使用する必要があります(:xmax_featuresパラメータの値)。

次の例では、特定のズーム・レベルでNUMBER形式のX座標とY座標の両方を使用してベクター・タイル・データを取得します。この例では、各ベクター・タイルに対して10000レコードのサイズ制限も保持しています。
SQL> SELECT SDO_UTIL.GET_VECTORTILE(
       TABLE_NAME=>'states',
       GEOM_COL_NAME=>'geom',
       ATT_COL_NAMES=>sdo_string_array('totpop', 'name', 'state_abbrv'),
       SIMPLE_PREDICATE=>sdo_string_array('totpop','>', '50000'),
       TILE_X=>1192,
       TILE_Y=>1579,
       TILE_ZOOM=>12,
       MAX_FEATURES=>10000);

SDO_UTIL.GET_VECTORTILE(TABLE_NAME=>'US_STATE',GEOM_COL_NAME=>'GEOM',ATT_COL_NAMES=>SDO_STRING_ARRAY('TOTPOP','NAME','STATE_ABBRV'),SIMPLE_PREDICATE=>SDO_STRING
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1A150A0E084E59414E205350415449414C0828802078021ABE010A054C41594552122C080012060000010102021803221E09CB01AE233AA80919AE2845B2010CFC06FD0B94098912009F069743000F12

次の例では、SQL問合せを使用してベクター・タイル・データを取得するステップを説明します。

SELECT SDO_UTIL.GET_VECTORTILE(
       CURSOR(
         WITH tet(tec) AS
             (SELECT SDO_UTIL.GET_TILE_ENVELOPE(tile_zoom=>12, tile_x=>1192, tile_y=>1579))
         SELECT geom, totpop, state, state_abrv
             FROM states, tet
             WHERE totpop > 200 and ROWNUM <= 10000 and
              SDO_RELATE(geom, tet.tec,
                 'mask=anyinteract min_resolution=9.7839 bypass_point=true')),
         tile_zoom=>12, tile_x=>1192, tile_y=>1579) FROM DUAL;

SDO_UTIL.GET_VECTORTILE(CURSOR(WITHTET(TEC)AS(SELECTSDO_UTIL.GET_TILE_ENVELOPE(T
--------------------------------------------------------------------------------
1A150A0E084E59414E205350415449414C0828802078021A620A054C41594552121C080012060000
010102021803220E09CB01B81B128E10851D8D10000F1A06544F54504F501A0553544154451A0A53
544154455F4142525622091900000000673D5241220A0A084D6172796C616E6422040A024D442880
207802

前述の例では、次のようにmin_resolution値が計算されます:

SQL> SELECT ((40075016.0/POWER(2, 12)) * .001) FROM DUAL;

((40075016.0/POWER(2,12))*.001)
-------------------------------
                     9.78393945

次の例では、タイル・フィーチャの列属性としてROWIDを返します。ベクター・タイルは、次に示すように、SQL問合せ(cursor入力あり)を使用して生成されます。

SELECT SDO_UTIL.GET_VECTORTILE(
       cursor(
         WITH tet(tec) AS
             (SELECT SDO_UTIL.GET_TILE_ENVELOPE(tile_zoom=>12, tile_x=>1192, tile_y=>1579))
         SELECT geom, totpop, state, state_abrv, ROWIDTOCHAR(vtt.rowid) "ROWID"
             FROM states, tet
             WHERE totpop > 200 and ROWNUM <= 10000 and
                   SDO_RELATE(geom, tet.tec,
                     'mask=anyinteract min_resolution=9.7839 bypass_point=true')),
       tile_zoom=>12, tile_x=>1192, tile_y=>1579) FROM DUAL;

次の例では、ROWID_FLGパラメータがTRUEに設定されているため、このプロシージャはタイル・フィーチャの列属性としてROWIDを返します。

SELECT SDO_UTIL.GET_VECTORTILE(
       TABLE_NAME=>'states',
       GEOM_COL_NAME=>'geom',
       ATT_COL_NAMES=>sdo_string_array('totpop', 'state', 'state_abbrv'),
       SIMPLE_PREDICATE=>sdo_string_array('totpop','>', '200'),
       TILE_X=>1192,
       TILE_Y=>1579,
       TILE_ZOOM=>12,
       ROWID_FLG=>TRUE,
       MAX_FEATURES=>10000);

35.29 SDO_UTIL.GETFIRSTVERTEX

構文

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

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

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

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

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

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

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

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


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

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

関連トピック

35.30 SDO_UTIL.GETLASTVERTEX

構文

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

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

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

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

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

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

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

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


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

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

関連トピック

35.31 SDO_UTIL.GETNUMELEM

構文

SDO_UTIL.GETNUMELEM(
     geometry  IN SDO_GEOMETRY 
     ) RETURN NUMBER;

説明

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

パラメータ

geometry

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

使用上のノート

なし。

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

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

関連トピック

35.32 SDO_UTIL.GETNUMVERTICES

構文

SDO_UTIL.GETNUMVERTICES(
     geometry  IN SDO_GEOMETRY 
     ) RETURN NUMBER;

説明

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

パラメータ

geometry

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

使用上のノート

なし。

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

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

35.33 SDO_UTIL.GETNURBSAPPROX

構文

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

説明

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

パラメータ

geometry

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

tolerance

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

使用上のノート

ノート:

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

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

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

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

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

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

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

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

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

35.34 SDO_UTIL.GETVERTICES

構文

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

説明

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

パラメータ

geometry

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

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

ノート:

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

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

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

使用上のノート

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

CREATE TYPE vertex_set_type as TABLE OF vertex_type;

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

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

ノート:

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

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

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

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

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

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

15 rows selected.

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

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

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

35.35 SDO_UTIL.H3_BASE_CELL

構文

SDO_UTIL.H3_BASE_CELL(
  h3_key IN RAW
) RETURN NUMBER;

説明

指定されたH3セルに対応するH3ベース・セル(64ビット、8バイトのRAW)を返します。

パラメータ

h3_key

指定されたH3セル。

使用上のノート

六角形をさらに小さな六角形に正確に分割することはできません。その結果、一部のセルはベース・セル内に完全には含まれていません。

次の例は、パリを含むベース・セルを示しています。

SELECT SDO_UTIL.H3_BASE_CELL('0877AA5145FFFFFF') FROM DUAL;
SDO_UTIL.H3_BASE_CELL('0877AA5145FFFFFF')
-----------------------------------------
                                       61

次の例は、北極を含むベース・セルを示しています。

SELECT SDO_UTIL.H3_BASE_CELL('08F0326233AB0399') FROM DUAL;
SDO_UTIL.H3_BASE_CELL('08F0326233AB0399')
-----------------------------------------
                                        1

35.36 SDO_UTIL.H3_BOUNDARY

構文

SDO_UTIL.H3_BOUNDARY(
  h3_key IN RAW,
  srid IN NUMBER DEFAULT NULL
) RETURN MDSYS.SDO_GEOMETRY;

説明

指定されたセルを表すポリゴンを計算します。

パラメータ

h3_key

H3セル。

srid

返されたジオメトリのオプションのSRID。測地(経度/緯度)座標系である必要があります。

使用上のノート

H3二十面体モデルの面を横断するエッジには、精度を高めるために一部のエッジに沿って追加の頂点が存在する場合があります。

次の例では、指定されたH3セルのポリゴンを計算します。

SELECT SDO_UTIL.H3_BOUNDARY('0877AA5145FFFFFF') FROM DUAL;
SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(48.8614522, 2.3465296, 
48.8610871, 2.35865517, 48.8505953, 2.36541433, 48.8404669, 2.36004832, 48.840831, 2.34792133, 48.8513246, 
2.34116178, 48.8614522, 2.3465296))

35.37 SDO_UTIL.H3_CENTER

構文

SDO_UTIL.H3_CENTER(
  h3_key IN RAW,
  srid   IN NUMBER DEFAULT NULL
) RETURN MDSYS.SDO_GEOMETRY;
SDO_UTIL.H3_CENTER(
  h3_key IN RAW,
  x      OUT NUMBER,
  y      OUT NUMBER);

説明

指定されたH3セルの中心を計算します。

パラメータ

h3_key

H3セル。

srid

返されたジオメトリのオプションのSRID。測地(経度/緯度)座標系である必要があります。

x

指定されたH3セルの中心の経度。

y

指定されたH3セルの中心の緯度。

使用上のノート

なし。

次の例では、北極を含む最も粗い(最大の)セルの中心を計算します。

SELECT SDO_UTIL.H3_CENTER('08001FFFFFFFFFFF') FROM DUAL;
SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(38.023407, 79.2423985, NULL), NULL, NULL)

関連トピック

35.38 SDO_UTIL.H3_HEX_AREA

構文

SDO_UTIL.H3_HEX_AREA(
  resolution IN NUMBER,
  unit       IN VARCHAR2 DEFAULT 'SQ_KM',
  measure    IN VARCHAR2 DEFAULT 'AVERAGE'
) RETURN NUMBER;

説明

指定されたH3レベルの六角形の最小('MIN')、最大('MAX')または平均('AVG')面積を返します。

パラメータ

resolution

問い合せるH3レベル。

unit

使用する面積の測定単位(表6-26を参照)。

measure

サポートされている値の1つ: MIN、MAX、AVGまたはAVERAGE。

使用上のノート

五角形には独自の統計があります。レベル全体の値ではなく、特定のセルの面積が必要な場合は、SDO_GEOM.SDO_AREA(SDO_UTIL.H3_BOUNDARY(h3_key),0.00001)を使用します。

次の例は、最大のH3セル(最大のレベル0セル)の面積を示しています。

SELECT SDO_UTIL.H3_HEX_AREA(0, 'SQ_MILE', 'MAX') FROM DUAL;
1937932.68

35.39 SDO_UTIL.H3_HEX_EDGELEN

構文

SDO_UTIL.H3_HEX_EDGELEN(
  resolution IN NUMBER,
  unit       IN VARCHAR2 DEFAULT 'KM',
  measure    IN VARCHAR2 DEFAULT 'AVERAGE'
) RETURN NUMBER;

説明

指定された解像度の六角形の最小('MIN')、最大('MAX')または平均('AVG')のエッジの長さを返します。

パラメータ

resolution

問い合せるH3レベル。

unit

使用する長さの測定単位(表6-26を参照)。

measure

サポートされている値の1つ: MIN、MAX、AVGまたはAVERAGE。

使用上のノート

SDO_UTIL.H3_HEX_EDGELENプロシージャは、指定されたH3レベルについてリクエストされた定数統計を返します。各レベルの12個の五角形に独自の統計があることに注意してください。六角形(五角形ではない)の場合、エッジの長さは六角形の中心から頂点までの距離でもあります。

レベル全体の値ではなく、特定のセルの面積が必要な場合は、SDO_GEOM.SDO_AREA(SDO_UTIL.H3_BOUNDARY(h3_key),0.00001)を使用します。

次の例は、最小のH3セル(最小のレベル15セル)のエッジの長さを示しています。

SELECT SDO_UTIL.H3_HEX_EDGELEN(15, 'M', 'MAX') FROM DUAL;
64482

35.40 SDO_UTIL.H3_NUM_CELLS

構文

SDO_UTIL.H3_NUM_CELLS(
  resolution IN NUMBER
) RETURN NUMBER;

説明

指定された解像度で地球を覆うH3セルの数を返します。

パラメータ

resolution

問い合せるH3レベル。

使用上のノート

五角形と六角形が含まれます。各解像度では、12個のセルが五角形で、残りが六角形です。

次の例では、ベース・セルの数を計算します。

SELECT SDO_UTIL.H3_NUM_CELLS(0) FROM DUAL;
122

35.41 SDO_UTIL.H3_IS_CLASS3

構文

SDO_UTIL.H3_IS_CLASS3(
  resolution IN NUMBER
) RETURN BOOLEAN;
SDO_UTIL.H3_IS_CLASS3(
  h3_key IN RAW
) RETURN BOOLEAN;

説明

指定された解像度の指定されたセルがUber社のH3システムのクラス3かどうかを判別するブール値を返します。

パラメータ

resolution

問い合せるH3レベル。

h3_key

問い合せるH3セル。

使用上のノート

六角形の方向は、1レベル粗いまたは細かいレイヤーに対して30度回転されるため、偶数レベルの六角形はすべて同じ方向を向き、奇数レベルの六角形もすべて同じ方向を向きます。クラス3は、Uber社の奇数番号レベルの向きを表す名前です。

次の例は、レベル7のセルがクラス3の向きになっていることを示しています。

SELECT SDO_UTIL.H3_IS_CLASS3(7) FROM DUAL;
TRUE

関連トピック

35.42 SDO_UTIL.H3_IS_PENTAGON

構文

SDO_UTIL.H3_IS_PENTAGON(
  h3_key IN RAW
) RETURN BOOLEAN;

説明

指定されたセルが(六角形ではなく)五角形かどうかを判別するブール値を戻します。

パラメータ

h3_key

問い合せるH3セル。

使用上のノート

各H3解像度には、正確に12個の五角形(H3投影に使用される二十面体の頂点を中心とする)があり、他のすべてのセルは六角形です。任意のH3解像度にある12個すべての五角形のサイズは同一です。12個の五角形の中心はすべての解像度で同じであり、すべての五角形の中心は海の中にあります。

次の例では、SDO_UTIL.H3_IS_PENTAGONをコールして、指定されたセルが五角形かどうかを判別します。

SQL> SELECT SDO_UTIL.H3_IS_PENTAGON('08928342E20FFFFF') pentagon;

PENTAGON
-----------
FALSE

SQL> SELECT SDO_UTIL.H3_IS_PENTAGON('08FD600000000000') pentagon;

PENTAGON
-----------
TRUE

35.43 SDO_UTIL.H3_IS_VALID_CELL

構文

SDO_UTIL.H3_IS_VALID_CELL(
  h3_key IN RAW
) RETURN BOOLEAN;

説明

指定されたH3キーが正しく形成され、H3セルが識別される場合はTRUEを戻し、それ以外の場合はFALSEを戻します。

パラメータ

h3_key

検証するH3キー。

使用上のノート

なし。

次の問合せの例では、SDO_UTIL.H3_IS_VALID_CELLプロシージャを使用して、入力H3キーの妥当性を判別します。

SELECT SDO_UTIL.H3_IS_VALID_CELL('0877AA5145FFFFFF') FROM DUAL;

SDO_UTIL.H3
-----------
TRUE
SELECT SDO_UTIL.H3_IS_VALID_CELL('0000000000000000') FROM DUAL;

SDO_UTIL.H3
-----------
FALSE

35.44 SDO_UTIL.H3_KEY

構文

SDO_UTIL.H3_KEY(
 longitude  IN NUMBER,
 latitude   IN NUMBER,
 resolution IN NUMBER DEFAULT 15) RETURN RAW;
SDO_UTIL.H3_KEY(
 geometry   IN mdsys.sdo_geometry,
 resolution IN NUMBER DEFAULT 15) RETURN RAW;

説明

指定された測地点と解像度のH3セルを返します。

パラメータ

longitude

入力点の経度。

latitude

入力点の緯度。

geometry

測地座標系内の単一点で構成されるジオメトリ。SRIDはNULL以外である必要があります。SRID 4326でない場合、点はSRID 4326に変換されます。

resolution

返すH3セルの解像度。解像度はゼロ(最も粗い)から15 (最も細い)です。

使用上のノート

SDO_UTIL.H3_KEYファンクションは、点の位置をUber社が設計した六角形の階層空間索引付けシステムに変換します。この索引付けシステムでは、世界が122の解像度0セルに分割され、それぞれ最上位レベル(レベル0)で4.4百万km2のセルになります。セルは二十面体(正二十面のポリゴン)にマッピングされます。解像度が上がるたびに、レベル15までさらに小さいセルに分割されます。レベル15には、それぞれ約1 m2のセルが569,707,381,193,162個あります。セルは、各レベルの12個の五角形以外は六角形です(球は六角形のみではタイル処理できません)。六角形は、さらに小さな六角形に正確に分割することはできません。その結果、親セルの境界付近のセルは、親セルに完全には含まれません。

H3は、常にSRID 4326座標系で計算されます。

次の例は、パリのH3セルを示しています。

SELECT SDO_UTIL.H3_KEY(48.85755957774311, 2.344920508484808, 7) FROM DUAL;
0877AA5145FFFFFF

次の例は、北極を含む最小のH3セル(レベル15)を示しています。

SELECT SDO_UTIL.H3_KEY(SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(0, 90, NULL), NULL, NULL), 15);
08F0326233AB0399

35.45 SDO_UTIL.H3_MBR

構文

SDO_UTIL.H3_MBR(
  h3_key IN RAW,
  exact  IN BOOLEAN DEFAULT TRUE
) RETURN SDO_GEOMETRY;

説明

指定されたH3セルのMBRを返します。

パラメータ

h3_key

H3セルを識別します。

exact
  • TRUE (デフォルト)の場合、MBRは正確です。
  • FALSEの場合、返されるMBRは、H3セルの中心とその解像度での最大のセル・サイズに基づいた矩形です。

使用上のノート

近似のMBRのほうが計算は速くなります。時間と精度のトレードオフがアプリケーションに適切であることを確認する必要があります。

次の例では、正確なMBR値を計算します。

SELECT SDO_UTIL.H3_MBR('0877AA5145FFFFFF', TRUE) FROM DUAL;

SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(48.8614522, 2.3465296, 48.8610871, 2.35865517, 48.8505953, 2.36541433,
48.8404669, 2.36004832, 48.840831, 2.34792133, 48.8513246, 2.34116178, 48.8614522,
2.3465296))

次の例では、正確なMBRを境界ボックスに変換します。

SELECT SDO_GEOM.SDO_MBR(SDO_UTIL.H3_MBR('0877AA5145FFFFFF', TRUE)) FROM DUAL;

SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3),
SDO_ORDINATE_ARRAY(48.8404669, 2.34116178, 48.8614522, 2.36541433))

次の例では、同じセルの近似のH3_MBRを計算します。

SELECT SDO_UTIL.H3_MBR('0877AA5145FFFFFF', FALSE) FROM DUAL;

SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3),
SDO_ORDINATE_ARRAY(48.8383005, 2.34064005, 48.8636193, 2.36593751))

35.46 SDO_UTIL.H3_PARENT

構文

SDO_UTIL.H3_PARENT(
  h3_key     IN RAW,
  resolution IN NUMBER DEFAULT NULL
) RETURN RAW;

説明

H3階層に基づいて、指定されたセルを含んでいるH3セル(64ビット(8バイトRAW) )を計算します。

パラメータ

h3_key

問い合せるH3セル。

resolution

含んでいるセルに必要なレベルを指定します。

H3_RESOLUTION(h3_key)は数値である必要があります。NULLの場合、直近の親(1レベル粗い)が返されます。

使用上のノート

H3階層内のセルは、常に親セルに厳密に含まれているわけではなく、極端な場合は、3レベル以上粗くても含んでいるセルが接していないこともあります。

特定のセルとほとんど重複する、数段上のレベルの粗い解像度のセルが必要な場合は、別の方法として、中心のH3セルを計算します。たとえば、SDO_UTIL.H3_KEY(SDO_UTIL.H3_CENTER(h3_key), resolution)のようにします。

次の例は、レベル7セルの親がレベル6セルであることを示しています。

SELECT SDO_UTIL.H3_RESOLUTION('0877AA5145FFFFFF') FROM DUAL;
7

SELECT SDO_UTIL.H3_PARENT('0877AA5145FFFFFF') FROM DUAL;
0867AA5147FFFFFF

SELECT SDO_UTIL.H3_RESOLUTION('0867AA5147FFFFFF') FROM DUAL;
6

関連トピック

35.47 SDO_UTIL.H3_PENTAGON_AREA

構文

SDO_UTIL.H3_PENTAGON_AREA(
  resolution IN NUMBER,
  unit       IN VARCHAR2 DEFAULT 'SQ_KM'
 ) RETURN NUMBER;

説明

指定された解像度の五角形のサイズを返します。

パラメータ

resolution

問い合せるH3レベル。

unit

使用する面積の測定単位(表6-26を参照)。

使用上のノート

特定のレベルのすべての五角形は、H3座標系(SRID 4326)では同じサイズです。

次の例は、最小のH3五角形(レベル15)の面積を示しています。

SELECT SDO_UTIL.H3_PENTAGON_AREA(15, 'SQ_M') FROM DUAL;
.452

35.48 SDO_UTIL.H3_PENTAGON_EDGELEN

構文

SDO_UTIL.H3_PENTAGON_EDGELEN(
  resolution IN NUMBER,
  unit       IN VARCHAR2 DEFAULT 'KM'
 ) RETURN NUMBER;

説明

指定された解像度で五角形のエッジの長さを返します。

パラメータ

resolution

問い合せるH3レベル。

unit

使用する面積の測定単位(表6-26を参照)。

使用上のノート

特定のレベルのすべての五角形は、H3座標系(SRID 4326)では同じサイズです。

次の例は、最大のH3五角形の一辺の長さを示しています。

SELECT SDO_UTIL.H3_PENTAGON_EDGELEN(0, 'KM') FROM DUAL;
1215.4

35.49 SDO_UTIL.H3_RESOLUTION

構文

SDO_UTIL.H3_RESOLUTION(
  h3_key     IN RAW
) RETURN NUMBER;

説明

H3セルの解像度を0(最も粗い)から15(最も細い)で返します。

パラメータ

h3_key

問い合せるH3セル。

使用上のノート

なし。

次の例は、H3セルの解像度を示しています。

SELECT SDO_UTIL.H3_RESOLUTION('0877AA5145FFFFFF');
7

関連トピック

35.50 SDO_UTIL.H3SUM_AS_TABLE

構文

SDO_UTIL.H3SUM_AS_TABLE(
  h3table_in      VARCHAR2,
  levelnum        NUMBER,
  mbr             SDO_GEOMETRY
)RETURN H3SUM_TAB_T PIPELINED;

説明

H3サマリー表から、H3SUM_TAB_T型の表として行を返します。

パラメータ

h3table_in

問い合せるH3サマリー表の名前。

levelnum

H3サマリー表内で問い合せるH3レベル。

mbr

検索問合せ。

使用上のノート

返される表には固定構造があり、すべての数値列が単一の配列として返されます。これらの列の情報は、H3サマリー表の列の名前に暗黙的に含まれ、同じ順序で返されます。

TYPE h3sum_row_t IS RECORD(
  hex           sdo_geometry,     -- The geometry of the hex
  levelnum      number(2),        -- The H3 level number
  h3            raw(8),           -- The h3 code of this cell
  cols          sdo_number_array  -- The payload data
);

TYPE h3sum_tab_t IS TABLE OF h3sum_row_t;

次のH3サマリー表は、3つのデータ・フィールドID_CNTID_MINおよびID_MAXを使用して作成されます。すべてのサマリー表には、LEVELNUM列およびKEY列が自動的に含まれます。

SQL> CREATE TABLE PARIS AS (SELECT * 
    FROM SDO_UTIL.H3SUM_AS_TABLE('WORLD_H3', 2, SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3),
         SDO_ORDINATE_ARRAY(48.8383005, 2.34064005, 48.8636193, 2.36593751))));

Table created.

SQL> DESCRIBE PARIS;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 HEX                                                MDSYS.SDO_GEOMETRY
 LEVELNUM                                           NUMBER(2)
 H3                                                 RAW(8)
 COLS                                               MDSYS.SDO_NUMBER_ARRAY

SQL> SELECT * FROM PARIS WHERE ROWNUM < 2;

HEX(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
--------------------------------------------------------------------------------
  LEVELNUM H3
---------- ----------------
COLS
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(48.4824473, .425072204, 48.9470689, 1.89827044, 47.8984915, 3.15671027, 46.3634494, 2.96578105, 45.8697755, 1.48783745, 46.9399386, .205091826, 48.4824473, .425072204))
         2 0827A17FFFFFFFFF
SDO_NUMBER_ARRAY(6, 40725, 40906)

前述の問合せ出力の値(6, 40725, 40906)は、H3サマリー表に出現するのと同じ順序で、3つのユーザー・データ列ID_CNTID_MINおよびID_MAXに対応します。

SQL> DESCRIBE WORLD_H3;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 LEVELNUM                                           NUMBER(2)
 KEY                                                RAW(8)
 ID_CNT                                             NUMBER
 ID_MIN                                             NUMBER
 ID_MAX                                             NUMBER

35.51 SDO_UTIL.H3SUM_CREATE_TABLE

構文

SDO_UTIL.H3SUM_CREATE_TABLE(
  table_out     IN VARCHAR2,  
  table_in      IN VARCHAR2,
  geomcol_spec  IN VARCHAR2,
  col_spec      IN VARCHAR2,
  max_H3_level  IN NUMBER DEFAULT 15,
  dop           IN NUMBER DEFAULT 16
);

説明

測地点データのH3サマリー表を作成します。

パラメータ

table_out

作成する表の名前。

table_in

測地(経度、緯度)座標系の点ジオメトリ情報を含む、入力表の名前。

geomcol_spec

点ジオメトリを含む列の説明。これは、点ジオメトリを含む列の名前('LOCATION'など)、またはカンマで区切られた(経度、緯度)ペアを形成する2つのNUMBER列の名前('X, Y'など)のいずれかです。

col_spec

結果表に集約する入力表の列のリストと、データを集約するルール。各フィールドに列名と集約演算をカンマで区切って指定し、各フィールドをセミコロンで区切ります。サポートされている演算は、MIN、MAX、AVG、SUM、CNTおよびANYです。値は、SQL関数MIN、MAX、AVG、SUM、COUNTおよびANY_VALUEを使用してそれぞれ計算されます。演算が指定されていない場合は、CNTが想定されます。値'1'は列名として使用でき、すべて1である値の列として機能します。

たとえば、'Name,CNT; Vehicles,AVG; col2; col3,MAX; col4,ANY'は、列NAME_CNT (null以外のName値をカウントする)、VEHICLES_AVGCOL2_CNTCOL3_MAXおよびCOL4_ANYを作成します。COUNTおよびANYは、数値以外の列で使用できる唯一の集計です。

max_H3_level

サマリー表に作成する最大レベル(最小セル)を指定します。

dop

パラレル化の程度を制御します。

dopがNULLの場合、パラレル化は要求されません。このパラメータを指定しない場合、デフォルトは16です。

H3SUM表は2つのステップで作成されます。まずデータ表自体が作成され、次に表に索引が作成されます。dopパラメータは、表作成と索引作成の両方に使用されます。

使用上のノート

H3解像度レベルごとに、指定された入力表の点データをH3の六角形ごとに1つのデータ行に集約する新しい表を作成します。単一点であるジオメトリのみが含まれます。点でないデータおよび複数点データは無視されます。H3値は、指定されたジオメトリ列から計算されます。ソース表のH3キー列(ある場合)は無視されます。

同じ六角形にあるすべての点のデータ値が結合されます。col_specは、結果の出力(H3サマリー)表に必要な数値列と、値を組み合せる方法を指定します。

表は、SDO_UTIL.H3SUM_GET_CURSORファンクションおよびSDO_UTIL.H3SUM_VECTORTILEファンクションによる高速アクセスのために索引付けされます。

例として、次のWORLD表を考えてみます。

SQL> describe WORLD
 Name                             Null?    Type
 -------------------------------- -------- -------------------
 X                                         NUMBER
 Y                                         NUMBER
 ID                                        NUMBER
 PT                                        PUBLIC.SDO_GEOMETRY
 INFO                                      VARCHAR2(20)

次のコードは、SDO_UTIL.H3SUM_CREATE_TABLEプロシージャを使用して、各六角形に結合された点の個数を単純に数えるH3サマリー表を作成します。

begin
sdo_util.h3sum_create_table('WORLD_H3', 'WORLD', 'pt', '1,CNT');
end;
/

H3サマリー表で次のSQL問合せを実行すると、点の個数は各レベルで同じですが、より粗いレベル(より小さいレベル番号)では六角形が大きくなり、数は少なくなることがわかります。レベル15にあったすべてのデータは、より粗いレベルのより少ない(より大きい)六角形に結合されています。

SQL> select levelnum, count(1), sum(id_cnt) from WORLD_H3 group by levelnum order by levelnum;

  LEVELNUM   COUNT(1) SUM(ID_CNT)
---------- ---------- -----------
         0        122       64621
         1        842       64621
         2       5882       64621
         3      38781       64621
         4      57074       64621
         5      61857       64621
         6      63650       64621
         7      64329       64621
         8      64442       64621
         9      64442       64621
        10      64442       64621

  LEVELNUM   COUNT(1) SUM(ID_CNT)
---------- ---------- -----------
        11      64442       64621
        12      64442       64621
        13      64442       64621
        14      64442       64621
        15      64442       64621

16 rows selected.

35.52 SDO_UTIL.H3SUM_ESTIMATE_RESOLUTION

構文

SDO_UTIL.H3SUM_ESTIMATE_RESOLUTION(
  h3_table     IN VARCHAR2 DEFAULT NULL,
  tile_zoom    IN NUMBER,
  hexes        IN NUMBER DEFAULT NULL
) RETURN NUMBER;

説明

指定されたタイルで、ほぼリクエストされた六角形の数になるH3解像度を示します。

パラメータ

h3_table

データのエクステントを取得するために使用されるH3表。NULLの場合、データ・エクステントはグローバルであると見なされます。

tile_zoom

ズーム値。この値は必須です。

hexes

指定されたタイルに必要な六角形の数。NULLの場合は、デフォルト値300が使用されます。

使用上のノート

SDO_UTIL.H3SUM_ESTIMATE_RESOLUTIONプロシージャは、0から15までの数値を戻します。

解像度を1ずつ増減すると、六角形の数は約7倍ずつ変化します。また、赤道付近のタイルは、極のタイルよりも130倍大きい領域を表すことに注意してください。したがって、タイル内の実際の六角形の数は目標値とは大きく異なります。

次の問合せの例では、SDO_UTIL.H3SUM_ESTIMATE_RESOLUTIONプロシージャを使用して、推定H3解像度を割り出します:

SELECT SDO_UTIL.H3SUM_ESTIMATE_RESOLUTION(tile_zoom=>7) FROM DUAL;

SDO_UTIL.H3SUM_ESTIMATE_RESOLUTION(TILE_ZOOM=>7)
------------------------------------------------
                                               5
SELECT SDO_UTIL.H3SUM_ESTIMATE_RESOLUTION(tile_zoom=>7, hexes=>500) FROM DUAL;

SDO_UTIL.H3SUM_ESTIMATE_RESOLUTION(500,TILE_ZOOM=>7)
----------------------------------------------------
                                                   6
SELECT SDO_UTIL.H3SUM_ESTIMATE_RESOLUTION('QUTTINIRPAAQ_H3', tile_zoom=>7, hexes=>500);


SDO_UTIL.H3SUM_ESTIMATE_RESOLUTION('QUTTINIRPAAQ_H3',TILE_ZOOM=>7,HEXES=>500)
-----------------------------------------------------------------------------
                                                                            7

35.53 SDO_UTIL.H3SUM_GET_CURSOR

構文

SDO_UTIL.H3SUM_GET_CURSOR(
  h3_table         IN VARCHAR2,
  levelnum         IN NUMBER,
  mbr              SDO_GEOMETRY
)RETURN SYS_REFCURSOR;

説明

指定されたlevelnumと検索mbrを使用してH3サマリー表を検索した結果のカーソルを作成します。

パラメータ

h3_table

問い合せるH3サマリー表の名前。

levelnum

H3サマリー表内で問い合せるH3レベル。

mbr

検索問合せ。

使用上のノート

なし。

35.54 SDO_UTIL.H3SUM_LIST_TABLES

構文

SDO_UTIL.H3SUM_LIST_TABLES(
  all_h3sum   BOOLEAN DEFAULT FALSE
)RETURN H3SUM_LIST_T PIPELINED;

説明

H3サマリー表のリストをMDSYS.SDO_UTIL.H3SUM_LIST_T型の表として返します。

パラメータ

all_h3sum

H3サマリー表のリスト。

デフォルトでは、現在のユーザー・スキーマの表のみが返されます。

使用上のノート

H3サマリー表は、その表に作成されたH3SUM固有の索引によって識別されます。

このファンクションは、MDSYS.SDO_UTIL.H3SUM_LIST_T型の表を返します。この表の定義は次のとおりです。

TYPE MDSYS.SDO_UTIL.H3SUM_LIST_ROW_T IS RECORD
(
  tsname          VARCHAR2(130),
  sdo_table_name  VARCHAR2(130)
);
TYPE MDSYS.SDO_UTIL.H3SUM_LIST_T IS TABLE OF H3SUM_LIST_ROW_T;

次の例では、ユーザーAスキーマ内のみにあるすべてのH3SUM表(AGG1_H3およびX180_H3)がリストされます。

SQL> select * from SDO_UTIL.H3SUM_LIST_TABLES();
TSNAME    SDO_TABLE_NAME
------ ----------------------
  A           AGG1_H3
  A           X180_H3

35.55 SDO_UTIL.H3SUM_VECTORTILE

構文

SDO_UTIL.H3SUM_VECTORTILE(
  h3_table         IN VARCHAR2,
  levelnum         IN NUMBER DEFAULT NULL,
  tile_x           IN NUMBER,
  tile_y           IN NUMBER,
  tile_zoom        IN NUMBER,
  layer_name       IN VARCHAR2 DEFAULT 'LAYER',
  tile_extent      IN NUMBER DEFAULT 4096,
  google_ts        IN BOOLEAN DEFAULT TRUE,
  max_features     IN NUMBER DEFAULT 20000
) RETURN BLOB;

または

FUNCTION H3SUM_VECTORTILE(
  h3_table         IN VARCHAR2,
  levelnum         IN NUMBER DEFAULT NULL,
  tile_x           IN NUMBER,
  tile_y_pbf       IN VARCHAR2,
  tile_zoom        IN NUMBER,
  layer_name       IN VARCHAR2 DEFAULT 'LAYER',
  tile_extent      IN NUMBER DEFAULT 4096,
  google_ts        IN BOOLEAN DEFAULT TRUE,
  max_features     IN NUMBER DEFAULT 20000
) RETURN BLOB;

説明

SDO_UTIL.H3SUM_CREATE_TABLEで作成されたH3サマリー表から、指定されたMVTベクター・タイルを作成して返します。

パラメータ

h3_table

問い合せるH3サマリー表。

levelnum

返すH3レベル。levelnumが、H3サマリー表の作成時に指定されたmax_H3_levelより大きい場合、データは返されません。指定しない場合、tile_zoom値に基づくデフォルト値が使用されます。

tile_x

フェッチするタイルの原点のX座標。

このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、max(X) = (2^tile_zoom) - 1で計算できます。有効範囲外のX座標を指定すると、例外が発生します。

tile_y

フェッチするタイルの原点のY座標(NUMBER形式)。

このパラメータの有効最小値はゼロです。有効最大値は、指定されたズームに依存し、max(Y) = (2^tile_zoom) - 1で計算できます。有効範囲外のY座標を指定すると、例外が発生します。

tile_y_pbf

tile_y_pbf値は、数値とその後の任意のファイル拡張子を指定するVARCHAR2文字列です。Y縦座標値は、文字列内のファイル拡張子を削除した後に抽出されます。たとえば、文字列値‘23.pbf’または‘23.XYZ’を考えてみます。次に、23がY座標値として抽出され、'.'の後のすべてが削除され、無視されます。

tile_zoom

地図の分割に必要なタイルの数を決定します。これらのセグメントは、地図全体を読み取ることなく、より高い解像度で結合できます。

たとえば、ゼロのtile_zoomは、詳細がそれほど表示されずに、地図全体が単一のタイルとなります。ntile_zoomは、地図を2^n x 2^n個のタイル(つまり、X軸に沿ったタイルの数にY軸に沿ったタイルの数を乗算した数)に分割します。たとえば、8tile_zoomでは、65,536個のタイルになります。nの値が大きいほど、タイル内の詳細度が高くなることを意味します。有効範囲外のパラメータ値では例外が発生することに注意してください。

layer_name

ベクター・タイルのレイヤーの名前。

これはオプションのパラメータです。ベクター・タイルでは、デフォルトの'LAYER'値を持つ単一のレイヤーのみがサポートされます。

tile_extent

タイルの幅と高さを表す整数座標。

これはオプションのパラメータです。デフォルト値の4096は、ベクター・タイルの高さが4096単位で、幅が4096単位であることを示します。これらの単位の実際のサイズは、タイルのズーム・レベルによって異なります。タイル内の2つの座標間の距離は、ズーム・レベル0のほうがズーム・レベル12よりもはるかに大きくなります。標準以外のタイル処理方法を使用する場合のみ、デフォルトのパラメータ値を変更することをお薦めします。

google_ts

Googleタイル処理方法が使用されているかどうかを示すブール値。

これはオプションのパラメータです。デフォルト値はTRUEで、これはGOOGLEタイル処理方法を示します。

タイル住所の読取り時には、次の2つのタイル処理方法がサポートされています。

  • GOOGLE (デフォルト): このタイル処理方法では、タイルの原点(X,Y)が北西の角になります。X座標はタイルが西から東に読み取られるにつれて増加します。Y座標はタイルが北から南に読み取られるにつれて増加します。
  • TMS: このタイル処理方法では、タイルの原点(X,Y)が南西の角になります。X座標はタイルが西から東に読み取られるにつれて増加しますが、Y座標はタイルが南から北に読み取られるにつれて増加します
max_features

レイヤーに含まれるフィーチャの最大数。

これはオプションのパラメータであり、デフォルト値は20000です。

ベクター・タイルはレイヤーで構成されます。レイヤーはフィーチャで構成されます。フィーチャは、タイル・エンベロープと相互作用するジオメトリおよびその属性列です。州全体または国全体を覆う大規模なタイル・エンベロープの場合、建物の数とその属性は非常に多くなる可能性があります。過剰な数のフィーチャの処理は、CPUとメモリーの両方でリソースを大量に消費する可能性があります。

したがって、このパラメータを使用すると、レイヤーに含めるフィーチャの最大数を制御できます。

使用上のノート

SDO_UTIL.H3SUM_VECTORTILEファンクションでは、特定のズーム・レベルで、どちらもNUMBER形式のX座標とY座標、またはNUMBER形式のX座標と.PBF接尾辞が付いたVARCHAR2形式のY座標を受け入れることができます。

どちらの場合も、H3サマリー表のデータは、指定されたタイルに表示されるH3セル(六角形と五角形)の境界のポリゴンのセットとして、関連付けられた列の値とともに戻されます。H3サマリー表がレベル15未満に制限されていた場合、サマリー表には、指定したレベルを超える値に対して返されるデータは存在しないため、空のタイルが返されます。タイル・パラメータ値とレンダリング制限は、SDO_UTIL.GET_VECTORTILEと同じです。

次の例では、ビジュアライゼーション・ソフトウェアが地図をレンダリングするためにSDO_UTIL.H3SUM_VECTORTILEファンクションを使用する方法について説明します。

SQL> SELECT dbms_lob.getlength(SDO_UTIL.H3SUM_VECTORTILE(H3_TABLE=>'WORLD_H3',LEVELNUM=>1,
        TILE_X=>2,TILE_Y=>2,TILE_ZOOM=>2)) "BLOBSIZE" FROM DUAL;

  BLOBSIZE
----------
     14304

35.56 SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS

構文

SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS;

説明

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

パラメータ

なし。

使用上のノート

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

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

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

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

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

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

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

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

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

関連トピック

なし。

35.57 SDO_UTIL.INSERT_SDO_GEOM_METADATA

構文

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

説明

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

パラメータ

owner

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

table_name

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

column_name

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

diminfo

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

srid

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

使用上のノート

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

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

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

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

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

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

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

関連トピック

35.58 SDO_UTIL.INTERIOR_POINT

構文

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

説明

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

パラメータ

geom

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

tol

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

使用上のノート

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

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

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

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

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

関連トピック

なし。

35.59 SDO_UTIL.POINT_AT_BEARING

構文

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

説明

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

パラメータ

start_point

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

bearing

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

distance

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

使用上のノート

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

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

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

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

35.60 SDO_UTIL.POLYGONTOLINE

構文

SDO_UTIL.POLYGONTOLINE(
     geometry  IN SDO_GEOMETRY 
     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

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

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

関連トピック

なし。

35.61 SDO_UTIL.RECTIFY_GEOMETRY

構文

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

説明

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

パラメータ

geometry

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

tolerance

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

使用上のノート

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

  • 重複する頂点

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

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

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

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

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

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

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

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

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

35.62 SDO_UTIL.REMOVE_DUPLICATE_VERTICES

構文

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

説明

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

パラメータ

geometry

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

tolerance

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

使用上のノート

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

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

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

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

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

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

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

関連トピック

なし。

35.63 SDO_UTIL.REVERSE_LINESTRING

構文

SDO_UTIL.REVERSE_LINESTRING(
     geometry  IN SDO_GEOMETRY 
     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

35.64 SDO_UTIL.SIMPLIFY

構文

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

説明

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

パラメータ

geometry

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

threshold

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

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

tolerance

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

remove_loops

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

使用上のノート

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

35.65 SDO_UTIL.SIMPLIFYVW

構文

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

説明

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

パラメータ

geometry

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

vertex_threshold

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

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

tolerance

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

remove_loops

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

使用上のノート

ノート:

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

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

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

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

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

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

35.66 SDO_UTIL.THEME3D_GET_BLOCK_TABLE

構文

SDO_UTIL.THEME3D_GET_BLOCK_TABLE(
     theme_name  IN VARCHAR2 
     ) RETURN NUMBER;

説明

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

パラメータ

theme_name

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

使用上のノート

ノート:

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

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

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

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

35.67 SDO_UTIL.THEME3D_HAS_LOD

構文

SDO_UTIL.THEME3D_HAS_LOD(
     theme_name  IN VARCHAR2 
     ) RETURN NUMBER;

説明

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

パラメータ

theme_name

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

使用上のノート

ノート:

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

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

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

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

35.68 SDO_UTIL.THEME3D_HAS_TEXTURE

構文

SDO_UTIL.THEME3D_HAS_TEXTURE(
     theme_name  IN VARCHAR2 
     ) RETURN NUMBER;

説明

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

パラメータ

theme_name

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

使用上のノート

ノート:

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

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

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

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

35.69 SDO_UTIL.TILE_GEOMETRY

構文

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

説明

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

パラメータ

geom

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

x_axis_min

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

x_axis_max

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

y_axis_min

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

y_axis_max

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

tile_resolution

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

resolution_factor

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

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

perform_intersection

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

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

compute_percent

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

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

geodetic_tolerance

デフォルトは0.05です。

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

使用上のノート

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

例1

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

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

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

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

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

例2

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

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

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

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

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

例3

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

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

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

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

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

35.70 SDO_UTIL.TO_GEOJSON

構文

SDO_UTIL.TO_GEOJSON(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

DECLARE
  cola_b_geom SDO_GEOMETRY;
  returned_geom SDO_GEOMETRY;
  returned_json CLOB;

BEGIN

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

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

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

END;
/

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

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

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

関連トピック

35.71 SDO_UTIL.TO_GML311GEOMETRY

構文

SDO_UTIL.TO_GML311GEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

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

パラメータ

geometry

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

使用上のノート

ノート:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

関連トピック

SDO_UTIL.TO_GMLGEOMETRY

35.72 SDO_UTIL.TO_GMLGEOMETRY

構文

SDO_UTIL.TO_GMLGEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

または

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

説明

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

パラメータ

geometry

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

coordOrder

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

使用上のノート

ノート:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SQL> SET LONG 80

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

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

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

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

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

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

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

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

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

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

関連トピック

SDO_UTIL.TO_GML311GEOMETRY

35.73 SDO_UTIL.TO_JSON

構文

SDO_UTIL.TO_JSON(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

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

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

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

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

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

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

35.74 SDO_UTIL.TO_JSON_VARCHAR

構文

SDO_UTIL.TO_JSON_VARCHAR(
     geometry  IN SDO_GEOMETRY 
     ) RETURN VARCHAR2;

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

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

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

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

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

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

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

35.75 SDO_UTIL.TO_KMLGEOMETRY

構文

SDO_UTIL.TO_KMLGEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

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

パラメータ

geometry

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

使用上のノート

ノート:

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

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

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

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

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

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

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

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

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

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

関連トピック

35.76 SDO_UTIL.TO_WKBGEOMETRY

構文

SDO_UTIL.TO_WKBGEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN BLOB;

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

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

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

35.77 SDO_UTIL.TO_WKTGEOMETRY

構文

SDO_UTIL.TO_WKTGEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

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

パラメータ

geometry

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

使用上のノート

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

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

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

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

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

35.78 SDO_UTIL.VALIDATE_3DTHEME

構文

SDO_UTIL.VALIDATE_3DTHEME(
     theme_name  IN VARCHAR2 
     ) RETURN VARCHAR2;

説明

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

パラメータ

theme_name

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

使用上のノート

ノート:

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

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

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

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

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

35.79 SDO_UTIL.VALIDATE_SCENE

構文

SDO_UTIL.VALIDATE_SCENE(
     scene_name  IN VARCHAR2 
     ) RETURN VARCHAR2;

説明

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

パラメータ

scene_name

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

使用上のノート

ノート:

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

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

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

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

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

35.80 SDO_UTIL.VALIDATE_VIEWFRAME

構文

SDO_UTIL.VALIDATE_VIEWFRAME(
     viewframe_name  IN VARCHAR2 
     ) RETURN VARCHAR2;

説明

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

パラメータ

viewframe_name

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

使用上のノート

ノート:

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

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

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

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

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

35.81 SDO_UTIL.VALIDATE_WKBGEOMETRY

構文

SDO_UTIL.VALIDATE_WKBGEOMETRY(
     geometry  IN BLOB 
     ) RETURN VARCHAR2;

説明

標準のWell-Known Binary (WKBまたはEWKB)形式の入力ジオメトリを検証します。入力が有効な場合は文字列TRUEを返し、入力が有効なWKBまたはEWKBでない場合はFALSEを返します。

パラメータ

geometry

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

使用上のノート

ノート:

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

有効にするために、入力ジオメトリは、Well-Known Binary (WKB)形式またはEWKB形式にすることができます。

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

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

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

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

35.82 SDO_UTIL.VALIDATE_WKTGEOMETRY

構文

SDO_UTIL.VALIDATE_WKTGEOMETRY(
     geometry  IN CLOB 
     ) RETURN VARCHAR2;

または

SDO_UTIL.VALIDATE_WKTGEOMETRY(
     geometry  IN VARCHAR2 
     ) RETURN VARCHAR2;

説明

入力ジオメトリ(CLOBまたはVARCHAR2型で、標準のWell-Known Text (WKTまたはEWKT)形式)を検証します。入力が有効な場合は文字列TRUEを返し、入力が有効なWKTまたはEWKTでない場合はFALSEを返します。

パラメータ

geometry

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

使用上のノート

ノート:

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

有効にするために、入力ジオメトリは、Well-Known Text (WKT)形式またはEWKT形式にすることができます。

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

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

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

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