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次元の両方のジオメトリがサポートされる)を除きます。
-
(A)ANYINTERACTマスクまたは(B)INSIDEマスク(ソリッド・ジオメトリでのみ3次元がサポートされる)を使用するSDO_GEOM.RELATE
-
- SDO_GEOM.RELATE
- SDO_GEOM.SDO_ALPHA_SHAPE
- SDO_GEOM.SDO_ARC_DENSIFY
- SDO_GEOM.SDO_AREA
- SDO_GEOM.SDO_BUFFER
- SDO_GEOM.SDO_CENTROID
- SDO_GEOM.SDO_CLOSEST_POINTS
- SDO_GEOM.SDO_CONCAVEHULL
- SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY
- SDO_GEOM.SDO_CONVEXHULL
- SDO_GEOM.SDO_DIAMETER
- SDO_GEOM.SDO_DIAMETER_LINE
- SDO_GEOM.SDO_DIFFERENCE
- SDO_GEOM.SDO_DISTANCE
- SDO_GEOM.SDO_INTERSECTION
- SDO_GEOM.SDO_LENGTH
- SDO_GEOM.SDO_MAX_MBR_ORDINATE
- SDO_GEOM.SDO_MAXDISTANCE
- SDO_GEOM.SDO_MAXDISTANCE_LINE
- SDO_GEOM.SDO_MBC
- SDO_GEOM.SDO_MBC_CENTER
- SDO_GEOM.SDO_MBC_RADIUS
- SDO_GEOM.SDO_MBR
- SDO_GEOM.SDO_MIN_MBR_ORDINATE
- SDO_GEOM.SDO_POINTONSURFACE
- SDO_GEOM.SDO_SELF_UNION
- SDO_GEOM.SDO_TRIANGULATE
- SDO_GEOM.SDO_UNION
- SDO_GEOM.SDO_VOLUME
- SDO_GEOM.SDO_WIDTH
- SDO_GEOM.SDO_WIDTH_LINE
- SDO_GEOM.SDO_XOR
- SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT
- SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT
- SDO_GEOM.WITHIN_DISTANCE
親トピック: リファレンス情報
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
関連トピック
-
SDO_RELATE演算子
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
値である線を示します。
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
関連トピック
なし。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
関連トピック
なし。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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, dist OUT NUMBER, geoma OUT SDO_GEOMETRY, geomb OUT SDO_GEOMETRY);
説明
2つのジオメトリ間の最短距離、および最短距離を示す点(各ジオメトリに1つ)を計算します。
パラメータ
- geom1
-
ジオメトリ・オブジェクト。
- geom2
-
ジオメトリ・オブジェクト。
- tolerance
-
許容差(「許容差」を参照)。
- unit
-
測定単位(
unit=
およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。
- dist
-
geom1
とgeom2
の間の最短距離を含む出力パラメータです。具体的には、geoma
とgeomb
の間の距離を示します。 - geoma
-
geom2
の境界上の最近点に最も近いgeom1
の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。 - geomb
-
geom1
の境界上の最近点に最も近いgeom2
の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。
使用上のノート
このプロシージャでは、出力パラメータを使用して、計算された最短距離、および最短距離に関連付けられた各入力ジオメトリ上の点を格納します。
2点間の距離が0(ゼロ)の場合、出力ジオメトリ(geoma
およびgeomb
)は、次のようになります。
-
2次元(2D)ジオメトリでは、入力ジオメトリの1つが点ジオメトリの場合、各出力ジオメトリはその点です。それ以外の場合、各出力ジオメトリは入力ジオメトリの共通部分の最初の要素の最初の点です。
-
3次元(3D)ジオメトリでは、入力ジオメトリの1つが点ジオメトリの場合、各出力ジオメトリはその点です。それ以外の場合、出力ジオメトリはnullです。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
入力データが3次元で測地の場合、ジオメトリでは3D SRIDを使用する必要があります。それ以外の場合、結果は正しくありません。
例
次の例では、ジオメトリcola_c
とcola_d間の最短距離、および最短距離に関連付けられた各入力ジオメトリ上の1つの点を計算します。また、2つの出力点ジオメトリを表に挿入した後、これらの点ジオメトリを選択します。2つの入力ジオメトリ間の最短距離は2.47213595499958、cola_c
上の最近点は(6,5)、cola_d
上の最近点は(7.10557281, 7.21114562)になります。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)
DECLARE cola_c_geom SDO_GEOMETRY; cola_d_geom SDO_GEOMETRY; dist NUMBER; geoma SDO_GEOMETRY; geomb SDO_GEOMETRY; BEGIN -- Populate geometry variables with cola market shapes. SELECT c.shape into cola_c_geom FROM cola_markets c WHERE c.name = 'cola_c'; SELECT c.shape into cola_d_geom FROM cola_markets c WHERE c.name = 'cola_d'; SDO_GEOM.SDO_CLOSEST_POINTS(cola_c_geom, cola_d_geom, 0.005, NULL, dist, geoma, geomb); INSERT INTO cola_markets VALUES(9901, 'geoma', geoma); INSERT INTO cola_markets VALUES(9902, 'geomb', geomb); DBMS_OUTPUT.PUT_LINE('dist output parameter value = ' || dist); END; / dist output parameter value = 2.47213595499958 PL/SQL procedure successfully completed. SELECT c.shape FROM cola_markets c WHERE c.name = 'geoma'; SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES) -------------------------------------------------------------------------------- SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY( 6, 5)) SELECT c.shape FROM cola_markets c WHERE c.name = 'geomb'; SHAPE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES) -------------------------------------------------------------------------------- SDO_GEOMETRY(2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY( 7.10557281, 7.21114562))
関連トピック
なし。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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パッケージ(ジオメトリ)
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
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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を使用した場合に戻されるポリゴンです。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、cola_a
とcola_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)であることに注意してください。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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を使用した場合に戻されるポリゴンです。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、cola_a
とcola_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)であることに注意してください。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
関連トピック
なし。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
関連トピック
なし。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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パッケージ(ジオメトリ)
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を使用した場合に戻されるポリゴンです。
位相的な和集合操作を実行せずにジオメトリを他のジオメトリに追加するだけで十分な場合、および両方のジオメトリが非接続である場合は、SDO_UTIL.APPENDファンクション(「SDO_UTILパッケージ(ユーティリティ)」を参照)を使用する方がSDO_UNIONファンクションより高速です。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、cola_a
とcola_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)であることに注意してください。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
関連トピック
なし。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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))
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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_a
とcola_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)で開始および終了します。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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つ以上の点があるか
-
ポリゴンの輪の要素の定義に、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次元の線に円弧が含まれている場合、その線は無効になりますが、flag10g
をTRUE
に設定することによって、このようなジオメトリが円弧を含むという理由だけで無効とみなされることを回避できます。(後で、円弧の稠密化などにより、現行のリリースの基準に従って、これらのジオメトリを有効にする必要があります。)
このファンクションは、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番目の頂点)です。
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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>]
親トピック: SDO_GEOMパッケージ(ジオメトリ)
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_b
とcola_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
関連トピック
親トピック: SDO_GEOMパッケージ(ジオメトリ)