26 SDO_GEOMパッケージ(ジオメトリ)

MDSIS.SDO_GEOMパッケージにはジオメトリ・オブジェクトを操作するためのサブプログラムが含まれています。

この章では、SDO_GEOMパッケージに含まれているジオメトリ関連のPL/SQLサブプログラムについて説明します。これらのサブプログラムは、次のように分類されます。

  • 2つのオブジェクト間の関係(TRUE/FALSE): RELATE、WITHIN_DISTANCE

  • 妥当性チェック: VALIDATE_GEOMETRY_WITH_CONTEXT、VALIDATE_LAYER_WITH_CONTEXT、SDO_SELF_UNION

  • 単一オブジェクトの処理: SDO_ALPHA_SHAPE、SDO_ARC_DENSIFY、SDO_AREA、SDO_BUFFER、SDO_CENTROID、SDO_CONVEXHULL、SDO_CONCAVEHULL、SDO_CONCAVEHULL_BOUNDARY、SDO_DIAMETER、SDO_DIAMETER_LINE、SDO_LENGTH、SDO_MBC、SDO_MBC_CENTER、SDO_MBC_RADIUS、SDO_MAX_MBR_ORDINATE、SDO_MIN_MBR_ORDINATE、SDO_MBR、SDO_POINTONSURFACE、SDO_TRIANGULATE、SDO_VOLUME、SDO_WIDTH、SDO_WIDTH_LINE

  • 2つのオブジェクトの処理: SDO_CLOSEST_POINTS、SDO_DISTANCE、SDO_DIFFERENCE、SDO_INTERSECTION、SDO_MAXDISTANCE、SDO_MAXDISTANCE_LINE、SDO_UNION、SDO_XOR

ジオメトリ・サブプログラムの使用については、次の内容に注意してください。(各サブプログラムのリファレンス情報にある「使用上のノート」も参照してください。)

  • 入力パラメータおよび処理の組合せによっては、NULL値が戻されます。この場合、ジオメトリは空です。たとえば、2つの非接続のジオメトリの交差部を問い合せた場合、NULL値が戻されます。

  • ジオメトリ・ファンクション(たとえば、SDO_GEOM.RELATE)の入力パラメータにNULL値(空のジオメトリ)を指定すると、エラーが発生します。

  • 一部の処理では、入力したジオメトリの1つまたは両方と、異なるタイプのジオメトリが戻される場合があります。たとえば、線と重なっているポリゴンとの交差部を問い合せた場合は線、2つの線の交差部を問い合せた場合は点、接している2つのポリゴンの交差部を問い合せた場合は線が戻されます。

  • SDO_GEOMサブプログラムは、2次元のジオメトリに対してのみサポートされています。ただし、次に示すサブプログラム(2次元と3次元の両方のジオメトリがサポートされる)を除きます。

    ノート:

    リストされている3次元ジオメトリに対するSDO_GEOMサブプログラムは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用Oracle Javaの使用で詳細を参照してください。

26.1 SDO_GEOM.RELATE

構文

SDO_GEOM.RELATE(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY,      
  mask   IN VARCHAR2,      
  geom2  IN SDO_GEOMETRY,      
  dim2   IN SDO_DIM_ARRAY       
) RETURN VARCHAR2;

または

SDO_GEOM.RELATE(     
  geom1  IN SDO_GEOMETRY,      
  mask   IN VARCHAR2,      
  geom2  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN VARCHAR2;

説明

2つのジオメトリ・オブジェクトの空間的関係を判断するために、2つのオブジェクトを検査します。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

mask

チェックする関係のリストを指定します。「使用上のノート」のキーワードのリストを参照してください。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

パフォーマンスを向上させるには、SDO_GEOM.RELATEファンクションを使用する必要がないかぎり、このファンクションのかわりにSDO_RELATE演算子またはその簡易演算子形式(「空間演算子」を参照)の1つを使用します。たとえば、SDO_RELATE演算子を使用する場合、DETERMINE maskキーワードは適用されません。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、「空間演算子、空間プロシージャおよび空間ファンクション」を参照してください。

SDO_GEOM.RELATEファンクションの戻り値には、次の種類があります。

  • maskに1つ以上の関係が登録されている場合、ジオメトリ・ペアについて1つ以上の関係が真であれば、指定されたmask値を戻します。すべての関係が偽であれば、プロシージャはFALSEを戻します。

  • maskのキーワードにDETERMINEを指定すると、ジオメトリ間の関係に最も一致する関係キーワードが1つ戻されます。

  • maskのキーワードにANYINTERACTを指定すると、2つのジオメトリが非接続でなければ、TRUEが戻されます。

maskでは、次の関係について判断します。

  • ANYINTERACT: オブジェクトが非接続ではない場合にTRUEを戻します。

  • CONTAINS: 第2オブジェクトが完全に第1オブジェクトの内部にあり、かつオブジェクト境界が接していない場合にCONTAINSを戻し、そうでない場合はFALSEを戻します。

  • COVEREDBY: 第1オブジェクトが完全に第2オブジェクトの内部にあり、かつオブジェクト境界が1つ以上の点で接している場合にCOVEREDBYを戻し、そうでない場合はFALSEを戻します。

  • COVERS: 第2オブジェクトが完全に第1オブジェクトの内部にあり、かつ境界が1つ以上の位置で接している場合にCOVERSを戻し、そうでない場合はFALSEを戻します。

  • DISJOINT: 2つのオブジェクトが、境界または内部の点を共有していない場合にDISJOINTを戻し、そうでない場合はFALSEを戻します。

  • EQUAL: オブジェクトの境界と内側(すべての穴を含む)が完全に重なる(つまり、2つのジオメトリが位相的に等しい)場合にEQUALを戻し、そうでない場合はFALSEを戻します。

  • INSIDE: 第1オブジェクトが完全に第2オブジェクトの内部にあり、かつオブジェクト境界が接していない場合にINSIDEを戻し、そうでない場合はFALSEを戻します。

  • ON: 線(第1オブジェクト)の境界および内部が完全にポリゴン(第2オブジェクト)の境界上に存在する場合にONを戻し、そうでない場合はFALSEを戻します。

  • OVERLAPBDYDISJOINT: 2つのオブジェクトは重なっているが、その境界が相互作用しない場合にOVERLAPBDYDISJOINTを戻し、そうでない場合はFALSEを戻します。

  • OVERLAPBDYINTERSECT: 2つのオブジェクトが重なり、かつその境界が1つ以上の位置で交差する場合にOVERLAPBDYINTERSECTを戻し、そうでない場合はFALSEを戻します。

  • TOUCH: 2つのオブジェクトが1つの境界点を共有しているが、内部の点は共有していない場合にTOUCHを戻し、そうでない場合はFALSEを戻します。

maskの値は、論理ブール演算子ORを使用して組み合せることができます。たとえば、ジオメトリ間の関係がINSIDEまたはTOUCHまたはINSIDEとTOUCHの両方である場合、「INSIDE + TOUCH」はINSIDE+TOUCHを戻し、ジオメトリ間の関係がINSIDEまたはTOUCHのいずれでもない場合、FALSEを戻します。

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

次の例では、SHAPE列内の各ジオメトリとcola_bジオメトリとの関係を調べます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。出力は、読みやすくするために変更が加えられています。)

SELECT c.name,
  SDO_GEOM.RELATE(c.shape, 'determine', c_b.shape, 0.005) relationship 
  FROM cola_markets c, cola_markets c_b WHERE c_b.name = 'cola_b';

NAME     RELATIONSHIP 
---------------------------                                  cola_a   TOUCH
cola_b   EQUAL
cola_c   OVERLAPBDYINTERSECT
cola_d   DISJOINT 

関連トピック

26.2 SDO_GEOM.SDO_ALPHA_SHAPE

構文

SDO_GEOM.SDO_ALPHA_SHAPE(     
  geom   IN SDO_GEOMETRY,      
  tol    IN NUMBER,      
  radius IN NUMBER DEFALT NULL,      
  flag   IN BINARY_INTEGER DEFAULT 0       
) RETURN SDO_GEOMETRY;

説明

指定されたradius値に基づいて、入力ジオメトリのアルファ・シェイプ・ジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

tol

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

radius

アルファ・シェイプの計算に使用する半径です。このパラメータがNULLの場合、アルファ・シェイプは入力ジオメトリの凸型です。

flag

孤立点およびエッジが含まれるかどうかを判断します(0 (ゼロ) (デフォルト)の場合、孤立点およびエッジが含まれるため、アルファ・シェイプが戻され、1の場合は、孤立点およびエッジが含まれないため、アルファ・シェイプのポリゴン部分のみが戻されます)。

使用上のノート

アルファ・シェイプは凸型を汎化したものです。このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割およびアルファ・シェイプの計算にそれらを使用します。

radiusパラメータの値を指定する場合は、最初にradius出力パラメータを含む形式を使用して、SDO_GEOM.SDO_CONCAVEHULLファンクションをコールする必要があります。

geomが点タイプであるか、頂点の数が3未満であるか、または直線上に存在する複数の点である場合や、radiusが0 (ゼロ)より小さい場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

次の例では、radiusパラメータのデフォルト値(NULL)が使用されるため、cola_cのアルファ・シェイプであり、cola_cの凸型部分でもあるジオメトリ・オブジェクトを戻します。(この簡単な例では、ポリゴンを入力ジオメトリとして使用しています(通常、このファンクションは、大量の点データで使用されます)。例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT c.name, SDO_GEOM.SDO_ALPHA_SHAPE(c.shape, 0.005)
  FROM cola_markets c WHERE c.name = 'cola_c';
 
SDO_GEOM.SDO_ALPHA_SHAPE(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(4, 5, 3, 3, 6, 3, 6, 5, 4, 5))

26.3 SDO_GEOM.SDO_ARC_DENSIFY

構文

SDO_GEOM.SDO_ARC_DENSIFY(     
  geom    IN SDO_GEOMETRY,      
  dim     IN SDO_DIM_ARRAY       
  params  IN VARCHAR2      
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_ARC_DENSIFY(
  geom    IN SDO_GEOMETRY,      
  tol     IN NUMBER       
  params  IN VARCHAR2      
) RETURN SDO_GEOMETRY;

説明

入力ジオメトリの各円弧が直線で構成される円弧の近似値に変更され、各円が円に近い一連の直線で構成されるポリゴンに変更されるジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

params

円弧の許容差および単位値(オプション)を引用符で囲んだ文字列を指定します。書式および意味については、「使用上のノート」を参照してください。

使用上のノート

円または円弧を含むジオメトリが投影座標系にある場合、このファンクションを使用してこれらのジオメトリを通常のポリゴンに稠密化できます。その後、その直線行ポリゴン・ジオメトリを空間操作に使用するか、またはこれらのジオメトリを投影座標系または測地座標系に変換できます。

paramsパラメータは、arc_toleranceキーワード、およびarc_tolerance値に関連付けられた測定単位を識別するunitキーワードを含むことができる、引用符で囲んだ文字列です。たとえば:

'arc_tolerance=0.05 unit=km'

arc_toleranceキーワードは、ジオメトリの各円弧について、円弧の表面と、円弧の開始点と終了点とを結ぶ直線の間の、垂直線の最大長を指定します。図26-1に、長さがA点とB点間の円弧のarc_tolerance値である線を示します。

図26-1 円弧の許容差

図26-1の説明は次にあります
図26-1「円弧の許容差」の説明

arc_toleranceキーワードの値は、ジオメトリに関連付けられた許容差より大きくする必要があります。(arc_toleranceのデフォルト値は、許容差の20倍です。)arc_toleranceキーワードの値を増やすと、結果のポリゴンの辺数が減少し、面積が小さくなります。arc_toleranceキーワードの値を減らすと、結果のポリゴンの辺数が増加し、面積が大きくなります(ただし、元のジオメトリより大きくなることはありません)。

unitキーワードを指定する場合、値はMDSYS.SDO_DIST_UNITS表のSDO_UNIT値('unit=KM'など)である必要があります。unitキーワードを指定しない場合、ジオメトリに関連付けられた測定単位が使用されます。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

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

-- Arc densification of the circle cola_d
SELECT c.name, SDO_GEOM.SDO_ARC_DENSIFY(c.shape, m.diminfo, 
                                       'arc_tolerance=0.05') 
  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';

NAME
--------------------------------
SDO_GEOM.SDO_ARC_DENSIFY(C.SHAPE,M.DIMINFO,'ARC_TOLERANCE=0.05')(SDO_GTYPE, SDO_
--------------------------------------------------------------------------------
cola_d
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(8, 7, 8.76536686, 7.15224093, 9.41421356, 7.58578644, 9.84775907, 8.23463314,
 10, 9, 9.84775907, 9.76536686, 9.41421356, 10.4142136, 8.76536686, 10.8477591,
8, 11, 7.23463314, 10.8477591, 6.58578644, 10.4142136, 6.15224093, 9.76536686, 6
, 9, 6.15224093, 8.23463314, 6.58578644, 7.58578644, 7.23463314, 7.15224093, 8,
7))

26.4 SDO_GEOM.SDO_AREA

構文

SDO_GEOM.SDO_AREA(     
  geom  IN SDO_GEOMETRY,      
  dim   IN SDO_DIM_ARRAY       
  [, unit  IN VARCHAR2]      
) RETURN NUMBER;

または

SDO_GEOM.SDO_AREA(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
  [, unit  IN VARCHAR2]      
) RETURN NUMBER;

説明

2次元ポリゴンの面積を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_AREA_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、たとえば'unit=SQ_KM')を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はm2です。

tol

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

使用上のノート

このファンクションは、穴のあるポリゴンを含め、すべてのポリゴンに対して使用できます。

輪を形成するために閉じている線には、面積がありません。

次の例では、COLA_MARKETS表に格納されているジオメトリ・オブジェクトの面積を戻します。最初の文ではすべてのオブジェクトの面積を戻し、2番目の文ではcola_aの面積のみを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the areas of all cola markets.
SELECT name, SDO_GEOM.SDO_AREA(shape, 0.005) FROM cola_markets;

NAME                             SDO_GEOM.SDO_AREA(SHAPE,0.005)
-------------------------------- ------------------------------
cola_a                                                       24
cola_b                                                     16.5
cola_c                                                        5
cola_d                                               12.5663706

-- Return the area of just cola_a.
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005) FROM cola_markets c 
   WHERE c.name = 'cola_a';

NAME                             SDO_GEOM.SDO_AREA(C.SHAPE,0.005)
-------------------------------- --------------------------------
cola_a                                                         24

関連トピック

なし。

26.5 SDO_GEOM.SDO_BUFFER

構文

SDO_GEOM.SDO_BUFFER(     
  geom   IN SDO_GEOMETRY,      
  dim    IN SDO_DIM_ARRAY,      
  dist   IN NUMBER      
  [, params  IN VARCHAR2]      
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_BUFFER(     
  geom   IN SDO_GEOMETRY,      
  dist   IN NUMBER,      
  tol    IN NUMBER       
  [, params  IN VARCHAR2]      
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの周りまたは内部にバッファ・ポリゴンを生成します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

dist

距離値。正の値の場合、ジオメトリの周りにバッファが生成されます。負の値の場合(ポリゴンにのみ有効)、ジオメトリの内部にバッファが生成されます。このパラメータの絶対値には、次元配列(dimパラメータ)またはtolパラメータに指定された許容差より大きい値を指定する必要があります。

tol

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

params

次のキーワードの1つまたは両方を含む、引用符で囲まれた文字列を指定します。

  • unitおよびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値。distパラメータ値および円弧の許容差(arc_toleranceキーワードが指定されている場合)に関連付けられた測定単位を識別します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

  • arc_toleranceおよび円弧の許容差。arc_toleranceキーワードの詳細は、この章に示すSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上のノート」を参照してください。

たとえば: 'unit=km arc_tolerance=0.05'

入力ジオメトリが測地データで、arc_toleranceが指定されていない場合、デフォルト値は許容差に20を掛けた値になります。Spatial and Graphではarc_tolerance値を使用して、結果の計算時に円弧を稠密化します。入力ジオメトリがデカルト・データまたは投影データである場合、arc_toleranceは無効になるため、指定する必要はありません。

デカルト・ジオメトリまたは投影ジオメトリにこのパラメータが指定されていない場合、または測地ジオメトリに対してarc_toleranceキーワードが指定されているにもかかわらずunitキーワードが指定されていない場合、データに関連付けられている測定単位が使用されます。

使用上のノート

このファンクションは、バッファ・ポリゴンを表現するジオメトリ・オブジェクトを戻します。

このファンクションは、点、線またはポリゴンの周り、あるいはポリゴンの内部を丸めたバッファを作成します。空間内のバッファも丸められ、内側の境界からの距離は、外側の境界から外側のバッファまでの距離と同じです。(詳細は、「空間関係およびフィルタ処理」の距離バッファの図を参照してください。)

バッファ・ポリゴン・ジオメトリが投影座標系にある場合、円弧を含みます。このジオメトリを測地座標系に変換する場合は、SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用してジオメトリを最初に稠密化してから変換します。

入力ジオメトリに50を超える座標があり、かつ、バッファの幅が、連続する座標の間の間隔の二乗平均平方根の0.1% (0.001)未満の場合、元のジオメトリが変更されることなく戻されます。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

測地データでは、このファンクションは比較的小さなジオメトリにのみ使用する必要があります。このようなジオメトリに対しては、内部計算に使用するローカル交差平面投影で重大なひずみやエラーが発生することはありません。これにより、線ストリングかポリゴンかに関係なく、ソース・ジオメトリの適用ドメインが、テキサス(米国)、フランスまたは満州(中国)のおよその領域に制限されます。

次の例では、cola_aの周りの1バッファを表現するポリゴンを戻します。戻されるポリゴンの角(たとえば、.292893219、.292893219)は、丸められています。(例では、「空間データの挿入、索引付けおよび問合せの例」の非測地定義およびデータを使用しています。)

-- Generate a buffer of 1 unit around a geometry.
SELECT c.name, SDO_GEOM.SDO_BUFFER(c.shape, m.diminfo, 1) 
  FROM cola_markets c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS'  AND m.column_name = 'SHAPE' 
  AND c.name = 'cola_a';

NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_BUFFER(C.SHAPE,M.DIMINFO,1)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
cola_a                                                                          
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1005, 8, 1, 2, 2, 5, 2, 1,
 7, 2, 2, 11, 2, 1, 13, 2, 2, 17, 2, 1, 19, 2, 2, 23, 2, 1), SDO_ORDINATE_ARRAY(
0, 1, .292893219, .292893219, 1, 0, 5, 0, 5.70710678, .292893219, 6, 1, 6, 7, 5.
70710678, 7.70710678, 5, 8, 1, 8, .292893219, 7.70710678, 0, 7, 0, 1))

次の例では、「座標系変換の例」の測地定義およびデータを使用して、cola_aの周りの1バッファを表現するポリゴンを戻します。

-- Generate a buffer of 1 kilometer around a geometry.
SELECT c.name, SDO_GEOM.SDO_BUFFER(c.shape, m.diminfo, 1, 
                                  'unit=km arc_tolerance=0.05')
 FROM cola_markets c, user_sdo_geom_metadata m 
 WHERE m.table_name = 'COLA_MARKETS' 
 AND m.column_name = 'SHAPE' AND c.name = 'cola_a';

NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_BUFFER(C.SHAPE,M.DIMINFO,1,'UNIT=KMARC_TOLERANCE=0.05')(SDO_GTYPE, 
--------------------------------------------------------------------------------
cola_a                                                                          
SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(.991023822, 1.00002073, .992223711, .995486419, .99551726, .99217077, 1.00001
929, .990964898, 4.99998067, .990964929, 5.00448268, .9921708, 5.00777624, .9954
86449, 5.00897618, 1.00002076, 5.00904194, 6.99997941, 5.00784065, 7.00450033, 5
.00454112, 7.00781357, 5.00002479, 7.009034, .999975166, 7.00903403, .995458814,
 7.00781359, .992159303, 7.00450036, .990958058, 6.99997944, .991023822, 1.00002
073))

26.6 SDO_GEOM.SDO_CENTROID

構文

SDO_GEOM.SDO_CENTROID(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_CENTROID(     
  geom1  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

ポリゴン、複数ポリゴン、点または点クラスタの中心にある点ジオメトリを戻します。(中心は「重心」とも呼ばれます。)

複数のオブジェクトで構成される入力ジオメトリの場合、ジオメトリ・オブジェクトの各ポリゴンの面積によって結果が重み付けされます。ジオメトリ・オブジェクトにポリゴンおよび点が混在する場合、中心の計算では点が使用されません。ジオメトリ・オブジェクトがすべて点で構成される場合、それらの点は均等に重み付けされます。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

このファンクションは、geom1がポリゴン、複数ポリゴン、点または点クラスタではない場合、NULL値を戻します。これは、SDO_GEOMETRYオブジェクトのSDO_GTYPE値によって識別します。

geom1が点である場合、このファンクションは点(入力ジオメトリ)を戻します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

入力ジオメトリの形および複雑さによっては、戻された点が入力ジオメトリ上にない場合があります。

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

-- Return the centroid of a geometry.
SELECT c.name, SDO_GEOM.SDO_CENTROID(c.shape, m.diminfo) 
  FROM cola_markets c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c.name = 'cola_c';

NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_CENTROID(C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z)
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
4.73333333, 3.93333333))

関連トピック

なし。

26.7 SDO_GEOM.SDO_CLOSEST_POINTS

構文

SDO_GEOM.SDO_CLOSEST_POINTS(     
  geom1          IN SDO_GEOMETRY,      
  geom2          IN SDO_GEOMETRY,      
  tolerance      IN NUMBER,       
  unit           IN VARCHAR2      
  [, ellipsoidal IN VARCHAR2 DEFAULT NULL]
) RETURN SDO_CLOSEST_POINTS_TYPE;

説明

2つのジオメトリ間で計算された最短距離、および最短距離を示す点(各ジオメトリに1つ)を含むオブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクト。

geom2

ジオメトリ・オブジェクト。

tolerance

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

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

ellipsoidal

測地データに楕円体距離を常に使用するか(true)、球体距離を使用する場合があるか(false、デフォルト)を指定します。「距離: 測地データでの球体対楕円体」を参照してください。

使用上のノート

このファンクションは、SDO_CLOSEST_POINTS_TYPE型の出力オブジェクトを戻します。これには、計算された最短距離(DIST)および最短距離に関連付けられた出力点ジオメトリ(GEOMAおよびGEOMB)が含まれます。Oracle Spatialでは、オブジェクト型SDO_CLOSEST_POINTS_TYPEを次のように定義します。
CREATE TYPE sdo_closest_points_type AS OBJECT (
    dist   NUMBER,
    geoma  SDO_GEOMETRY,
    geomb  SDO_GEOMETRY
);

2点間の距離が0(ゼロ)の場合、出力ジオメトリ(GEOMAおよびGEOMB)は、次のようになります。

  • 2次元(2D)ジオメトリでは、入力ジオメトリの1つが点ジオメトリの場合、各出力ジオメトリはその点です。それ以外の場合、各出力ジオメトリは入力ジオメトリの共通部分の最初の要素の最初の点です。

  • 3次元(3D)ジオメトリでは、入力ジオメトリの1つが点ジオメトリの場合、各出力ジオメトリはその点です。それ以外の場合、出力ジオメトリはnullです。

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

入力データが3次元で測地の場合、ジオメトリでは3D SRIDを使用する必要があります。それ以外の場合、結果は正しくありません。

次の例では、ジオメトリcola_ccola_d間の最短距離、および最短距離に関連付けられた各入力ジオメトリ上の1つの点を計算します。

結果のSDO_CLOSEST_POINTS_TYPEオブジェクトは、2つの入力ジオメトリと2つの出力点ジオメトリ間の最短距離2.47213595を示します。cola_cの最近点は(6,5)で、cola_dの最近点は(7.10557281, 7.21114562)です。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT sdo_geom.sdo_closest_points (c1.shape, c2.shape, 0.5, null) cp
FROM cola_markets c1, cola_markets c2
WHERE c1.name = 'cola_c'
AND c2.name = 'cola_d';

CP(DIST, GEOMA(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES), GEOMB(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES))
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SDO_CLOSEST_POINTS_TYPE(2.47213595, SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(6, 5, NULL), NULL, NULL), SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(7.10557281, 7.21114562, NULL), NULL, NULL))

関連トピック

なし。

26.8 SDO_GEOM.SDO_CONCAVEHULL

構文

SDO_GEOM.SDO_CONCAVEHULL(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_CONCAVEHULL(     
  geom   IN SDO_GEOMETRY,      
  tol    IN NUMBER,      
  radius OUT NUMBER       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_CONCAVEHULL(     
  geom  IN SDO_GEOMETRY_ARRAY,      
  tol   IN NUMBER       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_CONCAVEHULL(     
  geom   IN SDO_GEOMETRY_ARRAY,      
  tol    IN NUMBER,      
  radius OUT NUMBER       
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトまたはジオメトリ・オブジェクトの配列の凹型部分を表現するポリゴンタイプ・オブジェクトを戻します。

パラメータ

geom

ジオメトリ・オブジェクト(SDO_GEOMETRY型)またはジオメトリ・オブジェクトの配列(SDO_GEOMETRY_ARRAY型で、VARRAY OF SDO_GEOMETRYとして定義)。

tol

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

radius

凹型の計算時に(デローニ三角分割を使用して)内部的に作成される、三角形の外接円の半径を格納するための出力パラメータ。

使用上のノート

凹型は、点の集合などの入力ジオメトリの領域を表現するポリゴンです。複雑な入力ジオメトリでは、通常、凹型は凸型の領域よりも非常に小さくなっています。

このファンクションは、入力ジオメトリからすべての座標を取得し、それらを使用してデローニ三角分割を実行して、凹型を計算します。外部の輪のみを戻します。内部の輪は無視されます。

このファンクションでは、凹型の計算時にアルファ・シェイプを使用します。これに対し、SDO_GEOM.SDO_CONCAVEHULL_BOUNDARYファンクションでは、外側の境界点を使用します。

radiusパラメータを含む形式は、SDO_GEOM.SDO_ALPHA_SHAPEファンクションをコールする場合に役立つradius値を戻します。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

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

-- Return the concave hull of a polygon.
SELECT c.name, SDO_GEOM.SDO_CONCAVEHULL(c.shape, 0.005)
  FROM cola_markets c WHERE c.name = 'cola_c';
 
NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_CONCAVEHULL(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(6, 3, 6, 5, 4, 5, 3, 3, 6, 3))                                             

次の例では、3つのジオメトリ・オブジェクトの配列の凹型部分であるジオメトリを戻します。

SELECT sdo_geom.sdo_concavehull(SDO_GEOMETRY_ARRAY(
   SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 4),
      SDO_ORDINATE_ARRAY(6, 3, 6, 5, 4, 5, 3, 3)),
   SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 4),
      SDO_ORDINATE_ARRAY(16, 13, 16, 15, 14, 15, 13, 13)),
   SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 4),
      SDO_ORDINATE_ARRAY(26, 23, 26, 25, 24, 25, 23, 23))), 0.000005)
FROM dual;

SDO_GEOM.SDO_CONCAVEHULL(SDO_GEOMETRY_ARRAY(SDO_GEOMETRY(2005,NULL,NULL,SDO_ELEM
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(6, 3, 6, 5, 16, 13, 16, 15, 26, 23, 26, 25, 24, 25, 23, 23, 14, 15, 13, 13, 4
, 5, 3, 3, 6, 3))

26.9 SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY

構文

SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY(     
  geom   IN SDO_GEOMETRY,      
  tol    IN NUMBER,       
  length IN NUMBER DEFAULT NULL      
) RETURN SDO_GEOMETRY;

説明

アルファ・シェイプではなく境界点に基づいて、ジオメトリ・オブジェクトの凹型部分を表現するポリゴンタイプ・オブジェクトを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

tol

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

length

凹型のサイズを制御するための値(具体的には、凹型の最長エッジがlength値よりも短い場合は、凹型の計算が停止されます)。このため、length値が大きければ大きいほど、凹型も大きくなる可能性があります。このパラメータを指定しない場合、「使用上のノート」で説明するとおり、計算は続行されます。

使用上のノート

凹型は、点の集合などの入力ジオメトリの領域を表現するポリゴンです。複雑な入力ジオメトリでは、通常、凹型は凸型の領域よりも非常に小さくなっています。

SDO_GEOM.SDO_CONCAVEHULLファンクションと同様に、このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割の計算にそれらを使用します。ただしその後、凸型を計算し、境界エッジの長さに基づいて優先度キューにすべての境界エッジを入れ、(指定されたlengthパラメータ値によって停止されないかぎり、)形状が連結している単一のポリゴンであれば、1つずつエッジを削除します。1つのエッジが計算中に削除された場合、その三角形の他の2つのエッジが境界上にあります。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

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

-- Return the concave hull of a polygon.
SELECT c.name, SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY(c.shape, 0.005)
  FROM cola_markets c WHERE c.name = 'cola_c';
 
NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(6, 3, 6, 5, 4, 5, 3, 3, 6, 3))

26.10 SDO_GEOM.SDO_CONVEXHULL

構文

SDO_GEOM.SDO_CONVEXHULL(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY      
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_CONVEXHULL(     
  geom1  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの凸型部分を表現するポリゴンタイプ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

凸型は、ジオメトリ・オブジェクトを完全に囲む単純な凸型のポリゴンです。Spatial and Graphでは、指定したオブジェクトを完全に囲む最小ポリゴンを作成する場合に、使用する直線の辺をできるだけ少なくします。凸型は、複雑なジオメトリ・オブジェクトの近似値を取る場合に便利です。

ジオメトリ(geom1)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの凸型を計算します。ジオメトリ・オブジェクト(geom1)が円である場合、このファンクションは、円を囲む最小の矩形を戻します。

このファンクションは、geom1が点タイプであるか、頂点の数が3未満であるか、または直線上に存在する複数の点である場合、NULL値を戻します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

次の例では、cola_cの凸型部分のジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。ただし、ここでは、戻されるポリゴンが指定したポリゴンと同じ頂点を持ち、例としてはわかりにくくなっています。これは、指定したポリゴンが、単純な凸型のポリゴンであるためです。)

-- Return the convex hull of a polygon.
SELECT c.name, SDO_GEOM.SDO_CONVEXHULL(c.shape, m.diminfo) 
  FROM cola_markets c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c.name = 'cola_c';

NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_CONVEXHULL(C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, 
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(6, 3, 6, 5, 4, 5, 3, 3, 6, 3))

関連トピック

SDO_GEOM.SDO_CONCAVEHULL

26.11 SDO_GEOM.SDO_DIAMETER

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_DIAMETER(     
  geom  IN SDO_GEOMETRY,      
  dim   IN SDO_DIM_ARRAY      
  [, unit  IN VARCHAR2]      
) RETURN NUMBER;

または

SDO_GEOM.SDO_DIAMETER(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
  [, unit  IN VARCHAR2]      
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの直径の長さを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

使用上のノート

このファンクションは、円および円以外のジオメトリ・オブジェクトに使用できます。入力ジオメトリに曲線が含まれている必要はありません。

戻される直径の長さは、ジオメトリ・オブジェクトの2つの点の間の最大距離です。(diameterの正式な定義は、大学レベルの数学の教科書またはその他の適切なリファレンス・ソースを参照してください。)

入力ジオメトリは2つ以下の次元を持つことができます。

点ジオメトリが指定された場合、ファンクションは0 (ゼロ)を戻します。

次の例では、COLA_MARKETS表に格納されているすべてのジオメトリ・オブジェクトの直径の長さを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT name, SDO_GEOM.SDO_DIAMETER(shape, 0.005) Diameter
  FROM cola_markets;
 
NAME                               DIAMETER                                     
-------------------------------- ----------                                     
cola_a                           7.21110255                                     
cola_b                           6.70820393                                     
cola_c                           3.60555128                                     
cola_d                                    4

26.12 SDO_GEOM.SDO_DIAMETER_LINE

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_DIAMETER_LINE(     
  geom  IN SDO_GEOMETRY,      
  dim   IN SDO_DIM_ARRAY      
) RETURN NUMBER;

または

SDO_GEOM.SDO_DIAMETER_LINE(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの直径の長さを反映する線ストリング・ジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

このファンクションは、円および円以外のジオメトリ・オブジェクトに使用できます。入力ジオメトリに曲線が含まれている必要はありません。

戻される直径の長さは、ジオメトリ・オブジェクトの2つの点の間の最大距離です。(diameterの正式な定義は、大学レベルの数学の教科書またはその他の適切なリファレンス・ソースを参照してください。)

入力ジオメトリは2つ以下の次元を持つことができます。

点ジオメトリが指定された場合、ファンクションは0 (ゼロ)を戻します。

次の例では、COLA_MARKETS表に格納されている各ジオメトリ・オブジェクトの直径の長さを反映する線ストリングを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT name, SDO_GEOM.SDO_DIAMETER_LINE(shape, 0.005)
  FROM cola_markets;
 
NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_DIAMETER_LINE(SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_a                                                                          
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
1, 1, 5, 7))                                                                    
                                                                                
cola_b                                                                          
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
8, 1, 5, 7))                                                                    
                                                                                
cola_c                                                                          
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
3, 3, 6, 5))                                                                    
                                                                                
cola_d                                                                          
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
8, 7, 8, 11))

26.13 SDO_GEOM.SDO_DIFFERENCE

構文

SDO_GEOM.SDO_DIFFERENCE(     
  geom1 IN SDO_GEOMETRY,      
  dim1  IN SDO_DIM_ARRAY,      
  geom2 IN SDO_GEOMETRY,      
  dim2  IN SDO_DIM_ARRAY       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_DIFFERENCE(     
  geom1 IN SDO_GEOMETRY,      
  geom2 IN SDO_GEOMETRY,      
  tol   IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクトで位相的に差(MINUS演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

図26-2のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_DIFFERENCEを使用した場合に戻されるポリゴンです。

図26-2 SDO_GEOM.SDO_DIFFERENCE

図26-2の説明は次にあります
図26-2「SDO_GEOM.SDO_DIFFERENCE」の説明

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

次の例では、cola_acola_cの位相的な差(MINUS演算)となるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the topological difference of two geometries.
SELECT SDO_GEOM.SDO_DIFFERENCE(c_a.shape, m.diminfo, c_c.shape, m.diminfo) 
  FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_GEOM.SDO_DIFFERENCE(C_A.SHAPE,M.DIMINFO,C_C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(1, 7, 1, 1, 5, 1, 5, 3, 3, 3, 4, 5, 5, 5, 5, 7, 1, 7)

戻されたポリゴンのSDO_ORDINATE_ARRAYの開始および終了が、同一の点(1, 7)であることに注意してください。

26.14 SDO_GEOM.SDO_DISTANCE

構文

SDO_GEOM.SDO_DISTANCE(     
  geom1 IN SDO_GEOMETRY,      
  dim1  IN SDO_DIM_ARRAY,      
  geom2 IN SDO_GEOMETRY,      
  dim2  IN SDO_DIM_ARRAY       
  [, unit        IN VARCHAR2]      
  [, ellipsoidal IN VARCHAR2]      
) RETURN NUMBER;

または

SDO_GEOM.SDO_DISTANCE(     
  geom1 IN SDO_GEOMETRY,      
  geom2 IN SDO_GEOMETRY,      
  tol   IN NUMBER       
  [, unit        IN VARCHAR2]      
  [, ellipsoidal IN VARCHAR2]     
) RETURN NUMBER;

説明

2つのジオメトリ・オブジェクト間の最短距離、つまり、オブジェクトにある点またはセグメントのペアの最短距離を計算します。

パラメータ

geom1

geom2からの距離を計算するジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

geom1からの距離を計算するジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

ellipsoidal

測地データに楕円体距離を常に使用するか(true)、球体距離を使用する場合があるか(false、デフォルト)を指定します。「距離: 測地データでの球体対楕円体」を参照してください。

tol

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

使用上のノート

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

入力データが3次元で測地の場合、ジオメトリでは3D SRIDを使用する必要があります。それ以外の場合、結果は正しくありません。

次の例では、cola_bおよびcola_d間の最短距離が戻されます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the distance between two geometries.
SELECT SDO_GEOM.SDO_DISTANCE(c_b.shape, c_d.shape, 0.005)
   FROM cola_markets c_b, cola_markets c_d
   WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';

SDO_GEOM.SDO_DISTANCE(C_B.SHAPE,C_D.SHAPE,0.005)
------------------------------------------------
                                      .846049894

26.15 SDO_GEOM.SDO_INTERSECTION

構文

SDO_GEOM.SDO_INTERSECTION(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY,      
  geom2  IN SDO_GEOMETRY,      
  dim2   IN SDO_DIM_ARRAY       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_INTERSECTION(     
  geom1  IN SDO_GEOMETRY,      
  geom2  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクトで位相的に共通部分(AND演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

図26-3のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_INTERSECTIONを使用した場合に戻されるポリゴンです。

図26-3 SDO_GEOM.SDO_INTERSECTION

図26-3の説明が続きます
図26-3「SDO_GEOM.SDO_INTERSECTION」の説明

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

次の例では、cola_acola_cの位相的に共通部分(AND演算)となるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the topological intersection of two geometries.
SELECT SDO_GEOM.SDO_INTERSECTION(c_a.shape, c_c.shape, 0.005)
   FROM cola_markets c_a, cola_markets c_c 
   WHERE c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_GEOM.SDO_INTERSECTION(C_A.SHAPE,C_C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_PO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(4, 5, 3, 3, 5, 3, 5, 5, 4, 5))

戻されたポリゴンのSDO_ORDINATE_ARRAYの開始および終了が、同一の点(4,5)であることに注意してください。

26.16 SDO_GEOM.SDO_LENGTH

構文

SDO_GEOM.SDO_LENGTH(     
  geom  IN SDO_GEOMETRY,      
  dim   IN SDO_DIM_ARRAY      
  [, unit  IN VARCHAR2]      
  [, count_shared_edges  IN NUMBER]      
) RETURN NUMBER;

または

SDO_GEOM.SDO_LENGTH(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
  [, unit  IN VARCHAR2]      
  [, count_shared_edges  IN NUMBER]      
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの周囲または長さを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

count_shared_edges

(3次元のジオメトリにのみ適用)入力ジオメトリに完全にまたは部分的に共有されているエッジが含まれている場合に、エッジの共有部分の長さを合計するタイミングを指定します。この値には、1(1回ごとに合計する)または2(2回ごとに合計する)を指定します。デフォルトは1です。

このパラメータは、2次元の入力ジオメトリでは無視されます。

使用上のノート

指定したポリゴンに1つ以上の穴がある場合、外側の境界とすべての穴の周囲が計算されます。戻り値は、すべての周囲の合計です。

次の例では、COLA_MARKETS表に格納されているジオメトリ・オブジェクトのパラメータを戻します。最初の文ではすべてのオブジェクトの周囲を戻し、2番目の文ではcola_aの周囲のみを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the perimeters of all cola markets.
SELECT c.name, SDO_GEOM.SDO_LENGTH(c.shape, m.diminfo) 
  FROM cola_markets c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE';

NAME                             SDO_GEOM.SDO_LENGTH(C.SHAPE,M.DIMINFO)         
-------------------------------- --------------------------------------         
cola_a                                                               20         
cola_b                                                       17.1622777         
cola_c                                                       9.23606798         
cola_d                                                       12.5663706

-- Return the perimeter of just cola_a.
SELECT c.name, SDO_GEOM.SDO_LENGTH(c.shape, m.diminfo) 
  FROM cola_markets c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c.name = 'cola_a';

NAME                             SDO_GEOM.SDO_LENGTH(C.SHAPE,M.DIMINFO)         
-------------------------------- --------------------------------------         
cola_a                                                               20

関連トピック

なし。

26.17 SDO_GEOM.SDO_MAX_MBR_ORDINATE

構文

SDO_GEOM.SDO_MAX_MBR_ORDINATE(     
  geom         IN SDO_GEOMETRY,      
  ordinate_pos IN NUMBER      
) RETURN NUMBER;

または

SDO_GEOM.SDO_MAX_MBR_ORDINATE(     
  geom         IN SDO_GEOMETRY,      
  dim          IN SDO_DIM_ARRAY,      
  ordinate_pos IN NUMBER      
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最大値を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

ordinate_pos

ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第1の座標は1、第2の座標は2など)を指定します。たとえば、geomにXとYの2つの縦座標が指定されている場合、1はX座標値、2はY座標値を示します。

使用上のノート

なし。

次の例では、COLA_MARKETS表に含まれるcola_dジオメトリの最小境界矩形のX(第1)座標の最大値を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。SDO_GEOM.SDO_MBRファンクションの例では、cola_dの最小境界矩形が戻されます。)

SELECT SDO_GEOM.SDO_MAX_MBR_ORDINATE(c.shape, m.diminfo, 1)
  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';

SDO_GEOM.SDO_MAX_MBR_ORDINATE(C.SHAPE,M.DIMINFO,1)                              
--------------------------------------------------                              
                                                10

26.18 SDO_GEOM.SDO_MAXDISTANCE

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_MAXDISTANCE(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY,      
  geom2  IN SDO_GEOMETRY,      
  dim2   IN SDO_DIM_ARRAY       
  [, unit IN VARCHAR2]      
) RETURN NUMBER;

または

SDO_GEOM.SDO_MAXDISTANCE(     
  geom1  IN SDO_GEOMETRY,      
  geom2  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
  [, unit IN VARCHAR2]      
) RETURN NUMBER;

説明

2つのジオメトリ・オブジェクト間の最長距離を計算します。2つのジオメトリ・オブジェクト間の最大距離とは、それらのオブジェクトにある点またはセグメントのペアの最長距離です。

パラメータ

geom1

geom2からの距離を計算するジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

geom1からの距離を計算するジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

tol

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

使用上のノート

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

入力ジオメトリは2つ以下の次元を持つことができます。

次の例では、cola_bおよびcola_d間の最大距離が戻されます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT SDO_GEOM.SDO_MAXDISTANCE(c_b.shape, c_d.shape, 0.005)
  FROM cola_markets c_b, cola_markets c_d
  WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';
 
SDO_GEOM.SDO_MAXDISTANCE(C_B.SHAPE,C_D.SHAPE,0.005)                        
---------------------------------------------------                        
                                         10.5440037

26.19 SDO_GEOM.SDO_MAXDISTANCE_LINE

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_MAXDISTANCE_LINE(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY,      
  geom2  IN SDO_GEOMETRY,      
  dim2   IN SDO_DIM_ARRAY       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_MAXDISTANCE_LINE(     
  geom1  IN SDO_GEOMETRY,      
  geom2  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクト間の最大距離を計算し、最大距離を反映する線ストリング・ジオメトリを戻します。2つのジオメトリ・オブジェクト間の最大距離とは、それらのオブジェクトにある点またはセグメントのペアの最長距離です。戻されるジオメトリは、点またはセグメントのこの最長ペア間の直線です。

パラメータ

geom1

geom2からの距離を計算するジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

geom1からの距離を計算するジオメトリ・オブジェクトを指定します。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

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

入力ジオメトリは2つ以下の次元を持つことができます。

次の例では、cola_bおよびcola_d間の最大距離を反映する線ストリングが戻されます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT SDO_GEOM.SDO_MAXDISTANCE_LINE(c_b.shape, c_d.shape, 0.005)
  FROM cola_markets c_b, cola_markets c_d
  WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';
 
SDO_GEOM.SDO_MAXDISTANCE_LINE(C_B.SHAPE,C_D.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 1, 8.70224688, 10.8726584))

26.20 SDO_GEOM.SDO_MBC

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_MBC(     
  geom          IN SDO_GEOMETRY,      
  dim           IN SDO_DIM_ARRAY,      
  arc_tolerance IN NUMBER DEFAULT NULL      
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_MBC(     
  geom          IN SDO_GEOMETRY,      
  tol           IN NUMBER,      
  arc_tolerance IN NUMBER DEFAULT NULL      
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの最小境界円(MBC)を表現する円オブジェクトを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

arc_tolerance

円弧の許容差値(SDO_GEOM.SDO_ARC_DENSIFYの「使用上のノート」にあるarc_toleranceキーワードの説明を参照)。このパラメータは主に測地円弧の稠密化に使用されます。

使用上のノート

最小境界円は、ジオメトリを最小に囲む円です。

ジオメトリ(geom)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの最小境界円を計算します。このため、たとえば入力ジオメトリが円の場合、計算されるMBCは入力ジオメトリより大きくなります。

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

-- Return the MBC of cola_a.
SELECT c.name, SDO_GEOM.SDO_MBC(c.shape, 0.005) FROM cola_markets c
  WHERE c.name = 'cola_a';
 
NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_MBC(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELE
--------------------------------------------------------------------------------
cola_a                                                                          
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 4), SDO_ORDINATE_ARR
AY(3, .394448725, 6.60555128, 4, 3, 7.60555128))

26.21 SDO_GEOM.SDO_MBC_CENTER

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_MBC_CENTER(     
  geom   IN SDO_GEOMETRY,      
  dim    IN SDO_DIM_ARRAY      
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_MBC_CENTER(     
  geom   IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの最小境界円(MBC)の中心を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

最小境界円は、ジオメトリを最小に囲む円です。

ジオメトリ(geom)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの最小境界円を計算します。

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

-- Return the MBC center of cola_a.
SQL> SELECT c.name, SDO_GEOM.SDO_MBC_CENTER(c.shape, 0.005) FROM cola_markets c
  2  	WHERE c.name = 'cola_a';
 
NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_MBC_CENTER(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), 
--------------------------------------------------------------------------------
cola_a                                                                          
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
3, 4))

26.22 SDO_GEOM.SDO_MBC_RADIUS

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_MBC_RADIUS(     
  geom  IN SDO_GEOMETRY,      
  dim   IN SDO_DIM_ARRAY,      
  unit  IN VARCHAR2 DEFAULT NULL      
) RETURN NUMBER;

または

SDO_GEOM.SDO_MBC_RADIUS(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER,      
  unit  IN VARCHAR2 DEFAULT NULL      
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの最小境界円(MBC)の半径の長さを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

使用上のノート

最小境界円は、ジオメトリを最小に囲む円です。

ジオメトリ(geom)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの最小境界円を計算します。このため、たとえば入力ジオメトリが円の場合、計算されるMBCの半径の長さは入力ジオメトリの半径の長さより大きくなります。

次の例は、cola_aの最小境界円の半径の長さを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the MBC radius of cola_a.
SELECT c.name, SDO_GEOM.SDO_MBC_RADIUS(c.shape, 0.005) FROM cola_markets c
  WHERE c.name = 'cola_a';
 
NAME                             SDO_GEOM.SDO_MBC_RADIUS(C.SHAPE,0.005)         
-------------------------------- --------------------------------------         
cola_a                                                       3.60555128

26.23 SDO_GEOM.SDO_MBR

構文

SDO_GEOM.SDO_MBR(     
  geom   IN SDO_GEOMETRY      
  [, dim IN SDO_DIM_ARRAY]      
) RETURN SDO_GEOMETRY;

説明

ジオメトリ・オブジェクトの最小境界矩形(ジオメトリを囲む最小の矩形)を戻します。

ノート:

SDO_GEOM_MBRは、このファンクションと機能的に同じSQL演算子ですが、より優れたパフォーマンスが提供されます。詳細は、「使用上のノート」にある「パフォーマンス向上のための代替演算子SDO_GEOM_MBR」を参照してください。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

使用上のノート

このファンクションは、適切なMBRを作成できない場合はMBRジオメトリを戻しません。具体的には、次のとおりです。

  • 入力ジオメトリがNULLである場合は、NULLのジオメトリを戻します。

  • 入力ジオメトリが点である場合は、点を戻します。

  • 入力ジオメトリが直線上に存在する複数の点である場合は、2点線を戻します。

  • 入力ジオメトリに3つの次元が含まれていても、すべてのZ次元値が同じである場合は、3次元の線を戻します。

パフォーマンス向上のための代替演算子SDO_GEOM_MBR

SDO_GEOM_MBRは、SDO_GEOM.SDO_MBRファンクションと機能的に同じSQL演算子ですが、より優れたパフォーマンスが提供されます。

SDO_GEOM_MBR演算子は、次のようなSQL問合せ内で使用する必要があります。

SELECT sdo_geom_mbr(geom) INTO g FROM DUAL;

また、次のように、同じ問合せ内で複数のSDO_GEOM_MBR演算子を使用することもできます。

SELECT sdo_geom_mbr(geom1), sdo_geom_mbr(geom2) INTO g1, g2 FROM DUAL;

次の例にあるSDO_GEOM_MBR演算子の例も参照してください。

次の例では、COLA_MARKETS表のcola_dジオメトリの最小境界矩形を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。cola_dは円であるため、この場合の最小境界矩形は正方形になります。)

-- Return the minimum bounding rectangle of cola_d (a circle).
SELECT SDO_GEOM.SDO_MBR(c.shape, m.diminfo) 
  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';

SDO_GEOM.SDO_MBR(C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(6, 7, 10, 11))

次の例は、前述の例と機能的に同じですが、SDO_GEOM_MBR演算子を使用しています。

-- Return the minimum bounding rectangle of cola_d (a circle).
SELECT SDO_GEOM_MBR(c.shape) 
  FROM cola_markets c WHERE c.name = 'cola_d';

SDO_GEOM_MBR(C.SHAPE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(6, 7, 10, 11))

26.24 SDO_GEOM.SDO_MIN_MBR_ORDINATE

構文

SDO_GEOM.SDO_MIN_MBR_ORDINATE(     
  geom         IN SDO_GEOMETRY,      
  ordinate_pos IN NUMBER      
) RETURN NUMBER;

または

SDO_GEOM.SDO_MIN_MBR_ORDINATE(     
  geom         IN SDO_GEOMETRY,      
  dim          IN SDO_DIM_ARRAY,      
  ordinate_pos IN NUMBER      
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最小値を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

ordinate_pos

ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第1の座標は1、第2の座標は2など)を指定します。たとえば、geomにXとYの2つの縦座標が指定されている場合、1はX座標値、2はY座標値を示します。

使用上のノート

なし。

次の例では、COLA_MARKETS表に含まれるcola_dジオメトリの最小境界矩形のX (第1)座標の最小値を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。SDO_GEOM.SDO_MBRファンクションの例では、cola_dの最小境界矩形が戻されます。)

SELECT SDO_GEOM.SDO_MIN_MBR_ORDINATE(c.shape, m.diminfo, 1)
  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';

SDO_GEOM.SDO_MIN_MBR_ORDINATE(C.SHAPE,M.DIMINFO,1)                              
--------------------------------------------------                              
                                                 6 

26.25 SDO_GEOM.SDO_POINTONSURFACE

構文

SDO_GEOM.SDO_POINTONSURFACE(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_POINTONSURFACE(     
  geom1  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

ポリゴンのジオメトリ・オブジェクト上にある点を戻します。

パラメータ

geom1

ポリゴンのジオメトリ・オブジェクトを指定します。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

geom1上にある点を表現する、点のジオメトリ・オブジェクトを戻します。ただし、内部の点である保証はありません。(つまり、geom1の境界またはエッジ上であることもあります。)

ジオメトリ・オブジェクト上のどこにある点でも、戻り値になる可能性があります。戻される点に対して位置を指定することはできません。また、同じパラメータ値を指定してこのファンクションを複数回コールする場合、同じ点を戻す、または異なる点を戻す、という指定はできません。

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

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

-- Return a point on the surface of a geometry.
SELECT SDO_GEOM.SDO_POINTONSURFACE(c.shape, m.diminfo) 
  FROM cola_markets c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c.name = 'cola_a';

SDO_GEOM.SDO_POINTONSURFACE(C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, SDO_POINT(X,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(
1, 1))

関連トピック

なし。

26.26 SDO_GEOM.SDO_SELF_UNION

構文

SDO_GEOM.SDO_SELF_UNION(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY,      
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_SELF_UNION(     
  geom1  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

1つのジオメトリ・オブジェクトの位相的な自己和集合となる有効なジオメトリ・オブジェクトを戻します。無効の場合があります。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

このファンクションは、ジオメトリを無効にする場合がある、次のような問題を修正するために使用できます。

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

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

次の例では、無効なポリゴンの位相的な自己和集合である有効なジオメトリ・オブジェクトを戻します。

-- Return the topological self union of an invalid geometry.
SELECT SDO_GEOM.SDO_SELF_UNION(
  SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), 
    SDO_ORDINATE_ARRAY(1, 1, 1, 4, 4, 4, 4, 1, 1, 1)), 
  0.00005) 
FROM dual;
 
SDO_GEOM.SDO_SELF_UNION(SDO_GEOMETRY(2003,NULL,NULL,SDO_ELEM_INFO_ARRAY(1,1003,1
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(1, 4, 1, 1, 4, 1, 4, 4, 1, 4))

26.27 SDO_GEOM.SDO_TRIANGULATE

構文

SDO_GEOM.SDO_TRIANGULATE(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

入力ジオメトリのデローニ三角分割によって生成される三角形の要素を含むジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

tol

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

使用上のノート

このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割の計算にそれらを使用して、各要素が三角形のジオメトリ・オブジェクトを戻します。

geomが、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。

測地データの場合、このファンクションは、近似処理によってサポートされます(「測地データでの近似処理によってサポートされるファンクション」を参照)。

次の例では、cola_cポリゴン・ジオメトリを構成する三角形の要素(この場合は2つ)で構成されるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。

-- Return triangles comprising a specified polygon.
SELECT c.name, SDO_GEOM.SDO_TRIANGULATE(c.shape, 0.005)
  FROM cola_markets c WHERE c.name = 'cola_c';
 
NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_TRIANGULATE(C.SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z),
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 9, 1003, 1), SDO_
ORDINATE_ARRAY(3, 3, 6, 3, 4, 5, 3, 3, 4, 5, 6, 3, 6, 5, 4, 5))

関連トピック

SDO_GEOM.SDO_ALPHA_SHAPE

26.28 SDO_GEOM.SDO_UNION

構文

SDO_GEOM.SDO_UNION(     
  geom1 IN SDO_GEOMETRY,      
  dim1  IN SDO_DIM_ARRAY,      
  geom2 IN SDO_GEOMETRY,      
  dim2  IN SDO_DIM_ARRAY       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_UNION(     
  geom1 IN SDO_GEOMETRY,      
  geom2 IN SDO_GEOMETRY,      
  tol   IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクトで位相的な結合部分(OR演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

図26-4のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_UNIONを使用した場合に戻されるポリゴンです。

図26-4 SDO_GEOM.SDO_UNION

図26-4の説明が続きます
図26-4「SDO_GEOM.SDO_UNION」の説明

位相的な和集合操作を実行せずにジオメトリを他のジオメトリに追加するだけで十分な場合、および両方のジオメトリが非接続である場合は、SDO_UTIL.APPENDファンクション(「SDO_UTILパッケージ(ユーティリティ)」を参照)を使用する方がSDO_UNIONファンクションより高速です。

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

次の例では、cola_acola_cの位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the topological union of two geometries.
SELECT SDO_GEOM.SDO_UNION(c_a.shape, m.diminfo, c_c.shape, m.diminfo) 
  FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_GEOM.SDO_UNION(C_A.SHAPE,M.DIMINFO,C_C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID,
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(5, 5, 5, 7, 1, 7, 1, 1, 5, 1, 5, 3, 6, 3, 6, 5, 5, 5))

戻されたポリゴンのSDO_ORDINATE_ARRAYの開始および終了が、同一の点(5, 5)であることに注意してください。

26.29 SDO_GEOM.SDO_VOLUME

構文

SDO_GEOM.SDO_VOLUME(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
  [, unit IN VARCHAR2]      
) RETURN NUMBER;

説明

3次元ソリッドの容積を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

tol

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

unit

測定単位(unit=および容積単位を引用符で囲んだ文字列で、'unit=CUBIC_FOOT''unit=CUBIC_METER'など)を指定します。容積単位のリストについては、次の問合せを入力します。

SELECT short_name FROM mdsys.sdo_units_of_measure WHERE unit_of_meas_type = 'volume';

測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。

使用上のノート

このファンクションは、穴のあるソリッドを含め、すべてのソリッドに対して使用できます。

このファンクションは、測地データではサポートされません。

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

次の例では、ソリッド・ジオメトリ・オブジェクトの容積を戻します。

-- Return the volume of a solid geometry.
SELECT p.id, SDO_GEOM.SDO_VOLUME(p.geometry, 0.005) FROM polygons3d p
  WHERE p.id = 12;

        ID SDO_GEOM.SDO_VOLUME(P.GEOMETRY,0.005)
---------- -------------------------------------
        12                                     6

関連トピック

なし。

26.30 SDO_GEOM.SDO_WIDTH

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_WIDTH(     
  geom  IN SDO_GEOMETRY,      
  dim   IN SDO_DIM_ARRAY      
  [, unit IN VARCHAR2]      
) RETURN NUMBER;

または

SDO_GEOM.SDO_WIDTH(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
  [, unit IN VARCHAR2]      
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの幅を戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

unit

測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

使用上のノート

凸型のポリゴンの場合、幅は平行な支持線の間の最小距離です。

凸型以外のジオメトリでは、このファンクションは凸型ジオメトリを決定し、その凸型ジオメトリの幅を戻します。

入力ジオメトリは2つ以下の次元を持つことができます。

点ジオメトリが指定された場合、ファンクションは0 (ゼロ)を戻します。

次の例では、COLA_MARKETS表に格納されているすべてのジオメトリ・オブジェクトの幅を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT name, SDO_GEOM.SDO_WIDTH(shape, 0.005) Width
  FROM cola_markets;
 
NAME                                  WIDTH                                     
-------------------------------- ----------                                     
cola_a                                    4                                     
cola_b                                    3                                     
cola_c                                    2                                     
cola_d                                    4 

26.31 SDO_GEOM.SDO_WIDTH_LINE

ノート:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

構文

SDO_GEOM.SDO_WIDTH(_LINE     
  geom  IN SDO_GEOMETRY,      
  dim   IN SDO_DIM_ARRAY      
) RETURN NUMBER;

または

SDO_GEOM.SDO_WIDTH_LINE(     
  geom  IN SDO_GEOMETRY,      
  tol   IN NUMBER       
) RETURN NUMBER;

説明

ジオメトリ・オブジェクトの幅を反映する線ストリング・ジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクト。

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

凸型のポリゴンの場合、幅は平行な支持線の間の最小距離です。

凸型以外のジオメトリでは、このファンクションは凸型ジオメトリを決定し、その凸型ジオメトリの幅を戻します。

入力ジオメトリは2つ以下の次元を持つことができます。

点ジオメトリが指定された場合、ファンクションは0 (ゼロ)を戻します。

次の例では、COLA_MARKETS表に格納されている各ジオメトリ・オブジェクトの幅を反映する線ストリングを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT name, SDO_GEOM.SDO_WIDTH_LINE(shape, 0.005)
  FROM cola_markets;
 
NAME                                                                            
--------------------------------                                                
SDO_GEOM.SDO_WIDTH_LINE(SHAPE,0.005)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SD
--------------------------------------------------------------------------------
cola_a                                                                          
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
5, 7, 1, 7))                                                                    
                                                                                
cola_b                                                                          
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
8, 7, 5, 7))                                                                    
                                                                                
cola_c                                                                          
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
3, 5, 3, 3))                                                                    
                                                                                
cola_d                                                                          
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
10, 11, 6, 11))

26.32 SDO_GEOM.SDO_XOR

構文

SDO_GEOM.SDO_XOR(     
  geom1  IN SDO_XOR,      
  dim1   IN SDO_DIM_ARRAY,      
  geom2  IN SDO_GEOMETRY,      
  dim2   IN SDO_DIM_ARRAY       
) RETURN SDO_GEOMETRY;

または

SDO_GEOM.SDO_XOR(     
  geom1  IN SDO_GEOMETRY,      
  geom2  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
) RETURN SDO_GEOMETRY;

説明

2つのジオメトリ・オブジェクトで位相的に排他的論理和(XOR演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

使用上のノート

図26-5のグレーの領域は、四角形geom1ともう1つのポリゴンgeom2でSDO_XORを使用した場合に戻されるポリゴンです。

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

次の例では、cola_acola_cの位相的な排他的論理和(XOR演算)となるジオメトリ・オブジェクトを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Return the topological symmetric difference of two geometries.
SELECT SDO_GEOM.SDO_XOR(c_a.shape, m.diminfo, c_c.shape, m.diminfo) 
  FROM cola_markets c_a, cola_markets c_c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c_a.name = 'cola_a' AND c_c.name = 'cola_c';

SDO_GEOM.SDO_XOR(C_A.SHAPE,M.DIMINFO,C_C.SHAPE,M.DIMINFO)(SDO_GTYPE, SDO_SRID, S
--------------------------------------------------------------------------------
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 19, 1003, 1), SDO
_ORDINATE_ARRAY(1, 7, 1, 1, 5, 1, 5, 3, 3, 3, 4, 5, 5, 5, 5, 7, 1, 7, 5, 5, 5, 3
, 6, 3, 6, 5, 5, 5))

戻されるポリゴンは複数ポリゴン(SDO_GTYPE = 2007)であり、SDO_ORDINATE_ARRAYには、次の2つのポリゴンが記述されています。1つは(1, 7)で開始および終了し、もう1つは(5, 5)で開始および終了します。

26.33 SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT

構文

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(     
  theGeometry  IN SDO_GEOMETRY,      
  theDimInfo   IN SDO_DIM_ARRAY,      
  conditional  IN VARCHAR2 DEFAULT 'TRUE' ,      
  flag10g      IN VARCHAR2 DEFAULT 'FALSE'       
) RETURN VARCHAR2;

または

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(     
  theGeometry  IN SDO_GEOMETRY,      
  tolerance    IN NUMBER,      
  conditional  IN VARCHAR2 DEFAULT 'TRUE' ,      
  flag10g      IN VARCHAR2 DEFAULT 'FALSE'       
) RETURN VARCHAR2;

説明

ジオメトリ・タイプが有効であるかどうかの一貫性チェックを行い、ジオメトリが無効な場合、コンテキスト情報を戻します。このファンクションは、表から得られるジオメトリの表現を、要素定義と対比して確認します。

パラメータ

theGeometry

ジオメトリ・オブジェクト。

theDimInfo

theGeometryに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tolerance

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

conditional

条件付きのフラグを指定します(3次元の複合表面または複合ソリッドにのみ適用)。文字列値がTRUE (デフォルト)である場合、2つの外部の輪が同じ平面にあり、エッジを共有していると、検証は行われなくなります。文字列値がFALSEである場合、2つの外部の輪が同じ平面にあり、エッジを共有していても検証を行います。

flag10g

Oracle Database 10g互換性フラグ。文字列値がTRUEである場合、2次元ジオメトリに固有の検証のみが実行され、3次元固有の検証は実行されません。文字列値がFALSE(デフォルト)である場合は、ジオメトリに関連するすべての検証が実行されます。(flag10gパラメータの詳細は、「使用上のノート」を参照してください。)

使用上のノート

データで空間操作を実行する前に、すべてのジオメトリ・データを検査し、検査エラーがあれば修正する必要があります(「空間データのロードおよび検査の推奨手順」を参照)。

ジオメトリが有効な場合、TRUEを戻します。(ユーザー定義ジオメトリの場合、つまりSDO_GTYPE値が2000のジオメトリの場合は、文字列NULLを戻します。)

ジオメトリが無効な場合、次のいずれかを戻します。

  • ジオメトリが無効である具体的な理由に基づいて発行されるOracleエラー・メッセージ番号。他の理由でジオメトリが無効になった場合はFALSE。

  • エラーのコンテキスト(ジオメトリが無効になる原因となった座標、エッジまたは輪)。(この項のエラーのコンテキスト: 詳細を参照してください。)

ジオメトリ・タイプおよびジオメトリの一貫性チェックを行います。

ジオメトリ・タイプの一貫性について、次のことを確認します。

  • SDO_GTYPEが有効であるか

  • SDO_ETYPE値はSDO_GTYPEの値と一貫性があるか(たとえば、SDO_GTYPEが2003の場合、ジオメトリに1つ以上の要素タイプPOLYGONがあるか)

  • SDO_ELEM_INFO_ARRAYに有効な3つの値があるか

ジオメトリの一貫性については、ジオメトリ・タイプについて次のことを確認します。

  • ポリゴンに4つ以上の点があり、その点には、ポリゴンをクローズする点が含まれるか(クローズする点では、最後の点が最初の点と同じです。)

  • ポリゴンが自己交差していないか

  • 線またはポリゴンに同じ2つの連続する頂点がないか

  • ポリゴンは正しく指定されているか(外部の輪の境界は反時計回り、内部の輪の境界は時計回り)

  • ポリゴンの内部が接続されているか

  • 線ストリングに2つ以上の点があるか

  • ポリゴンの輪の要素の定義に、1桁および4桁のSDO_ETYPE値が混在していないか

  • 円弧上にある点が直線上にないか、または同じ点ではないか

  • ジオメトリは(USER_SDO_GEOM_METADATAビューの)DIMINFO列の値で指定した範囲内にあるか

  • LRSジオメトリ(「線形参照システム」を参照)は3つまたは4つの次元、および有効なメジャー次元位置(次元の数に応じて3または4)を持ちます。

COLLECTIONタイプのジオメトリの場合、前述の確認の一部は実行されません。具体的には、COLLECTIONタイプのジオメトリのポリゴン要素に対して、内部の輪の確認およびポリゴン同士の重複の確認は行われません。

複数点ジオメトリの場合、このファンクションは、3次元ジオメトリでの重複する頂点を確認しますが、2次元ジオメトリについては確認しません。

3次元ジオメトリの場合は、このファンクションにより、「3次元ジオメトリの検証」に示す確認も行われます。

ジオメトリの一貫性チェックでは、ファンクションはジオメトリのtolerance値によって線が接しているかどうか、または点が同じであるかどうかを判断します。

toleranceを指定する場合、ジオメトリが、USER_SDO_GEOM_METADATAビューのDIMINFOフィールドに格納されている座標系の境界内に存在するかどうかを検査するためのチェックは行われません。このチェックを行う必要がある場合、theDimInfoを指定します。

flag10gパラメータ値をTRUEに設定すると、ジオメトリの次元に関係なく、Oracle Spatial Release 10.2の検証ロジックが使用されます。これは、リリース11.1より前の形式のジオメトリを含む3次元ジオメトリが、検証に合格できるようにする(この値を設定しない場合は失敗する)場合に有効です。たとえば、3次元の線に円弧が含まれている場合、その線は無効になりますが、flag10gTRUEに設定することによって、このようなジオメトリが円弧を含むという理由だけで無効とみなされることを回避できます。(後で、円弧の稠密化などにより、現行のリリースの基準に従って、これらのジオメトリを有効にする必要があります。)

このファンクションは、SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTプロシージャのかわりにPL/SQLプロシージャで使用できます。詳細は、SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTの「使用上のノート」を参照してください。

エラーのコンテキスト: 詳細

ジオメトリが無効な場合、その結果には座標、要素、輪およびエッジの組合せについての情報が含まれる可能性があります。

  • 座標: 1つの座標は、ジオメトリの1個の頂点を示します。2次元のジオメトリでは、1個の頂点は2つの数値(XとY、つまり経度と緯度)で示されます。3次元のジオメトリでは、1個の頂点は3つの数値で定義され、4次元のジオメトリでは4つの数値で定義されます。(SDO_UTIL.GETVERTICESファンクションを使用して、ジオメトリの座標を戻すことができます。)

    13356(ジオメトリ内の隣接する点が冗長である)などのジオメトリ検査エラーが発生した場合は、エラーで示された座標よりも大きい座標を含むようにrownumで停止条件を指定して、SDO_UTIL.GETVERTICESファンクションをコールできます。出力に示された最後の2つの座標が、冗長である座標です。これらの座標は、まったく同一であるか、またはユーザー指定の許容差内にあるために同一の点であるとみなされます。冗長である座標は、SDO_UTIL.REMOVE_DUPLICATE_VERTICESファンクションを使用して削除できます。

  • 要素: 1つの要素は、1個の点、1本の線ストリング、または0 (ゼロ)以上の対応する内部ポリゴンを含む1つの外部ポリゴンです。(つまり、ポリゴン要素には、1つの外部の輪と、その外部の輪に関連付けられた内部の輪すべてが含まれます。)ジオメトリが複数要素のジオメトリ(複数の点、複数の線、複数のポリゴンなど)である場合、1つ目の要素がElement 1、2つ目の要素がElement 2となり、以降同様に続きます。

  • 輪: 輪は、ポリゴン要素でのみ使用されます。ポリゴンの外部の輪は、ポリゴン要素とみなされます。1つの外部の輪には、0 (ゼロ)個以上の内部の輪(穴)が含まれます。内部の輪には、それぞれ個別の名称が指定されますが、Ring 1は、外部ポリゴン自体を表します。たとえば、Element 1、Ring 1は、ジオメトリの1つ目の外部ポリゴンを示します。Element 1、Ring 2は、1つ目の外部ポリゴンの1つ目の内部ポリゴンを示し、Element 1、Ring 3は、2つ目の内部ポリゴンを示します。ジオメトリが複数のポリゴンである場合、2つ目の外部ポリゴンは、Element 2、Ring 1で表されます。2つ目の外部ポリゴンに関連付けられた内部ポリゴンがある場合、その1つ目の内部ポリゴンはElement 2、Ring 2で表されます。

  • エッジ: 1つのエッジは、2つの座標間の1本の直線セグメントを示します。Edge 1は、座標1と座標2の間のセグメントを示し、Edge 2は、座標2と座標3の間の直線セグメントを示します(以下同様に続きます)。ジオメトリの検査でエッジのエラーが最も発生しやすいのは、自己交差ポリゴンを含むジオメトリです。(Open Geospatial Consortiumシンプル・フィーチャ仕様では、ポリゴンの自己交差は許可されていません。)このような場合、Oracleではエラー13349 (ポリゴンの境界が自己交差している)が報告され、自己交差の発生している要素、輪およびエッジの番号が示されます。

    最適化された矩形の範囲が経度で119度を越えている場合にエラー13351(共有エッジ)が戻されても、この矩形に対する問合せには、正しい結果を戻すものもあります(「測地MBR」を参照)。

次の例では、(意図的に無効な状態で作成された)cola_invalid_geomという名前のジオメトリを検査します。

-- Validate; provide context if invalid
SELECT c.name, SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(c.shape, 0.005)
   FROM cola_markets c WHERE c.name = 'cola_invalid_geom';

NAME                                                                            
--------------------------------                                                
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(C.SHAPE,0.005)                          
--------------------------------------------------------------------------------
cola_invalid_geom                                                               
13349 [Element <1>] [Ring <1>][Edge <1>][Edge <3>] 

この例の出力で、13349は、「ORA-13349: ポリゴンの境界が自己交差しています。」というエラーを示します。1つ目の要素の1つ目の輪に、交差しているエッジがあります。交差しているエッジは、Edge 1 (1番目の頂点と2番目の頂点)およびEdge 3 (3番目の頂点と4番目の頂点)です。

26.34 SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

構文

SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT(     
  geom_table      IN VARCHAR2,      
  geom_column     IN VARCHAR2,      
  result_table    IN VARCHAR2,      
  commit_interval IN NUMBER DEFAULT -1,       
  conditional     IN VARCHAR2 DEFAULT 'TRUE' ,      
  flag10g         IN VARCHAR2 DEFAULT 'FALSE',      
  geom_schema     IN VARCHAR2 DEFAULT NULL); 

説明

格納済のジオメトリがジオメトリ・オブジェクトに対して定義された規則に従っているかどうかを判断するためにジオメトリ列を検査し、無効なジオメトリに関するコンテキスト情報を戻します。

パラメータ

geom_table

空間ジオメトリ表を指定します。geom_schemaパラメータが指定されていないかぎり、schema.table形式で指定できます(たとえばscott.shapesなど)。

geom_column

検査するジオメトリ・オブジェクト列を指定します。

result_table

検査結果を格納する結果表を指定します。無効なジオメトリの場合、result_tableに行が追加されます。無効なジオメトリが存在しない場合、結果がDONEである1つ以上(commit_interval値によって異なる)の行が追加されます。

commit_interval

Spatial and Graphが内部コミット操作を実行し、結果がDONEである行をresult_tableに書き込む(最後のコミット後に無効なジオメトリの行が書き込まれなかった場合)前に検査するジオメトリの数を指定します。commit_intervalを指定しない場合、検査時には内部コミット操作は実行されません。

commit_intervalオプションは、検査の実行中にresult_tableの内容を参照する必要がある場合に有効です。

conditional

条件付きのフラグを指定します(3次元の複合表面または複合ソリッドにのみ適用)。文字列値がTRUE (デフォルト)である場合、2つの外部の輪が同じ平面にあり、エッジを共有していると、検証は行われなくなります。文字列値がFALSEである場合、2つの外部の輪が同じ平面にあり、エッジを共有していても検証を行います。

flag10g

Oracle Database 10g互換性フラグ。文字列値がTRUEである場合、2次元ジオメトリに固有の検証のみが実行され、3次元固有の検証は実行されません。文字列値がFALSE(デフォルト)である場合は、ジオメトリに関連するすべての検証が実行されます。(flag10gパラメータの詳細は、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションの「使用上のノート」を参照してください。)

geom_schema

geom_table表のスキーマを指定します(現在のスキーマと異なる場合)。geom_schemaが指定されている場合、geom_tableパラメータはschema.table形式で指定できません。

使用上のノート

データで空間操作を実行する前に、すべてのジオメトリ・データを検査し、検査エラーがあれば修正する必要があります(「空間データのロードおよび検査の推奨手順」を参照)。

このプロシージャは、結果表に検査の結果をロードします。

このプロシージャをコールする前に、空の結果表(result_tableパラメータに指定する表)を作成する必要があります。この結果表の形式は、(sdo_rowid ROWID, result VARCHAR2(2000))です。result_tableが空の場合は、行が追加される前にプロシージャによって自動的に切り捨てられます。

結果表には、それぞれの無効なジオメトリに1つの行が含まれます。ジオメトリが有効な場合、次の場合を除き、行は書き込まれません。

  • commit_intervalが指定されていない場合(またはcommit_interval値がレイヤーのジオメトリの数より大きい場合)、無効なジオメトリが検出されないと、RESULT値がDONEである単一行が書き込まれます。

  • commit_intervalが指定されている場合、ある内部コミットとその直前の内部コミット(または初回の内部コミットの検査の開始時)との間に無効なジオメトリが検出されないと、最後に検査されたジオメトリの主キーおよびRESULT値がDONEである単一行が書き込まれます。(最後の内部コミット操作後に無効なジオメトリが存在しない場合、結果がDONEである前の行がこの行に置換されます。)

無効なジオメトリの各行のSDO_ROWID列には、無効なジオメトリを含む行のROWID値が含まれます。また、RESULT列にはOracleエラー・メッセージ番号およびエラーのコンテキスト(ジオメトリが無効になった原因の座標、エッジまたは輪)が含まれます。エラー・メッセージを検索すると、失敗の原因の詳細を参照できます。

このプロシージャは、レイヤー(geom_column)の各ジオメトリについて次のことを確認します。

  • SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションによって実行されるすべてのジオメトリ・タイプの一貫性チェックおよびジオメトリの一貫性チェック(SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションの「使用上のノート」を参照)

  • ジオメトリのSRID値(座標系)がUSER_SDO_GEOM_METADATAビュー(「ジオメトリのメタデータ・ビュー」を参照)の該当するDIMINFO列で指定した値と同じです。

次の例では、COLA_MARKETS表のSHAPE列に格納されているジオメトリ・オブジェクトを検査します。この例では、結果表の作成も含めて示しています。検査の実行前に、意図的に無効な状態で作成されているジオメトリが表に挿入されたと想定します。

-- Is a layer valid? (First, create the result table.)
CREATE TABLE val_results (sdo_rowid ROWID, result varchar2(1000));
-- (Next statement must be on one command line.)
CALL SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('COLA_MARKETS','SHAPE','VAL_RESULTS');

Call completed.

SQL> SELECT * from val_results;

SDO_ROWID                                                                       
------------------                                                              
RESULT                                                                          
--------------------------------------------------------------------------------
                                                                                
Rows Processed <12>                                                             
                                                                                
AAABXNAABAAAK+YAAC                                                              
13349 [Element <1>] [Ring <1>][Edge <1>][Edge <3>] 

26.35 SDO_GEOM.WITHIN_DISTANCE

構文

SDO_GEOM.WITHIN_DISTANCE(     
  geom1  IN SDO_GEOMETRY,      
  dim1   IN SDO_DIM_ARRAY,      
  dist   IN NUMBER,      
  geom2  IN SDO_GEOMETRY,      
  dim2   IN SDO_DIM_ARRAY       
  [, units       IN VARCHAR2]      
  [, ellipsoidal IN VARCHAR2]
) RETURN VARCHAR2;

または

SDO_GEOM.WITHIN_DISTANCE(     
  geom1  IN SDO_GEOMETRY,      
  dist   IN NUMBER,      
  geom2  IN SDO_GEOMETRY,      
  tol    IN NUMBER       
  [, units       IN VARCHAR2]      
  [, ellipsoidal IN VARCHAR2]
) RETURN VARCHAR2;

説明

2つの空間オブジェクトが、互いに指定された距離内にあるかどうかを判断します。

パラメータ

geom1

ジオメトリ・オブジェクト。

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

dist

距離値。

geom2

ジオメトリ・オブジェクト。

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。

tol

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

units

測定単位(unit=およびMDSYS.SDO_AREA_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。

このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。

ellipsoidal

測地データに楕円体距離を常に使用するか(true)、球体距離を使用する場合があるか(false、デフォルト)を指定します。「距離: 測地データでの球体対楕円体」を参照してください。

使用上のノート

パフォーマンスを向上させるには、SDO_GEOM.WITHIN_DISTANCEファンクションのかわりにSDO_WITHIN_DISTANCE演算子(「空間演算子」を参照)を使用します。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、「空間演算子、空間プロシージャおよび空間ファンクション」を参照してください。

このファンクションは、オブジェクトの組合せが指定した距離内にある場合にTRUEを戻し、そうでない場合はFALSEを戻します。

領域のある2つのオブジェクト(たとえば、線やポリゴンなど、点以外のオブジェクト)の距離は、それら2つのオブジェクト間の最短距離です。そのため、2つの隣接したポリゴン間の距離はゼロです。

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

次の例では、cola_bcola_d間の最短距離が1距離単位以内であるかどうかが検査されます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Are two geometries within 1 unit of distance apart?
SELECT SDO_GEOM.WITHIN_DISTANCE(c_b.shape, m.diminfo, 1,
     c_d.shape, m.diminfo) 
  FROM cola_markets c_b, cola_markets c_d, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
  AND c_b.name = 'cola_b' AND c_d.name = 'cola_d';

SDO_GEOM.WITHIN_DISTANCE(C_B.SHAPE,M.DIMINFO,1,C_D.SHAPE,M.DIMINFO)        
--------------------------------------------------------------------------------
TRUE   

関連トピック