ヘッダーをスキップ
Oracle Spatial開発者ガイド
11g リリース1(11.1)
E05682-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

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

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

ジオメトリ・サブプログラムを表24-1に示します。その後、使用方法について説明します。

表24-1 ジオメトリ・サブプログラム

サブプログラム 説明

SDO_GEOM.RELATE


2つのオブジェクトの相互作用の関係を判断します。

SDO_GEOM.SDO_ARC_DENSIFY


各円弧を直線で構成される近似値に変更し、各円を円に近い一連の直線で構成されるポリゴンに変更します。

SDO_GEOM.SDO_AREA


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

SDO_GEOM.SDO_BUFFER


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

SDO_GEOM.SDO_CENTROID


ポリゴンの中心を戻します。

SDO_GEOM.SDO_CLOSEST_POINTS


2つのジオメトリ間の最短距離、および最短距離を示す点(各ジオメトリに1つ)を計算します。

SDO_GEOM.SDO_CONVEXHULL


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

SDO_GEOM.SDO_DIFFERENCE


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

SDO_GEOM.SDO_DISTANCE


2つのジオメトリ・オブジェクト間の距離を計算します。

SDO_GEOM.SDO_INTERSECTION


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

SDO_GEOM.SDO_LENGTH


ジオメトリの周囲または長さを計算します。

SDO_GEOM.SDO_MAX_MBR_ORDINATE


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

SDO_GEOM.SDO_MBR


ジオメトリの最小境界矩形を戻します。

SDO_GEOM.SDO_MIN_MBR_ORDINATE


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

SDO_GEOM.SDO_POINTONSURFACE


ポリゴン上にある点を戻します。

SDO_GEOM.SDO_UNION


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

SDO_GEOM.SDO_VOLUME


3次元ソリッド・ジオメトリの容積を計算します。

SDO_GEOM.SDO_XOR


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

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT


ジオメトリが有効であるかを判断し、そのジオメトリが無効な場合、コンテキスト情報を戻します。

SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT


列に格納されているすべてのジオメトリが有効かどうかを判断し、無効なジオメトリのコンテキスト情報を戻します。

SDO_GEOM.WITHIN_DISTANCE


2つのジオメトリ間の距離が、指定された距離内にあるかどうかを判断します。


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


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つから選択します(2.8項を参照)。

mask

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

geom2

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

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

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

使用上の注意

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

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

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

論理ブール演算子ORを使用してmask値を組み合せることができます。たとえば、'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_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つから選択します(2.8項を参照)。

tol

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

params

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

使用上の注意

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

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

'arc_tolerance=0.05 unit=km'

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

図24-1 円弧の許容差

図24-1の説明が続きます。
図24-1「円弧の許容差」の説明

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

構文

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つから選択します(2.8項を参照)。

unit

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

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

tol

許容差を指定します(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

構文

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つから選択します(2.8項を参照)。

dist

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

tol

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

params

次のキーワードの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ファンクションを使用してジオメトリを最初に稠密化してから変換します。

測地データの場合、このファンクションは、近似処理によってサポートされます(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.12項の測地定義およびデータを使用して、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

構文

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つから選択します(2.8項を参照)。

tol

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

使用上の注意

このファンクションは、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

構文

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

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

unit

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

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

dist

geom1geom2の間の最短距離を含む出力パラメータです。具体的には、geomageombの間の距離を示します。

geoma

geom2の境界上の最近点に最も近いgeom1の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。

geomb

geom1の境界上の最近点に最も近いgeom2の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。

使用上の注意

このプロシージャでは、出力パラメータを使用して、計算された最短距離、および最短距離に関連付けられた各入力ジオメトリ上の点を格納します。

次の例では、ジオメトリ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_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つから選択します(2.8項を参照)。

tol

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

使用上の注意

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

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

このファンクションは、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

構文

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つから選択します(2.8項を参照)。

geom2

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

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

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

使用上の注意

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

図24-2 SDO_GEOM.SDO_DIFFERENCE

図24-2の説明が続きます。
図24-2「SDO_GEOM.SDO_DIFFERENCE」の説明

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

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

構文

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;

説明

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

パラメータ

geom1

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

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

geom2

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

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

unit

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

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

tol

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

使用上の注意

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

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

構文

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つから選択します(2.8項を参照)。

geom2

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

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

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

使用上の注意

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

図24-3 SDO_GEOM.SDO_INTERSECTION

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

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

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

構文

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つから選択します(2.8項を参照)。

tol

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

unit

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

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

count_shared_edges

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

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

使用上の注意

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

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

構文

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つから選択します(2.8項を参照)。

ordinate_pos

ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第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

関連項目


SDO_GEOM.SDO_MBR

構文

SDO_GEOM.SDO_MBR(

     geom IN SDO_GEOMETRY

     [, dim IN SDO_DIM_ARRAY]

     ) RETURN SDO_GEOMETRY;

説明

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

パラメータ

geom

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

dim

geomに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

使用上の注意

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

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

構文

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つから選択します(2.8項を参照)。

ordinate_pos

ジオメトリ・オブジェクトの定義における縦座標(次元)の位置(第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

構文

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つから選択します(2.8項を参照)。

tol

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

使用上の注意

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

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

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

関連項目

なし。


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つから選択します(2.8項を参照)。

geom2

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

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

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

使用上の注意

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

図24-4 SDO_GEOM.SDO_UNION

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

位相的な和集合操作を実行せずにジオメトリを他のジオメトリに追加でき、両方のジオメトリが非接続である場合は、SDO_UTIL.APPENDファンクション(第32章を参照)を使用する方がSDO_UNIONファンクションより高速です。

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

次の例では、cola_acola_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)であることに注意してください。

関連項目


SDO_GEOM.SDO_VOLUME

構文

SDO_GEOM.SDO_VOLUME(

     geom IN SDO_GEOMETRY,

     tol IN NUMBER

     [, unit IN VARCHAR2]

     ) RETURN NUMBER;

説明

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

パラメータ

geom

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

tol

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

unit

測定単位(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項を参照してください。

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

-- 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.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つから選択します(2.8項を参照)。

geom2

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

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

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

使用上の注意

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

図24-5 SDO_GEOM.SDO_XOR

図24-5の説明が続きます。
図24-5「SDO_GEOM.SDO_XOR」の説明

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

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

構文

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(

     theGeometry IN SDO_GEOMETRY,

     theDimInfo IN SDO_DIM_ARRAY,

     conditional IN VARCHAR2 DEFAULT 'TRUE'

     ) RETURN VARCHAR2;

または

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(

     theGeometry IN SDO_GEOMETRY,

     tolerance IN NUMBER,

     conditional IN VARCHAR2 DEFAULT 'TRUE'

     ) RETURN VARCHAR2;

説明

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

パラメータ

theGeometry

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

theDimInfo

theGeometryに対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tolerance

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

conditional

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

使用上の注意

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

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

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

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

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

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

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

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

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

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

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

次の例では、(意図的に無効な状態で作成された)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

構文

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

説明

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

パラメータ

geom_table

空間ジオメトリ表を指定します。

geom_column

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

result_table

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

commit_interval

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

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

conditional

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

使用上の注意

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

このプロシージャをコールする前に、空の結果表(result_tableパラメータに指定する表)を作成する必要があります。この結果表の形式は、(sdo_rowid ROWID, result VARCHAR2(2000))です。result_tableが値を含む場合は、プロシージャをコールする前に表を切り捨てる必要があります。そうしないと、プロシージャは表の既存のデータに行を追加します。

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

無効なジオメトリの各行のSDO_ROWID列には、無効なジオメトリを含む行のROWID値が含まれます。また、RESULT列にはOracleエラー・メッセージ番号およびエラーのコンテキスト(ジオメトリが無効になった原因の座標、エッジまたは輪)が含まれます。その場合は、エラー・メッセージを調べて、ジオメトリが無効である原因を判断します。

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

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

構文

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;

説明

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

パラメータ

geom1

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

dim1

geom1に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

dist

距離値を指定します。

geom2

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

dim2

geom2に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(2.8項を参照)。

tol

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

units

測定単位(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_bcola_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

関連項目