6.9 ユーザー定義の座標参照系の作成
Oracleから提供されている座標系でニーズを十分に満たすことができない場合は、ユーザー定義の座標参照系を作成できます。
ノート:
「座標系(空間参照システム)」で述べたように、「座標系」という用語と「座標参照系」(CRS)という用語は、通常、区別なく使用されます。ただし、「座標参照系」は、地球をベースにしている必要があります。
ユーザー定義のCRSを作成するステップは、厳密には、それが測地座標参照系であるか、投影座標参照系であるかによって異なります。どちらの場合も、座標系に関する情報(座標軸、軸の名前、測定単位など)を指定する必要があります。測地CRSの場合は、データに関する情報(楕円体、本初子午線など)を指定します(「測地CRSの作成」を参照)。投影CRSの場合は、ソース(測地)CRSと投影法に関する情報(操作およびパラメータ)を指定します(「投影CRSの作成」を参照)。
ユーザー定義の座標系の場合、SRID値はユーザー定義の座標系で使用可能な5000000から6000000 (500万から600万)である必要があります。
- 測地CRSの作成
- 投影CRSの作成
- 垂直CRSの作成
- 複合CRSの作成
- 地理3D CRSの作成
- 変換操作の作成
- British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用
親トピック: 座標系(空間参照システム)
6.9.1 測地CRSの作成
測定単位、座標軸、SDO_COORD_SYS表の行、楕円体、本初子午線、データなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(「SDO_COORD_REF_SYSTEMビュー」を参照)に行を挿入して、新しい測地CRSを定義します。
例6-5では、My Own NAD27という名前の架空の測地CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 CRSと同じです)。
定義に必要な情報が不足している場合は、必要に応じて、次のステップに従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。
- 測定単位がSDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。
- 座標軸がSDO_COORD_AXES表(「SDO_COORD_AXES表」を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。
- 座標系の適切なエントリがSDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)に定義されていない場合は、表に行を挿入します。例6-6では、架空の座標系の定義を挿入しています。
- 楕円体がSDO_ELLIPSOIDS表(「SDO_ELLIPSOIDS表」を参照)に定義されていない場合は、表に行を挿入して新しい楕円体を定義します。
- 本初子午線がSDO_PRIME_MERIDIANS表(「SDO_PRIME_MERIDIANS表」を参照)に定義されていない場合は、表に行を挿入して新しい本初子午線を定義します。
- データがSDO_DATUMS表(「SDO_DATUMS表」を参照)に定義されていない場合は、表に行を挿入して新しいデータを定義します。
例6-5 ユーザー定義の測地座標参照系の作成
INSERT INTO SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
GEOG_CRS_DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS,
IS_VALID,
SUPPORTS_SDO_GEOMETRY)
VALUES (
9994267,
'My Own NAD27',
'GEOGRAPHIC2D',
6422,
6267,
6267,
NULL,
NULL,
NULL,
NULL,
NULL,
'EPSG',
'FALSE',
NULL,
NULL,
NULL,
'TRUE',
'TRUE');
例6-6 SDO_COORD_SYS表への行の挿入
INSERT INTO SDO_COORD_SYS (
COORD_SYS_ID,
COORD_SYS_NAME,
COORD_SYS_TYPE,
DIMENSION,
INFORMATION_SOURCE,
DATA_SOURCE)
VALUES (
9876543,
'My custom CS. Axes: lat, long. Orientations: north, east. UoM: deg',
'ellipsoidal',
2,
'Myself',
'Myself');
親トピック: ユーザー定義の座標参照系の作成
6.9.2 投影CRSの作成
測定単位、座標軸、SDO_COORD_SYS表の行、ソース座標系、投影操作、投影パラメータなどの必要情報が定義済の場合は、SDO_COORD_REF_SYSTEMビュー(「SDO_COORD_REF_SYSTEMビュー」を参照)に行を挿入して新しい投影CRSを定義します。
例6-7では、My Own NAD27 / Cuba Norteという名前の架空の投影CRSの定義を挿入しています(これは、SRIDと名前以外は、Oracle提供のNAD27 / Cuba Norte CRSと同じです)。
定義に必要な情報が不足している場合は、必要に応じて、次のステップに従って情報を定義してからSDO_COORD_REF_SYSTEMビューに行を挿入します。
- 測定単位がSDO_UNITS_OF_MEASURE表(「SDO_UNITS_OF_MEASURE表」を参照)に定義されていない場合は、表に行を挿入して新しい測定単位を定義します。
- 座標軸がSDO_COORD_AXES表(「SDO_COORD_AXES表」を参照)に定義されていない場合は、新しい座標軸ごとに1行を表に挿入します。
- 座標系の適切なエントリがSDO_COORD_SYS表(「SDO_COORD_SYS表」を参照)に定義されていない場合は、表に行を挿入します。(「測地CRSの作成」の例6-6を参照してください)。
- 投影操作がSDO_COORD_OPS表(「SDO_COORD_OPS表」を参照)に定義されていない場合は、表に行を挿入して新しい投影操作を定義します。例6-8に、Oracleが提供している座標操作ID 18061の情報を挿入する文を示します。
- 投影操作のパラメータがSDO_COORD_OP_PARAM_VALS表(「SDO_COORD_OP_PARAM_VALS表」を参照)に定義されていない場合は、新しいパラメータごとに1行を表に挿入します。例6-9に、Oracleが提供している、ID値が8801、8802、8805、8806および8807のパラメータの情報を挿入する文を示します。
例6-7 ユーザー定義の投影座標参照系の作成
INSERT INTO SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
GEOG_CRS_DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS,
IS_VALID,
SUPPORTS_SDO_GEOMETRY)
VALUES (
9992085,
'My Own NAD27 / Cuba Norte',
'PROJECTED',
4532,
NULL,
6267,
4267,
18061,
NULL,
NULL,
'Institut Cubano di Hidrografia (ICH)',
'EPSG',
'FALSE',
NULL,
NULL,
NULL,
'TRUE',
'TRUE');
例6-8 SDO_COORD_OPS表への行の挿入
INSERT INTO SDO_COORD_OPS (
COORD_OP_ID,
COORD_OP_NAME,
COORD_OP_TYPE,
SOURCE_SRID,
TARGET_SRID,
COORD_TFM_VERSION,
COORD_OP_VARIANT,
COORD_OP_METHOD_ID,
UOM_ID_SOURCE_OFFSETS,
UOM_ID_TARGET_OFFSETS,
INFORMATION_SOURCE,
DATA_SOURCE,
SHOW_OPERATION,
IS_LEGACY,
LEGACY_CODE,
REVERSE_OP,
IS_IMPLEMENTED_FORWARD,
IS_IMPLEMENTED_REVERSE)
VALUES (
18061,
'Cuba Norte',
'CONVERSION',
NULL,
NULL,
NULL,
NULL,
9801,
NULL,
NULL,
NULL,
'EPSG',
1,
'FALSE',
NULL,
1,
1,
1);
例6-9 SDO_COORD_OP_PARAM_VALS表への行の挿入
INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8801,
22.21,
NULL,
9110);
INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8802,
-81,
NULL,
9110);
INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8805,
.99993602,
NULL,
9201);
INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8806,
500000,
NULL,
9001);
INSERT INTO SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
18061,
9801,
8807,
280296.016,
NULL,
9001);
例6-10 ユーザー定義の投影CRSの作成(拡張例)
-- Create an EPSG equivalent for the following CRS:
--
-- CS_NAME: VDOT_LAMBERT
-- SRID: 51000000
-- AUTH_SRID: 51000000
-- AUTH_NAME: VDOT Custom Lambert Conformal Conic
-- WKTEXT:
--
-- PROJCS[
-- "VDOT_Lambert",
-- GEOGCS[
-- "GCS_North_American_1983",
-- DATUM[
-- "D_North_American_1983",
-- SPHEROID["GRS_1980", 6378137.0, 298.257222101]],
-- PRIMEM["Greenwich", 0.0],
-- UNIT["Decimal Degree",0.0174532925199433]],
-- PROJECTION["Lambert_Conformal_Conic"],
-- PARAMETER["False_Easting", 0.0],
-- PARAMETER["False_Northing", 0.0],
-- PARAMETER["Central_Meridian", -79.5],
-- PARAMETER["Standard_Parallel_1", 37.0],
-- PARAMETER["Standard_Parallel_2", 39.5],
-- PARAMETER["Scale_Factor", 1.0],
-- PARAMETER["Latitude_Of_Origin", 36.0],
-- UNIT["Meter", 1.0]]
-- First, the base geographic CRS (GCS_North_American_1983) already exists in EPSG.
-- It is 4269:
-- Next, find the EPSG equivalent for PROJECTION["Lambert_Conformal_Conic"]:
select
coord_op_method_id,
legacy_name
from
sdo_coord_op_methods
where
not legacy_name is null
order by
coord_op_method_id;
-- Result:
-- COORD_OP_METHOD_ID LEGACY_NAME
-- ------------------ --------------------------------------------------
-- 9802 Lambert Conformal Conic
-- 9803 Lambert Conformal Conic (Belgium 1972)
-- 9805 Mercator
-- 9806 Cassini
-- 9807 Transverse Mercator
-- 9829 Polar Stereographic
--
-- 6 rows selected.
--
-- It is EPSG method 9802. Create a projection operation 510000001, based on it:
insert into MDSYS.SDO_COORD_OPS (
COORD_OP_ID,
COORD_OP_NAME,
COORD_OP_TYPE,
SOURCE_SRID,
TARGET_SRID,
COORD_TFM_VERSION,
COORD_OP_VARIANT,
COORD_OP_METHOD_ID,
UOM_ID_SOURCE_OFFSETS,
UOM_ID_TARGET_OFFSETS,
INFORMATION_SOURCE,
DATA_SOURCE,
SHOW_OPERATION,
IS_LEGACY,
LEGACY_CODE,
REVERSE_OP,
IS_IMPLEMENTED_FORWARD,
IS_IMPLEMENTED_REVERSE)
VALUES (
510000001,
'VDOT_Lambert',
'CONVERSION',
NULL,
NULL,
NULL,
NULL,
9802,
NULL,
NULL,
NULL,
NULL,
1,
'FALSE',
NULL,
1,
1,
1);
-- Now, set the parameters. See which are required:
select
use.parameter_id || ': ' ||
use.legacy_param_name
from
sdo_coord_op_param_use use
where
use.coord_op_method_id = 9802;
-- result:
-- 8821: Latitude_Of_Origin
-- 8822: Central_Meridian
-- 8823: Standard_Parallel_1
-- 8824: Standard_Parallel_2
-- 8826: False_Easting
-- 8827: False_Northing
--
-- 6 rows selected.
-- Also check the most common units we will need:
select
UOM_ID || ': ' ||
UNIT_OF_MEAS_NAME
from
sdo_units_of_measure
where
uom_id in (9001, 9101, 9102, 9201)
order by
uom_id;
-- result:
-- 9001: metre
-- 9101: radian
-- 9102: degree
-- 9201: unity
-- Now, configure the projection parameters:
-- 8821: Latitude_Of_Origin
insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8821,
36.0,
NULL,
9102);
-- 8822: Central_Meridian
insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8822,
-79.5,
NULL,
9102);
-- 8823: Standard_Parallel_1
insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8823,
37.0,
NULL,
9102);
-- 8824: Standard_Parallel_2
insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8824,
39.5,
NULL,
9102);
-- 8826: False_Easting
insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8826,
0.0,
NULL,
9001);
-- 8827: False_Northing
insert into MDSYS.SDO_COORD_OP_PARAM_VALS (
COORD_OP_ID,
COORD_OP_METHOD_ID,
PARAMETER_ID,
PARAMETER_VALUE,
PARAM_VALUE_FILE_REF,
UOM_ID)
VALUES (
510000001,
9802,
8827,
0.0,
NULL,
9001);
-- Now, create the actual projected CRS.Look at the GEOG_CRS_DATUM_ID
-- and COORD_SYS_ID first. The GEOG_CRS_DATUM_ID is the datum of
-- the base geog_crs (4269):
select datum_id from sdo_coord_ref_sys where srid = 4269;
-- DATUM_ID
-- ----------
-- 6269
-- And the COORD_SYS_ID is the Cartesian CS used for the projected CRS.
-- We can use 4400, if meters will be the unit:
select COORD_SYS_NAME from sdo_coord_sys where COORD_SYS_ID = 4400;
-- Cartesian 2D CS. Axes: easting, northing (E,N). Orientations: east, north.
-- UoM: m.
-- Now create the projected CRS:
insert into MDSYS.SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS,
GEOG_CRS_DATUM_ID)
VALUES (
51000000,
'VDOT_LAMBERT',
'PROJECTED',
4400,
NULL,
4269,
510000001,
NULL,
NULL,
NULL,
NULL,
'FALSE',
NULL,
NULL,
NULL,
6269);
-- To see the result:
select srid, wktext from cs_srs where srid = 51000000;
-- 51000000
-- PROJCS[
-- "VDOT_LAMBERT",
-- GEOGCS [
-- "NAD83",
-- DATUM [
-- "North American Datum 1983 (EPSG ID 6269)",
-- SPHEROID [
-- "GRS 1980 (EPSG ID 7019)",
-- 6378137,
-- 298.257222101]],
-- PRIMEM [ "Greenwich", 0.000000 ],
-- UNIT ["Decimal Degree", 0.01745329251994328]],
-- PROJECTION ["VDOT_Lambert"],
-- PARAMETER ["Latitude_Of_Origin", 36],
-- PARAMETER ["Central_Meridian", -79.50000000000000000000000000000000000028],
-- PARAMETER ["Standard_Parallel_1", 37],
-- PARAMETER ["Standard_Parallel_2", 39.5],
-- PARAMETER ["False_Easting", 0],
-- PARAMETER ["False_Northing", 0],
-- UNIT ["Meter", 1]]例6-10に、ユーザー定義の投影座標参照系の作成例に注釈を付けて拡張した例を示します。
親トピック: ユーザー定義の座標参照系の作成
6.9.3 垂直CRSの作成
垂直CRSには1つの次元(通常、高さ)のみがあります。そのままでは、垂直CRSの有用性は低いですが、2次元のCRS(測地CRSまたは投影CRS)と結合して複合CRSを作り出すことができます。例6-11に、Spatialに含まれているSRID 5701を使用して垂直CRSを作成する文を示します。この定義では、既存の(1次元の)座標系(ID 6499、「SDO_COORD_SYS表」を参照)と垂直データ(ID 5101、「SDO_DATUMS表」を参照)を参照します。
例6-11 垂直座標参照系の作成
INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS)
VALUES (
5701,
'Newlyn',
'VERTICAL',
6499,
5101,
NULL,
NULL,
NULL,
NULL,
NULL,
'EPSG',
'FALSE',
NULL,
NULL,
NULL);
垂直CRSでは、うねりのある等ポテンシャル面がいくつか定義される場合があります。そのような面の形状と、楕円体からのそのオフセットは、垂直CRSレコード自体に実際どおりには定義されません。そのかわり、垂直CRSと別のCRSとの間の操作に定義が指定されます。したがって、同じ組合せのジオイド高とWGS 84楕円体高間にいくつかの代替操作を定義することができます。たとえば、ジオイドのオフセット・マトリックスにはGEOID90、GEOID93、GEOID96、GEOID99、GEOID03、GEOID06などがあり、これらの各変形に対して別々の操作を定義できます。「変換操作の作成」でそのような操作について説明します。
親トピック: ユーザー定義の座標参照系の作成
6.9.4 複合CRSの作成
複合CRSは、既存の水平(2次元の) CRSと垂直(1次元の) CRSを組み合せたものです。水平CRSには、測地CRSまたは投影CRSを使用できます。例6-12に、Spatialに含まれているSRID 7405を使用して複合CRSを作成する文を示します。この定義では、既存の投影CRSおよび垂直CRS(それぞれ、ID 27700および5701。「SDO_COORD_REF_SYS表」を参照)を参照します。
例6-12 複合座標参照系の作成
INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM (
SRID,
COORD_REF_SYS_NAME,
COORD_REF_SYS_KIND,
COORD_SYS_ID,
DATUM_ID,
SOURCE_GEOG_SRID,
PROJECTION_CONV_ID,
CMPD_HORIZ_SRID,
CMPD_VERT_SRID,
INFORMATION_SOURCE,
DATA_SOURCE,
IS_LEGACY,
LEGACY_CODE,
LEGACY_WKTEXT,
LEGACY_CS_BOUNDS)
VALUES (
7405,
'OSGB36 / British National Grid + ODN',
'COMPOUND',
NULL,
NULL,
NULL,
NULL,
27700,
5701,
NULL,
'EPSG',
'FALSE',
NULL,
NULL,
NULL);親トピック: ユーザー定義の座標参照系の作成
6.9.5 地理3D CRSの作成
地理3D CRSは、地理2D CRSと楕円高を結合したものです。
ノート:
3D CRSの作成は、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用のOracle Javaの使用で詳細を参照してください。例6-13に、Spatialに含まれているSRID 4327を使用して地理3D CRSを作成する文を示します。この定義は、既存の投影座標系(ID 6401、「SDO_COORD_SYS表」を参照)およびデータ(ID 6326、「SDO_DATUMS表」を参照)を参照します。
例6-13 地理3D座標参照系の作成
INSERT INTO MDSYS.SDO_COORD_REF_SYSTEM ( SRID, COORD_REF_SYS_NAME, COORD_REF_SYS_KIND, COORD_SYS_ID, DATUM_ID, GEOG_CRS_DATUM_ID, SOURCE_GEOG_SRID, PROJECTION_CONV_ID, CMPD_HORIZ_SRID, CMPD_VERT_SRID, INFORMATION_SOURCE, DATA_SOURCE, IS_LEGACY, LEGACY_CODE, LEGACY_WKTEXT, LEGACY_CS_BOUNDS, IS_VALID, SUPPORTS_SDO_GEOMETRY) VALUES ( 4327, 'WGS 84 (geographic 3D)', 'GEOGRAPHIC3D', 6401, 6326, 6326, NULL, NULL, NULL, NULL, 'NIMA TR8350.2 January 2000 revision. http://164.214.2.59/GandG/tr8350_2.html', 'EPSG', 'FALSE', NULL, NULL, NULL, 'TRUE', 'TRUE');
親トピック: ユーザー定義の座標参照系の作成
6.9.6 変換操作の作成
「投影CRSの作成」で、投影CRSを作成するために投影操作を作成する方法について説明しました。正標高に基づく複合CRSを使用する場合にも、同様の要件が起こる可能性があります。ジオイド高と楕円体高の間で変換した方がよい場合があるためです。2つの高さの間のオフセットは一定ではなく、不規則です。
Spatialは、デフォルトで、ID変換を使用して楕円体高と正標高の間の変換を実行します。(異なる楕円体の間の変換は、デフォルトではID変換ではなくデータ変換で行われます。)ID変換は合理的な近似化の方法です。ただし、この方法より正確な変換方法としてEPSGタイプ9635の操作があり、この操作ではオフセット・マトリックスが使用されます。例6-14は、このような操作を宣言しています。
例6-14 変換操作の作成
INSERT INTO MDSYS.SDO_COORD_OPS ( COORD_OP_ID, COORD_OP_NAME, COORD_OP_TYPE, SOURCE_SRID, TARGET_SRID, COORD_TFM_VERSION, COORD_OP_VARIANT, COORD_OP_METHOD_ID, UOM_ID_SOURCE_OFFSETS, UOM_ID_TARGET_OFFSETS, INFORMATION_SOURCE, DATA_SOURCE, SHOW_OPERATION, IS_LEGACY, LEGACY_CODE, REVERSE_OP, IS_IMPLEMENTED_FORWARD, IS_IMPLEMENTED_REVERSE) VALUES ( 999998, 'Test operation, based on GEOID03 model, using Hawaii grid', 'TRANSFORMATION', NULL, NULL, NULL, NULL, 9635, NULL, NULL, 'NGS', 'NGS', 1, 'FALSE', NULL, 1, 1, 1); INSERT INTO MDSYS.SDO_COORD_OP_PARAM_VALS ( COORD_OP_ID, COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE, PARAM_VALUE_FILE_REF, UOM_ID) VALUES ( 999998, 9635, 8666, NULL, 'g2003h01.asc', NULL);
例6-14の2つ目のINSERT文では、ファイル名g2003h01.ascが指定されていますが、オフセット・マトリックスを使用する実際のCLOBコンテンツはまだ指定されていません。NADCONおよびNTv2のマトリックスの場合と同様に、ジオイド・マトリックスをPARAM_VALUE_FILE列にロードする必要があります。紙面および著作権の関係で、これらのマトリックスのほとんどは、Oracleから提供されませんが、通常、Webからダウンロードできます。該当する政府機関のWebサイトがよい情報源で、ファイル名(この例のg2003h01など)を使用して検索できます。これらのファイルのうち一部は、バイナリ形式(.gsbなど)とASCII形式(.gsaまたは.ascなど)の両方が用意されていますが、Spatialで使用できるのはASCII形式のみです。既存のEPSG操作には、標準で使用されるファイル名が含まれます。
例6-15 オフセット・マトリックスのロード
DECLARE
ORCL_HOME_DIR VARCHAR2(128);
ORCL_WORK_DIR VARCHAR2(128);
Src_loc BFILE;
Dest_loc CLOB;
CURSOR PARAM_FILES IS
SELECT
COORD_OP_ID,
PARAMETER_ID,
PARAM_VALUE_FILE_REF
FROM
MDSYS.SDO_COORD_OP_PARAM_VALS
WHERE
PARAMETER_ID IN (8656, 8657, 8658, 8666);
PARAM_FILE PARAM_FILES%ROWTYPE;
ACTUAL_FILE_NAME VARCHAR2(128);
platform NUMBER;
dest_offset number := 1;
src_offset number := 1;
lang_context number := 0;
warning number;
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY work_dir AS ''define_your_source_directory_here''';
FOR PARAM_FILE IN PARAM_FILES LOOP
CASE UPPER(PARAM_FILE.PARAM_VALUE_FILE_REF)
/* NTv2, fill in your files here */
WHEN 'NTV2_0.GSB' THEN ACTUAL_FILE_NAME := 'ntv20.gsa';
/* GEOID03, fill in your files here */
WHEN 'G2003H01.ASC' THEN ACTUAL_FILE_NAME := 'g2003h01.asc';
ELSE ACTUAL_FILE_NAME := NULL;
END CASE;
IF(NOT (ACTUAL_FILE_NAME IS NULL)) THEN
BEGIN
dbms_output.put_line('Loading file ' || actual_file_name || '...');
Src_loc := BFILENAME('WORK_DIR', ACTUAL_FILE_NAME);
DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY);
END;
UPDATE
MDSYS.SDO_COORD_OP_PARAM_VALS
SET
PARAM_VALUE_FILE = EMPTY_CLOB()
WHERE
COORD_OP_ID = PARAM_FILE.COORD_OP_ID AND
PARAMETER_ID = PARAM_FILE.PARAMETER_ID
RETURNING
PARAM_VALUE_FILE INTO Dest_loc;
DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE);
-- DBMS_LOB.LOADCLOBFROMFILE(Dest_loc, Src_loc, DBMS_LOB.LOBMAXSIZE);
declare
src_offset number := 1 ;
dst_offset number := 1 ;
lang_ctx number := dbms_lob.default_lang_ctx;
warning number;
begin
DBMS_LOB.LOADCLOBFROMFILE(Dest_loc, Src_loc, DBMS_LOB.LOBMAXSIZE,
dst_offset,
src_offset,
dbms_lob.default_csid,
lang_ctx,
warning) ;
if (warning = dbms_lob.warn_inconvertible_char) then
dbms_output.put_line('Warning: Inconvertible character');
end if;
end;
DBMS_LOB.CLOSE(Dest_loc);
DBMS_LOB.CLOSE(Src_loc);
DBMS_LOB.FILECLOSE(Src_loc);
END IF;
END LOOP;
END;
/例6-15は、このような一連のマトリックスをロードするスクリプトです。これは、指定した物理ファイル(ntv20.gsaなど)が、公式なファイル名参照(NTV2_0.GSBなど)に基づいて、データベースCLOBにロードされます。
親トピック: ユーザー定義の座標参照系の作成
6.9.7 British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用
投影座標参照系でBritish Grid Transformation OSTN02/OSGM02 (EPSG method 9633)を使用するには、最初にSDO_COORD_OP_PARAM_VALS表(「SDO_COORD_OP_PARAM_VALS表」を参照)のPARAM_VALUE_FILE列(CLOB型)に変更されたバージョンのOSTN02_OSGM02_GB.txt格子ファイルを挿入する必要があります。OSTN02_OSGM02_GB.txtファイルには、EPSG変換メソッド9633の基になっているオフセット・マトリックスが含まれています。
次のステップを実行します。
例6-16 British Grid Transformation OSTN02/OSGM02 (EPSG Method 9633)の使用
DECLARE
ORCL_HOME_DIR VARCHAR2(128);
ORCL_WORK_DIR VARCHAR2(128);
Src_loc BFILE;
Dest_loc CLOB;
CURSOR PARAM_FILES IS
SELECT
COORD_OP_ID,
PARAMETER_ID,
PARAM_VALUE_FILE_REF
FROM
MDSYS.SDO_COORD_OP_PARAM_VALS
WHERE
PARAMETER_ID IN (8656, 8657, 8658, 8664, 8666)
order by
COORD_OP_ID,
PARAMETER_ID;
PARAM_FILE PARAM_FILES%ROWTYPE;
ACTUAL_FILE_NAME VARCHAR2(128);
platform NUMBER;
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY work_dir AS ''' || system.geor_dir || '''';
FOR PARAM_FILE IN PARAM_FILES LOOP
CASE UPPER(PARAM_FILE.PARAM_VALUE_FILE_REF)
/* NTv2 */
WHEN 'NTV2_0.GSB' THEN ACTUAL_FILE_NAME := 'ntv20.gsa';
/* GEOID03 */
WHEN 'G2003H01.ASC' THEN ACTUAL_FILE_NAME := 'g2003h01.asc';
/* British Ordnance Survey (9633) */
WHEN 'OSTN02_OSGM02_GB.TXT'
THEN ACTUAL_FILE_NAME := 'my_OSTN02_OSGM02_GB.txt';
ELSE ACTUAL_FILE_NAME := NULL;
END CASE;
IF(NOT (ACTUAL_FILE_NAME IS NULL)) THEN
BEGIN
dbms_output.put_line('Loading file ' || actual_file_name || '...');
Src_loc := BFILENAME('WORK_DIR', ACTUAL_FILE_NAME);
DBMS_LOB.OPEN(Src_loc, DBMS_LOB.LOB_READONLY);
END;
UPDATE
MDSYS.SDO_COORD_OP_PARAM_VALS
SET
PARAM_VALUE_FILE = EMPTY_CLOB()
WHERE
COORD_OP_ID = PARAM_FILE.COORD_OP_ID AND
PARAMETER_ID = PARAM_FILE.PARAMETER_ID
RETURNING
PARAM_VALUE_FILE INTO Dest_loc;
DBMS_LOB.OPEN(Dest_loc, DBMS_LOB.LOB_READWRITE);
-- DBMS_LOB.LOADCLOBFROMFILE(Dest_loc, Src_loc, DBMS_LOB.LOBMAXSIZE);
declare
src_offset number := 1 ;
dst_offset number := 1 ;
lang_ctx number := dbms_lob.default_lang_ctx;
warning number;
begin
DBMS_LOB.LOADCLOBFROMFILE(Dest_loc, Src_loc, DBMS_LOB.LOBMAXSIZE,
dst_offset,
src_offset,
dbms_lob.default_csid,
lang_ctx,
warning) ;
if (warning = dbms_lob.warn_inconvertible_char) then
dbms_output.put_line('Warning: Inconvertible character');
end if;
end;
DBMS_LOB.CLOSE(Dest_loc);
DBMS_LOB.CLOSE(Src_loc);
DBMS_LOB.FILECLOSE(Src_loc);
END IF;
END LOOP;
END;
/
親トピック: ユーザー定義の座標参照系の作成