プライマリ・コンテンツに移動
Oracle® Spatial and Graph開発者ガイド
12cリリース1 (12.1)
B72470-07
目次へ移動
目次
索引へ移動
索引

前
次

18.10 SDO_NN_DISTANCE

書式

SDO_NN_DISTANCE(number);

説明

SDO_NN演算子によって戻されたオブジェクトの距離を戻します。SDO_NN演算子へのコール内のみで有効です。

キーワードおよびパラメータ

説明

number

SDO_NN演算子に渡された最後のパラメータと同じ数を指定します。データ型はNUMBERです。

戻り値

この演算子は、SDO_NN演算子によって戻されたオブジェクトの距離を戻します。2つのジオメトリ・オブジェクトの近さを決定する際、各オブジェクトの表面上の2点間の最短距離が使用されます。

使用上の注意

SDO_NN_DISTANCEは、SDO_NN演算子の補助演算子です。この補助演算子は、指定されたジオメトリと最も近くにあるオブジェクトの間の距離を戻します。この距離は、補助データとしてSDO_NN演算子に渡されます。(演算子での補助データの使用方法については、『Oracle Databaseデータ・カートリッジ開発者ガイド』の補助データの項を参照してください。)

numberパラメータには任意の数を選択できます。ただし、SDO_NN演算子へのコールの最後のパラメータと一致させる必要があります。

距離値を格納および操作するには、バインド変数を使用します。

次の例では、COLA_MARKETS表のSHAPE列から、指定した点(10,7)に最も近い2つのオブジェクトを検索し、各オブジェクトと点の間の距離を戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」および図2-1に示す定義およびデータを使用しています。)

SELECT   /*+ INDEX(c cola_spatial_idx) */ 
   c.mkt_id, c.name, SDO_NN_DISTANCE(1) dist
   FROM cola_markets c  
   WHERE SDO_NN(c.shape,  sdo_geometry(2001, NULL, 
      sdo_point_type(10,7,NULL), NULL,  NULL),
      'sdo_num_res=2', 1) = 'TRUE' ORDER BY dist; 

    MKT_ID NAME                                   DIST                          
---------- -------------------------------- ----------                          
         4 cola_d                           .828427125                          
         2 cola_b                           2.23606798

この例では、次に注意してください。

  • SDO_NN_DISTANCEのnumberパラメータに1が使用されます。また、SDO_NNの最後のパラメータ('sdo_num_res=2'の後)に1が指定されます。

  • 列の別名distには、オブジェクトと点の間の距離が含まれます。(測地データの場合、距離の単位はmです。非測地データの場合、距離の単位はデータに関連付けられた単位です。)

次の例では、sdo_batch_sizeキーワードを使用して、様々な業種を含むYELLOW_PAGES表からホテルに最も近い2軒のイタリアン・レストランを選択します。

SELECT * FROM 
 (SELECT /*+ FIRST_ROWS */ y.name FROM YELLOW_PAGES  y 
  WHERE SDO_NN(y.geometry, :my_hotel, 'sdo_batch_size=100', 1) = 'TRUE' 
   AND y.business = 'Italian Restaurant' 
  ORDER BY SDO_NN_DISTANCE(1)) 
WHERE ROWNUM <=10;

前述の問合せでは、FIRST_ROWSヒントにより、空間索引にORDER BY操作をプッシュして、オプティマイザのパフォーマンスを向上できます。 :my_hotelは、バインド変数またはリテラル値のいずれかです。

FIRST_ROWSヒントは、ローカル・パーティション空間索引でも使用できます。前述の例では、YELLOW_PAGES表が名前でパーティション化されている場合、問合せは次のように実行されます。

  1. パーティションごとに、10行が検出されるまで、空間索引を使用してORDER BY操作が処理されます。

  2. すべてのパーティションが完了すると、前述の手順で検出されたすべての行がソートされ、上位10行が戻されます。

関連項目