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

前
次

2.11 測定単位のサポート

地理参照座標系(SDO_SRID値)が入力ジオメトリに関連付けられている場合、測定を伴うジオメトリ・ファンクションを使用すると、オプションのunitパラメータを使用して、特定の距離または面積の測定単位を指定できます。unitパラメータは、SDO_SRID値がNULLであるジオメトリ(垂直デカルト・システム)には無効です。座標系のサポートについては、「座標系(空間参照システム)」を参照してください。

デフォルトの測定単位は、地理参照座標系に関連付けられた測定単位です。ほとんどの座標系の測定単位はmです。この場合、デフォルトの距離単位はmで、デフォルトの面積単位はm2です。ただし、unitパラメータを使用すると、アプリケーション・ユーザーにとってより有効な結果(レストランまでの距離のマイル表示など)をSpatialで自動的に換算し、戻すことができます。

unitパラメータは、文字列unit=およびSDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)の有効なUNIT_OF_MEAS_NAME値を一重引用符で囲む必要があります。たとえば、次の例(「座標系変換の例」例6-17のデータおよび定義を使用)に示す'unit=KM'は、測定単位としてkmを指定しています。

SELECT c.name, SDO_GEOM.SDO_LENGTH(c.shape, m.diminfo, 'unit=KM')
  FROM cola_markets_cs c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'COLA_MARKETS_CS' AND m.column_name = 'SHAPE';

Spatial and Graphでは、有効な単位名や、異なる単位間での比較や変換に使用する比率を決定するために、SDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)内の情報が使用されます。また、次のレガシー・ビューを使用すると、メジャーの角度、面積および距離の単位を簡単に確認することもできます。

2.11.1 ユーザー定義の測定単位の作成

Oracleから提供されている面積および距離の測定単位でニーズを十分に満たすことができない場合は、ユーザー定義の面積および距離の単位を作成できます。(ユーザー定義の角度の単位は作成できません。)ユーザー定義の測定単位を作成するには、DBAロールが付与されているユーザーとしてデータベースに接続し、SDO_UNITS_OF_MEASURE表に必要な単位ごとに1行挿入する必要があります(「SDO_UNITS_OF_MEASURE表」を参照)。

表2-14に、ユーザー定義の測定単位に対応する行を挿入する場合に使用するSDO_UNITS_OF_MEASURE表の列と、各列の要件および推奨値を示します。

表2-14 ユーザー定義の単位で使用するSDO_UNITS_OF_MEASURE表のエントリ

列名 説明

UOM_ID

任意の測定単位ID番号で、Oracle提供の単位または別のユーザー定義の単位で現在使用されていないIDです。例: 1000001

UNIT_OF_MEAS_NAME

ユーザー定義の測定単位の名前を指定します。例: HALF_METER

SHORT_NAME

測定単位の短縮名を指定します(オプションの短縮名がある場合)。

UNIT_OF_MEAS_TYPE

その単位が使用される測定の種類です。area(面積単位の場合)またはlength(距離単位の場合)のいずれかを指定する必要があります。

TARGET_UOM_ID

サポート用のオプションとして、面積単位の場合は10008(10008はSQ_METERのUOM_ID)、距離単位の場合は10032(10032はMETERのUOM_ID)を入力することをお薦めします。

FACTOR_B

浮動小数点数として表現できる値の場合は、ユーザー定義の1単位と等しい平方m (面積単位の場合)の数値またはm (距離単位の場合)の数値を指定します。たとえば、標準の1mの半分として定義された単位の場合は、.5を指定します。

単純な浮動小数点数として表現できない値の場合は、ユーザー定義の単位の1つと等しい平方mの数値(面積単位の場合)またはmの数値(距離単位の場合)を決定する式FACTOR_B/FACTOR_Cの被除数を指定します。

FACTOR_C

浮動小数点数として表現できる値の場合は、1を指定します。

単純な浮動小数点数として表現できない値の場合は、ユーザー定義の単位の1つと等しい平方mの数値(面積単位の場合)またはmの数値(距離単位の場合)を決定する式FACTOR_B/FACTOR_Cの除数を指定します。

INFORMATION_SOURCE

USER_DEFINEDを指定します。

DATA_SOURCE

単位を説明する短い文です。例: User-defined half meter

IS_LEGACY

FALSEを指定します。

LEGACY_CODE

(ユーザー定義の単位には使用しないでください。)

例2-20では、HALF_METERという名前のユーザー定義の距離単位を作成し、作成した単位を問合せで使用して、指定した店舗の400,000半メートル(200km)以内に居住するすべての顧客を検索します。

例2-20 ユーザー定義の測定単位の作成および使用

-- Distance unit: HALF_METER
-- FACTOR_B specifies how many meters = one of this unit.

INSERT INTO MDSYS.SDO_UNITS_OF_MEASURE
  (UOM_ID, UNIT_OF_MEAS_NAME, UNIT_OF_MEAS_TYPE, TARGET_UOM_ID,
   FACTOR_B, FACTOR_C, INFORMATION_SOURCE, DATA_SOURCE, IS_LEGACY)
VALUES
  (100001, 'HALF_METER', 'length', 100001,
   .5, 1, 'User-defined half meter', 'USER_DEFINED', 'FALSE');
 
. . .
-- Find all the customers within 400,000 half-meters of store_id = 101
SELECT /*+ordered*/
    c.customer_id,
    c.first_name,
    c.last_name
FROM stores s,
    customers c
WHERE s.store_id = 101
AND sdo_within_distance (c.cust_geo_location,
    s.store_geo_location,
    'distance = 400000 unit = HALF_METER') = 'TRUE';
 
CUSTOMER_ID FIRST_NAME                     LAST_NAME                           
----------- ------------------------------ ------------------------------      
       1005 Carla                          Rodriguez                           
       1004 Thomas                         Williams                            
       1003 Marian                         Chang                               
       1001 Alexandra                      Nichols