地理参照座標系(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表」を参照)内の情報が使用されます。また、次のレガシー・ビューを使用すると、メジャーの角度、面積および距離の単位を簡単に確認することもできます。
MDSYS.SDO_ANGLE_UNITS (「MDSYS.SDO_ANGLE_UNITSビュー」を参照)
MDSYS.SSDO_AREA_UNITS (「MDSYS.SDO_AREA_UNITSビュー」を参照)
MDSYS.SSDO_DIST_UNITS (「MDSYS.SDO_DIST_UNITSビュー」を参照)
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です。例: |
UNIT_OF_MEAS_NAME |
ユーザー定義の測定単位の名前を指定します。例: |
SHORT_NAME |
測定単位の短縮名を指定します(オプションの短縮名がある場合)。 |
UNIT_OF_MEAS_TYPE |
その単位が使用される測定の種類です。 |
TARGET_UOM_ID |
サポート用のオプションとして、面積単位の場合は |
FACTOR_B |
浮動小数点数として表現できる値の場合は、ユーザー定義の1単位と等しい平方m (面積単位の場合)の数値またはm (距離単位の場合)の数値を指定します。たとえば、標準の1mの半分として定義された単位の場合は、 単純な浮動小数点数として表現できない値の場合は、ユーザー定義の単位の1つと等しい平方mの数値(面積単位の場合)またはmの数値(距離単位の場合)を決定する式FACTOR_B/FACTOR_Cの被除数を指定します。 |
FACTOR_C |
浮動小数点数として表現できる値の場合は、1を指定します。 単純な浮動小数点数として表現できない値の場合は、ユーザー定義の単位の1つと等しい平方mの数値(面積単位の場合)またはmの数値(距離単位の場合)を決定する式FACTOR_B/FACTOR_Cの除数を指定します。 |
INFORMATION_SOURCE |
|
DATA_SOURCE |
単位を説明する短い文です。例: |
IS_LEGACY |
|
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