この章では、SDO_GEOMパッケージに含まれているジオメトリ関連のPL/SQLサブプログラムについて説明します。これらのサブプログラムは、次のように分類されます。
2つのオブジェクト間の関係(TRUE/FALSE): RELATE、WITHIN_DISTANCE
妥当性チェック: VALIDATE_GEOMETRY_WITH_CONTEXT、VALIDATE_LAYER_WITH_CONTEXT
単一オブジェクトの処理: SDO_ALPHA_SHAPE、SDO_ARC_DENSIFY、SDO_AREA、SDO_BUFFER、SDO_CENTROID、SDO_CONVEXHULL、SDO_CONCAVEHULL、SDO_CONCAVEHULL_BOUNDARY、SDO_LENGTH、SDO_MAX_MBR_ORDINATE、SDO_MIN_MBR_ORDINATE、SDO_MBR、SDO_POINTONSURFACE、SDO_TRIANGULATE、SDO_VOLUME
2つのオブジェクトの処理: SDO_CLOSEST_POINTS、SDO_DISTANCE、SDO_DIFFERENCE、SDO_INTERSECTION、SDO_UNION、SDO_XOR
ジオメトリ・サブプログラムを表24-1に示します。その後、使用方法について説明します。
表24-1 ジオメトリ・サブプログラム
サブプログラム | 説明 |
---|---|
|
2つのオブジェクトの相互作用の関係を判断します。 |
|
指定されたradius値に基づいて、入力ジオメトリのアルファ・シェイプ・ジオメトリを戻します。 |
|
各円弧を直線で構成される近似値に変更し、各円を円に近い一連の直線で構成されるポリゴンに変更します。 |
|
2次元ポリゴンの面積を計算します。 |
|
ジオメトリの周りまたは内部にバッファ・ポリゴンを生成します。 |
|
ポリゴンの中心を戻します。 |
|
2つのジオメトリ間の最短距離、および最短距離を示す点(各ジオメトリに1つ)を計算します。 |
|
ジオメトリ・オブジェクトの凹型部分を表現するポリゴンタイプ・オブジェクトを戻します。 |
SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY |
アルファ・シェイプではなく境界点に基づいて、ジオメトリ・オブジェクトの凹型部分を表現するポリゴンタイプ・オブジェクトを戻します。 |
|
ジオメトリ・オブジェクトの凸型部分を表現するポリゴンタイプ・オブジェクトを戻します。 |
|
2つのジオメトリ・オブジェクトで位相的に差(MINUS演算)となるジオメトリ・オブジェクトを戻します。 |
|
2つのジオメトリ・オブジェクト間の距離を計算します。 |
|
2つのジオメトリ・オブジェクトで位相的に共通部分(AND演算)となるジオメトリ・オブジェクトを戻します。 |
|
ジオメトリの周囲または長さを計算します。 |
|
ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最大値を戻します。 |
|
ジオメトリの最小境界矩形を戻します。 |
|
ジオメトリ・オブジェクトの最小境界矩形の指定された縦座標(次元)の最小値を戻します。 |
|
ポリゴン上にある点を戻します。 |
|
入力ジオメトリのデローニ三角分割によって生成される三角形の集合を戻します。 |
|
2つのジオメトリ・オブジェクトで位相的な結合部分(OR演算)となるジオメトリ・オブジェクトを戻します。 |
|
3次元ソリッド・ジオメトリの容積を計算します。 |
|
2つのジオメトリ・オブジェクトで位相的に排他的論理和(XOR演算)となるジオメトリ・オブジェクトを戻します。 |
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT |
ジオメトリが有効であるかを判断し、そのジオメトリが無効な場合、コンテキスト情報を戻します。 |
SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT |
列に格納されているすべてのジオメトリが有効かどうかを判断し、無効なジオメトリのコンテキスト情報を戻します。 |
|
2つのジオメトリ間の距離が、指定された距離内にあるかどうかを判断します。 |
ジオメトリ・サブプログラムの使用については、次の内容に注意してください。(各サブプログラムのリファレンス情報にある「使用上の注意」も参照してください。)
入力パラメータおよび処理の組合せによっては、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(
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;
使用上の注意
パフォーマンスを向上させるには、SDO_GEOM.RELATE
ファンクションを使用する必要がないかぎり、このファンクションのかわりにSDO_RELATE演算子またはその簡易演算子形式(第19章を参照)の1つを使用します。たとえば、SDO_RELATE演算子を使用する場合、DETERMINE maskキーワードは適用されません。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、1.9項を参照してください。
SDO_GEOM.RELATE
ファンクションの戻り値には、次の種類があります。
mask
に1つ以上の関係が登録されている場合、ジオメトリ・ペアについて1つ以上の関係が真であれば、指定されたmask
値を戻します。すべての関係が偽であれば、プロシージャはFALSEを戻します。
mask
のキーワードにDETERMINEを指定すると、ジオメトリ間の関係に最も一致する関係キーワードが1つ戻されます。
mask
のキーワードにANYINTERACTを指定すると、2つのジオメトリが非接続でなければ、TRUEが戻されます。
mask
では、次の関係について判断します。
ANYINTERACT: 2つのオブジェクトが非接続ではない場合に、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
ジオメトリとの関係を調べます。(例では、2.1項の定義およびデータを使用しています。出力は、読みやすくするために変更が加えられています。)
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_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;
パラメータ
ジオメトリ・オブジェクトを指定します。
許容差を指定します(1.5.5項を参照)。
アルファ・シェイプの計算に使用する半径です。このパラメータがNULLの場合、アルファ・シェイプは入力ジオメトリの凸型です。
孤立点およびエッジが含まれるかどうかを判断します(0 (ゼロ)
(デフォルト)の場合、孤立点およびエッジが含まれるため、アルファ・シェイプが戻され、1
の場合は、孤立点およびエッジが含まれないため、アルファ・シェイプのポリゴン部分のみが戻されます)。
使用上の注意
アルファ・シェイプは凸型を汎化したものです(http://biogeometry.duke.edu/software/alphashapes/
を参照)。このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割およびアルファ・シェイプの計算にそれらを使用します。
radius
パラメータの値を指定する場合は、最初にradius
出力パラメータを含む形式を使用して、SDO_GEOM.SDO_CONCAVEHULLファンクションをコールする必要があります。
geom
が点タイプであるか、頂点の数が3未満であるか、または直線上に存在する複数の点である場合や、radius
が0 (ゼロ)より小さい場合は、例外が発生します。
測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。
例
次の例では、radius
パラメータのデフォルト値(NULL)が使用されるため、cola_c
のアルファ・シェイプであり、cola_c
の凸型部分でもあるジオメトリ・オブジェクトを戻します。(この簡単な例では、ポリゴンを入力ジオメトリとして使用しています(通常、このファンクションは、大量の点データで使用されます)。この例は、2.1項の定義およびデータを使用しています。)
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.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;
使用上の注意
円または円弧を含むジオメトリが投影座標系にある場合、このファンクションを使用してこれらのジオメトリを通常のポリゴンに稠密化できます。その後、その直線行ポリゴン・ジオメトリをSpatialの操作に使用するか、またはこれらのジオメトリを投影座標系または測地座標系に変換できます。
params
パラメータは、arc_tolerance
キーワード、およびarc_tolerance
値に関連付けられた測定単位を識別するunit
キーワードを含むことができる、引用符で囲んだ文字列です。次に例を示します。
'arc_tolerance=0.05 unit=km'
arc_tolerance
キーワードは、ジオメトリの各円弧について、円弧の表面と、円弧の開始点と終了点とを結ぶ直線の間の、垂直線の最大長を指定します。図24-1に、長さがA点とB点間の円弧のarc_tolerance
値である線を示します。
arc_tolerance
キーワードの値は、ジオメトリに関連付けられた許容差より大きくする必要があります。(arc_tolerance
のデフォルト値は、許容差の20倍です。)arc_tolerance
キーワードの値を増やすと、結果のポリゴンの辺数が減少し、面積が小さくなります。arc_tolerance
キーワードの値を減らすと、結果のポリゴンの辺数が増加し、面積が大きくなります(ただし、元のジオメトリより大きくなることはありません)。
unit
キーワードを指定する場合、値はMDSYS.SDO_DIST_UNITS表のSDO_UNIT値('unit=KM'など)である必要があります。unit
キーワードを指定しない場合、ジオメトリに関連付けられた測定単位が使用されます。測定単位の指定の詳細は、2.10項を参照してください。
例
次の例では、cola_d
の円弧を稠密化した結果であるジオメトリ(円)を戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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.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;
パラメータ
ジオメトリ・オブジェクトを指定します。
geom
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
測定単位(unit=
およびMDSYS.SDO_AREA_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、たとえば'unit=SQ_KM')を指定します。測定単位の指定の詳細は、2.10項を参照してください。
このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はm2です。
許容差を指定します(1.5.5項を参照)。
例
次の例では、COLA_MARKETS表に格納されているジオメトリ・オブジェクトの面積を戻します。最初の文ではすべてのオブジェクトの面積を戻し、2番目の文ではcola_a
の面積のみを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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.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
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
距離値を指定します。正の値の場合、ジオメトリの周りにバッファが生成されます。負の値の場合(ポリゴンにのみ有効)、ジオメトリの内部にバッファが生成されます。このパラメータの絶対値には、次元配列(dim
パラメータ)またはtol
パラメータに指定された許容差より大きい値を指定する必要があります。
許容差を指定します(1.5.5項を参照)。
次のキーワードの1つまたは両方を含む、引用符で囲まれた文字列を指定します。
unit
およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値。dist
パラメータ値および円弧の許容差(arc_tolerance
キーワードが指定されている場合)に関連付けられた測定単位を識別します。測定単位の指定の詳細は、2.10項を参照してください。
arc_tolerance
および円弧の許容差。arc_tolerance
キーワードの詳細は、この章に示すSDO_GEOM.SDO_ARC_DENSIFYファンクションの「使用上の注意」を参照してください。
例: 'unit=km arc_tolerance=0.05'
入力ジオメトリが測地データで、arc_tolerance
が指定されていない場合、デフォルト値は許容差に20を掛けた値になります。Spatialではarc_tolerance
値を使用して、結果の計算時に円弧を稠密化します。入力ジオメトリがデカルト・データまたは投影データである場合、arc_tolerance
は無効になるため、指定する必要はありません。
デカルト・ジオメトリまたは投影ジオメトリにこのパラメータが指定されていない場合、または測地ジオメトリに対してarc_tolerance
キーワードが指定されているにもかかわらずunit
キーワードが指定されていない場合、データに関連付けられている測定単位が使用されます。
使用上の注意
このファンクションは、バッファ・ポリゴンを表現するジオメトリ・オブジェクトを戻します。
このファンクションは、点、線またはポリゴンの周り、あるいはポリゴンの内部を丸めたバッファを作成します。空間内のバッファも丸められ、内側の境界からの距離は、外側の境界から外側のバッファまでの距離と同じです。図1-7を参照してください。
バッファ・ポリゴン・ジオメトリが投影座標系にある場合、円弧を含みます。このジオメトリを測地座標系に変換する場合は、SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用してジオメトリを最初に稠密化してから変換します。
入力ジオメトリに50を超える座標があり、かつ、バッファの幅が、連続する座標の間の間隔の二乗平均平方根の0.1% (0.001)未満の場合、元のジオメトリが変更されることなく戻されます。
測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。
測地データでは、このファンクションは比較的小さなジオメトリにのみ使用する必要があります。このようなジオメトリに対しては、内部計算に使用するローカル交差平面投影で重大なひずみやエラーが発生することはありません。これにより、線ストリングかポリゴンかに関係なく、ソース・ジオメトリの適用ドメインが、テキサス(米国)、フランスまたは満州(中国)のおよその領域に制限されます。
例
次の例では、cola_a
の周りの1バッファを表現するポリゴンを戻します。戻されるポリゴンの角(たとえば、.292893219、.292893219)は、丸められています。(例では、2.1項の非測地定義およびデータを使用しています。)
-- 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))
次の例では、6.13項の測地定義およびデータを使用して、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.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
がポリゴン、複数ポリゴン、点または点クラスタではない場合、NULL値を戻します。これは、SDO_GEOMETRYオブジェクトのSDO_GTYPE値によって識別します。
geom1
が点である場合、このファンクションは点(入力ジオメトリ)を戻します。
測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。
入力ジオメトリの形および複雑さによっては、戻された点が入力ジオメトリ上にない場合があります。
例
次の例では、cola_c
の中心にあるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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.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);
パラメータ
ジオメトリ・オブジェクトを指定します。
ジオメトリ・オブジェクトを指定します。
許容差を指定します(1.5.5項を参照)。
測定単位(unit=
およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、2.10項を参照してください。
このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。
geom1
とgeom2
の間の最短距離を含む出力パラメータです。具体的には、geoma
とgeomb
の間の距離を示します。
geom2
の境界上の最近点に最も近いgeom1
の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。
geom1
の境界上の最近点に最も近いgeom2
の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。
使用上の注意
このプロシージャでは、出力パラメータを使用して、計算された最短距離、および最短距離に関連付けられた各入力ジオメトリ上の点を格納します。
2点間の距離が0(ゼロ)の場合、出力ジオメトリ(geoma
およびgeomb
)は、NULLです。
例
次の例では、ジオメトリcola_c
とcola_d間の最短距離、および最短距離に関連付けられた各入力ジオメトリ上の1つの点を計算します。また、2つの出力点ジオメトリを表に挿入した後、これらの点ジオメトリを選択します。2つの入力ジオメトリ間の最短距離は2.47213595499958、cola_c
上の最近点は(6,5)、cola_d
上の最近点は(7.10557281, 7.21114562)になります。(例では、2.1項の定義およびデータを使用しています。)
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.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;
パラメータ
ジオメトリ・オブジェクトを指定します。
許容差を指定します(1.5.5項を参照)。
凹型の計算時に(デローニ三角分割を使用して)内部的に作成される、三角形の外接円の半径を格納するための出力パラメータ。
使用上の注意
凹型は、点の集合などの入力ジオメトリの領域を表現するポリゴンです。複雑な入力ジオメトリでは、通常、凹型は凸型の領域よりも非常に小さくなっています。
このファンクションは、入力ジオメトリからすべての座標を取得し、それらを使用してデローニ三角分割を実行して、凹型を計算します。外部の輪のみを戻します。内部の輪は無視されます。
このファンクションでは、凹型の計算時にアルファ・シェイプを使用します。これに対し、SDO_GEOM.SDO_CONCAVEHULL_BOUNDARYファンクションでは、外側の境界点を使用します。
radius
パラメータを含む形式は、SDO_GEOM.SDO_ALPHA_SHAPEファンクションをコールする場合に役立つradius値を戻します。
geom
が、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。
測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。
例
次の例では、cola_c
の凹型部分のジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。
-- 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))
構文
SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY(
geom IN SDO_GEOMETRY,
tol IN NUMBER,
length IN NUMBER DEFAULT NULL
) RETURN SDO_GEOMETRY;
パラメータ
ジオメトリ・オブジェクトを指定します。
許容差を指定します(1.5.5項を参照)。
凹型のサイズを制御するための値(具体的には、凹型の最長エッジがlength
値よりも短い場合は、凹型の計算が停止されます)。このため、length
値が大きければ大きいほど、凹型も大きくなる可能性があります。このパラメータを指定しない場合、「使用上の注意」で説明するとおり、計算は続行されます。
使用上の注意
凹型は、点の集合などの入力ジオメトリの領域を表現するポリゴンです。複雑な入力ジオメトリでは、通常、凹型は凸型の領域よりも非常に小さくなっています。
SDO_GEOM.SDO_CONCAVEHULLファンクションと同様に、このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割の計算にそれらを使用します。ただしその後、凸型を計算し、境界エッジの長さに基づいて優先度キューにすべての境界エッジを入れ、(指定されたlength
パラメータ値によって停止されないかぎり、)形状が連結している単一のポリゴンであれば、1つずつエッジを削除します。1つのエッジが計算中に削除された場合、その三角形の他の2つのエッジが境界上にあります。
geom
が、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。
測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。
例
次の例では、cola_c
の凹型部分のジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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.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;
使用上の注意
凸型は、ジオメトリ・オブジェクトを完全に囲む単純な凸型のポリゴンです。Spatialでは、指定したオブジェクトを完全に囲む最小ポリゴンを作成する場合に、使用する直線の辺をできるだけ少なくします。凸型は、複雑なジオメトリ・オブジェクトの近似値を取る場合に便利です。
ジオメトリ(geom1
)に円弧要素が含まれる場合、このファンクションは、各円弧要素の最小境界矩形(MBR)を計算し、これらのMBRを使用してジオメトリの凸型を計算します。ジオメトリ・オブジェクト(geom1
)が円である場合、このファンクションは、円を囲む最小の矩形を戻します。
このファンクションは、geom1
が点タイプであるか、頂点の数が3未満であるか、または直線上に存在する複数の点である場合、NULL値を戻します。
測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。
例
次の例では、cola_c
の凸型部分のジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。ただし、ここでは、戻されるポリゴンが指定したポリゴンと同じ頂点を持ち、例としてはわかりにくくなっています。これは、指定したポリゴンが、単純な凸型のポリゴンであるためです。)
-- 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_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;
使用上の注意
図24-2のグレーの領域は、四角形geom1
ともう1つのポリゴンgeom2
でSDO_DIFFERENCEを使用した場合に戻されるポリゴンです。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、cola_a
とcola_c
の位相的な差(MINUS演算)となるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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.SDO_DISTANCE(
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_DISTANCE(
geom1 IN SDO_GEOMETRY,
geom2 IN SDO_GEOMETRY,
tol IN NUMBER
[, unit IN VARCHAR2]
) RETURN NUMBER;
パラメータ
geom2
からの距離を計算するジオメトリ・オブジェクトを指定します。
geom1
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
geom1
からの距離を計算するジオメトリ・オブジェクトを指定します。
geom2
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
測定単位(unit=
およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、2.10項を参照してください。
このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。
許容差を指定します(1.5.5項を参照)。
例
次の例では、cola_b
およびcola_d
間の最短距離が戻されます。(例では、2.1項の定義およびデータを使用しています。)
-- 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.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;
使用上の注意
図24-3のグレーの領域は、四角形geom1
ともう1つのポリゴンgeom2
でSDO_INTERSECTIONを使用した場合に戻されるポリゴンです。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、cola_a
とcola_c
の位相的に共通部分(AND演算)となるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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.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
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
許容差を指定します(1.5.5項を参照)。
測定単位(unit=
およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、2.10項を参照してください。
このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。
(3次元のジオメトリにのみ適用)入力ジオメトリに完全にまたは部分的に共有されているエッジが含まれている場合に、エッジの共有部分の長さを合計するタイミングを指定します。この値には、1(1回ごとに合計する)または2(2回ごとに合計する)を指定します。デフォルト値は1です。
このパラメータは、2次元の入力ジオメトリでは無視されます。
例
次の例では、COLA_MARKETS表に格納されているジオメトリ・オブジェクトのパラメータを戻します。最初の文ではすべてのオブジェクトの周囲を戻し、2番目の文ではcola_a
の周囲のみを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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.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
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第1の座標は1、第2の座標は2など)を指定します。たとえば、geom
にXとYの2つの縦座標が指定されている場合、1はX座標値、2はY座標値を示します。
例
次の例では、COLA_MARKETS表に含まれるcola_d
ジオメトリの最小境界矩形のX(第1)座標の最大値を戻します。(例では、2.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
パラメータ
ジオメトリ・オブジェクトを指定します。
geom
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
使用上の注意
このファンクションは、適切なMBRを作成できない場合はMBRジオメトリを戻しません。具体的には、次のとおりです。
入力ジオメトリがNULLである場合は、NULLのジオメトリを戻します。
入力ジオメトリが点である場合は、点を戻します。
入力ジオメトリが直線上に存在する複数の点である場合は、2点線を戻します。
入力ジオメトリに3つの次元が含まれていても、すべてのZ次元値が同じである場合は、3次元の線を戻します。
例
次の例では、COLA_MARKETS表のcola_d
ジオメトリの最小境界矩形を戻します。(例では、2.1項の定義およびデータを使用しています。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.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
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第1の座標は1、第2の座標は2など)を指定します。たとえば、geom
にXとYの2つの縦座標が指定されている場合、1はX座標値、2はY座標値を示します。
例
次の例では、COLA_MARKETS表に含まれるcola_d
ジオメトリの最小境界矩形のX(第1)座標の最小値を戻します。(例では、2.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.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
上にある点を表現する、点のジオメトリ・オブジェクトを戻します。ただし、内部の点である保証はありません。(つまり、geom1
の境界またはエッジ上であることもあります。)
ジオメトリ・オブジェクト上のどこにある点でも、戻り値になる可能性があります。戻される点に対して位置を指定することはできません。また、同じパラメータ値を指定してこのファンクションを複数回コールする場合、同じ点を戻す、または異なる点を戻す、という指定はできません。
ほとんどの場合、このファンクションは内部の点を戻すSDO_UTIL.INTERIOR_POINTファンクションと比較して有用性が低くなります。
例
次の例では、cola_a
上にある点であるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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))
使用上の注意
このファンクションは、入力ジオメトリからすべての座標を取得し、デローニ三角分割の計算にそれらを使用して、各要素が三角形のジオメトリ・オブジェクトを戻します。
geom
が、頂点の数が3未満であるか、または直線上に存在する複数の点である場合は、例外が発生します。
測地データの場合、このファンクションは、近似処理によってサポートされます(6.10.3項を参照)。
例
次の例では、cola_c
ポリゴン・ジオメトリを構成する三角形の要素(この場合は2つ)で構成されるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。
-- 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_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;
使用上の注意
図24-4のグレーの領域は、四角形geom1
ともう1つのポリゴンgeom2
でSDO_UNIONを使用した場合に戻されるポリゴンです。
位相的な和集合操作を実行せずにジオメトリを他のジオメトリに追加でき、両方のジオメトリが非接続である場合は、SDO_UTIL.APPENDファンクション(第32章を参照)を使用する方がSDO_UNIONファンクションより高速です。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、cola_a
とcola_c
の位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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)であることに注意してください。
パラメータ
ジオメトリ・オブジェクトを指定します。
許容差を指定します(1.5.5項を参照)。
測定単位(unit=
および容積単位を引用符で囲んだ文字列で、'unit=CUBIC_FOOT'
や'unit=CUBIC_METER'
など)を指定します。容積単位のリストについては、次の問合せを入力します。
SELECT short_name FROM mdsys.sdo_units_of_measure WHERE unit_of_meas_type = 'volume';
測定単位の指定の詳細は、2.10項を参照してください。
このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。
使用上の注意
このファンクションは、穴のあるソリッドを含め、すべてのソリッドに対して使用できます。
このファンクションは、測地データではサポートされません。
3次元ジオメトリのサポートの詳細は、1.11項を参照してください。
構文
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;
使用上の注意
図24-5のグレーの領域は、四角形geom1
ともう1つのポリゴンgeom2
でSDO_XORを使用した場合に戻されるポリゴンです。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、cola_a
とcola_c
の位相的な排他的論理和(XOR演算)となるジオメトリ・オブジェクトを戻します。(例では、2.1項の定義およびデータを使用しています。)
-- 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.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
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
許容差を指定します(1.5.5項を参照)。
条件付きのフラグを指定します(3次元の複合表面または複合ソリッドにのみ適用)。文字列値がTRUE
(デフォルト)である場合、2つの外部の輪が同じ平面にあり、エッジを共有していると、検証は行われなくなります。文字列値がFALSE
である場合、2つの外部の輪が同じ平面にあり、エッジを共有していても検証を行います。
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つ以上の点があり、その点には、ポリゴンをクローズする点が含まれるか(クローズする点では、最後の点が最初の点と同じです。)
ポリゴンが自己交差していないか
線またはポリゴンに同じ点がないか
ポリゴンは正しく指定されているか(外部の輪の境界は反時計回り、内部の輪の境界は時計回り)
ポリゴンの内部の輪とポリゴンの外部の輪の接点は1つ以下であるか
1つのポリゴンの外部の輪にポリゴンの内部の輪が2つ以上ある場合、それぞれのポリゴンの内部の輪とポリゴンの外部の輪の接点は1つ以下であるか
線ストリングに2つ以上の点があるか
ポリゴンの輪の要素の定義に、1桁および4桁のSDO_ETYPE値が混在していないか
円弧上にある点が直線上にないか、または同じ点ではないか
ジオメトリは(USER_SDO_GEOM_METADATAビューの)DIMINFO列の値で指定した範囲内にあるか
LRSジオメトリ(第7章を参照)が3次元または4次元であり、(次元数に応じて、3つまたは4つの)有効なメジャー次元の位置を持つか
COLLECTIONタイプのジオメトリの場合、前述の確認の一部は実行されません。具体的には、COLLECTIONタイプのジオメトリのポリゴン要素に対して、内部の輪の確認およびポリゴン同士の重複の確認は行われません。
複数点ジオメトリの場合、このファンクションは、3次元ジオメトリでの重複する頂点を確認しますが、2次元ジオメトリについては確認しません。
3次元ジオメトリの場合は、このファンクションにより、1.11.5項に示す確認も行われます。
ジオメトリの一貫性チェックでは、ファンクションはジオメトリの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(共有エッジ)が戻されても、この矩形に対する問合せには、正しい結果を戻すものもあります(6.2.4項を参照)。
例
次の例では、(意図的に無効な状態で作成された)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.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');
パラメータ
空間ジオメトリ表を指定します。
検査するジオメトリ・オブジェクト列を指定します。
検査結果を格納する結果表を指定します。無効なジオメトリの場合、result_table
に行が追加されます。無効なジオメトリが存在しない場合、結果がDONEである1つ以上(commit_interval
値によって異なる)の行が追加されます。
Spatialが内部コミット操作を実行し、結果がDONEである行をresult_table
に書き込む(最後のコミット後に無効なジオメトリの行が書き込まれなかった場合)前に検査するジオメトリの数を指定します。commit_interval
を指定しない場合、検査時には内部コミット操作は実行されません。
commit_interval
オプションは、検査の実行中にresult_table
の内容を参照する必要がある場合に有効です。
条件付きのフラグを指定します(3次元の複合表面または複合ソリッドにのみ適用)。文字列値がTRUE
(デフォルト)である場合、2つの外部の輪が同じ平面にあり、エッジを共有していると、検証は行われなくなります。文字列値がFALSE
である場合、2つの外部の輪が同じ平面にあり、エッジを共有していても検証を行います。
Oracle Database 10g互換性フラグ。文字列値がTRUE
である場合、2次元ジオメトリに固有の検証のみが実行され、3次元固有の検証は実行されません。文字列値がFALSE
(デフォルト)である場合は、ジオメトリに関連するすべての検証が実行されます。(flag10g
パラメータの詳細は、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションの「使用上の注意」を参照してください。)
使用上の注意
このプロシージャは、結果表に検査の結果をロードします。
このプロシージャをコールする前に、空の結果表(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ビュー(2.8項を参照)の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.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]
) RETURN VARCHAR2;
または
SDO_GEOM.WITHIN_DISTANCE(
geom1 IN SDO_GEOMETRY,
dist IN NUMBER,
geom2 IN SDO_GEOMETRY,
tol IN NUMBER
[, units IN VARCHAR2]
) RETURN VARCHAR2;
パラメータ
ジオメトリ・オブジェクトを指定します。
geom1
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
距離値を指定します。
ジオメトリ・オブジェクトを指定します。
geom2
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。
許容差を指定します(1.5.5項を参照)。
測定単位(unit=
およびMDSYS.SDO_AREA_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、2.10項を参照してください。
このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。測地データの場合、デフォルトの測定単位はmです。
使用上の注意
パフォーマンスを向上させるには、SDO_GEOM.WITHIN_DISTANCE
ファンクションのかわりにSDO_WITHIN_DISTANCE演算子(第19章を参照)を使用します。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、1.9項を参照してください。
このファンクションは、オブジェクトの組合せが指定した距離内にある場合にTRUEを戻し、そうでない場合はFALSEを戻します。
領域のある2つのオブジェクト(たとえば、線やポリゴンなど、点以外のオブジェクト)の距離は、それら2つのオブジェクト間の最短距離です。そのため、2つの隣接したポリゴン間の距離はゼロです。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、cola_b
とcola_d
間の最短距離が1距離単位以内であるかどうかが検査されます。(例では、2.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