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

前
次

31.3 SDO_UTIL.BEARING_TILT_FOR_POINTS

書式

SDO_UTIL.BEARING_TILT_FOR_POINTS(
     start_point IN SDO_GEOMETRY, 
     end_point   IN SDO_GEOMETRY, 
     tol         IN NUMBER, 
     bearing     OUT NUMBER, 
     tilt        OUT NUMBER 
     ) RETURN SDO_GEOMETRY;

説明

開始点から終了点への方位と傾きを計算します。

パラメータ

start_point

方位と傾きを計算するときの基点となる開始点ジオメトリ・オブジェクトを指定します。測地座標系に基づく点ジオメトリを指定する必要があります。

end_point

方位と傾きを計算するときに使用する終了点ジオメトリ・オブジェクトを指定します。start_pointと同じ測地座標系に基づく点ジオメトリを指定する必要があります。

tol

許容差(「許容差」を参照)。

bearing

北を基準として時計回りに測定されるラジアンの数値を指定します。

tilt

法線を基準に測定されるラジアンの数値を指定します。

使用上の注意

入力する点ジオメトリは、同一の測地座標系に基づく必要があります。非測地座標系に基づく場合、出力される方位はNULL値になります。

傾きは、高さの値の差を点と点の距離で除算した結果の逆正接として計算されます(高さは距離計算から除外されます)。つまり、tilt = atan(height_difference/distance)となります。

ラジアンを10進度に変換したり、10進度をラジアンに変換するには、SDO_UTIL.CONVERT_UNITファンクションを使用します。開始点を基準として指定された距離および方位に存在する点ジオメトリを戻すには、SDO_UTIL.POINT_AT_BEARINGファンクションを使用します。

次の例では、2つの地点(経度/緯度で指定)の方位と傾きを計算します。開始点の標高は0 (ゼロ)で、終了点の標高は5000メートルです。この例で表示される方位と傾きの値はラジアンです。

DECLARE
  bearing NUMBER;
  tilt    NUMBER;
BEGIN
  SDO_UTIL.BEARING_TILT_FOR_POINTS(
    SDO_GEOMETRY(2001, 8307,
      SDO_POINT_TYPE(-71.5, 43, 0), NULL, NULL), -- start_point
    SDO_GEOMETRY(2001, 8307,
      SDO_POINT_TYPE(-71, 43.5, 5000), NULL, NULL), -- end_point
    0.05,  --tolerance
    bearing,
    tilt);
  DBMS_OUTPUT.PUT_LINE('Bearing = ' || bearing);
  DBMS_OUTPUT.PUT_LINE('Tilt = ' || tilt);
END;
/
Bearing = .628239101930666          
Tilt = .0725397288678286910476298724869396973718

次の例は前述の例と同じですが、表示される方位と結果はラジアンではなく10進度です。

DECLARE
  bearing NUMBER;
  tilt    NUMBER;
BEGIN
  SDO_UTIL.BEARING_TILT_FOR_POINTS(
    SDO_GEOMETRY(2001, 8307,
      SDO_POINT_TYPE(-71.5, 43, 0), NULL, NULL), -- start_point
    SDO_GEOMETRY(2001, 8307,
      SDO_POINT_TYPE(-71, 43.5, 5000), NULL, NULL), -- end_point
    0.05,  --tolerance
    bearing,
    tilt);
  DBMS_OUTPUT.PUT_LINE('Bearing in degrees = '  
    || bearing * 180 / 3.1415926535897932384626433832795);
  DBMS_OUTPUT.PUT_LINE('Tilt in degrees = ' 
    || tilt * 180 / 3.1415926535897932384626433832795);
END;
/
Bearing in degrees = 35.99544906571628894295547577999851892359
Tilt in degrees = 4.15622031114988533540349823511872120415