書式
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つ)を計算します。
パラメータ
ジオメトリ・オブジェクト。
ジオメトリ・オブジェクト。
許容差(「許容差」を参照)。
測定単位(unit=およびMDSYS.SDO_DIST_UNITS表のSDO_UNIT値を引用符で囲んだ文字列で、'unit=KM'など)を指定します。測定単位の指定の詳細は、「測定単位のサポート」を参照してください。
このパラメータを指定しない場合、データに関連付けられた測定単位が使用されます。
geom1とgeom2の間の最短距離を含む出力パラメータです。具体的には、geomaとgeombの間の距離を示します。
geom2の境界上の最近点に最も近いgeom1の境界上にある点ジオメトリ・オブジェクトを含む出力パラメータです。
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))
関連項目
なし。