SQL による空間参照の作成
Esri は、フィーチャクラスの作成時に ArcGIS Desktop ツールを使用して空間参照を作成することを推奨しています。ArcGIS にはこの作業のためのツール セットが用意されており、X、Y、Z、M 単位とオフセットが自動的に計算されて、精度の高いデータを維持できます。しかし、空間参照の作成時にオプションを必要とするユーザやアプリケーション開発者がいることも Esri はよく理解しています。このセクションでは、空間参照の作成用に Esri と IBM が提供しているデータベース ツールを取り上げます。
データベースによって認識される空間参照システムはすべてシステム テーブルに格納され、その一部は編集可能なビューを持ちます。ST_Geometry のジオメトリ ストレージを使用する Oracle の ArcSDE ジオデータベースの場合、これは ST_Spatial_References テーブルです。Informix の場合、このテーブルの名前は Spatial_References です。DB2 の場合は、ST_Spatial_Reference_Systems テーブルと呼ばれます。PostgreSQL の場合、テーブルは sde_spatial_references ですが、sde_spatial_references テーブルのビューである st_spatial_references もあり、このビューには空間参照を挿入することができます。
内部関数は、空間参照系のパラメータを使用してジオメトリの浮動小数点座標をそれぞれ 64 ビットの正の整数に変換/スケーリングしてから格納します。座標値を取得する際には、座標値は元の外部浮動小数点フォーマットに戻されます。
浮動小数点数座標は false x 値と false y 値を減算することによって整数に変換されます。整数をスケーリングするために、XY の単位を掛け、単位の半分の値を足し、余りを切り捨てます。
省略可能な 値である Z 座標とメジャー値も同様に扱われますが、これらの値にはそれぞれ false z 値と false m 値が使用され、Z 単位と M 単位でスケーリングされます。
各データベース管理システムの空間参照テーブルの全列の定義については、それぞれのシステム テーブルのトピックをご参照ください。
空間参照系はジオメトリの作成時にジオメトリに割り当てられます。空間参照系は空間参照テーブルに存在しなければなりません。同一の列のジオメトリの空間参照系はすべて同じでなければなりません。
IBM DB2 における空間参照の作成
DB2 の場合、空間参照を作成するコマンドは db2se create_srs です(または、db2se.ST_create_srs ストアド プロシージャを呼び出します)。以下の例では、スケール ファクタが 10 の空間参照レコードを特定の座標系を使用して作成します。
db2se create_srs mydb -srsName \"mysrs\" -srsID 100 -xScale 10 -coordsysName \"GCS_North_American_1983\"
このコマンドの使用法の詳細については、『DB2 Spatial Extender and Geodetic Extender User's Guide and Reference』の「Creating a spatial reference system」をご参照ください。
IBM Informix における空間参照の作成
Informix ユーザは、この例のような INSERT ステートメントを使用して空間参照レコードを作成できます。
INSERT INTO SDE.SPATIAL_REFERENCES (srid, description, auth_name, auth_srid, falsex, falsey, xyunits, falsez, zunits, falsem, munits, srtext, object_flags, xycluster_tol, zcluster_tol, mcluster_tol) VALUES ( 20, 'GCS_North_American_1983', NULL, NULL, -400, -400, 1000000000, -100000, 100000, -100000, 10000, 'GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]', 1, 0, 0, 0);
Informix で空間参照を作成する方法については、『IBM Informix Spatial DataBlade Module User's Guide』の「Using the spatial references table」をご参照ください。
Oracle における空間参照の作成
Oracle で空間タイプを使用してテーブルの空間参照を作成するには、以下のような INSERT ステートメントを使用します。SRID は一意の値に置き換えてください。以下の例では、SRID はコードの 3 行目の 1 です。
INSERT INTO SDE.ST_SPATIAL_REFERENCES (SR_NAME, SRID, X_OFFSET, Y_OFFSET, XYUNITS, Z_OFFSET, Z_SCALE, M_OFFSET, M_SCALE, MIN_X, MAX_X, MIN_Y, MAX_Y, MIN_Z, MAX_Z, MIN_M, MAX_M, CS_ID, CS_NAME, CS_TYPE, ORGANIZATION, ORG_COORDSYS_ID, DEFINITION, DESCRIPTION) VALUES ( 'GCS_North_American_1983', 1, -400, -400, 1000000000, -100000, 100000, -100000, 100000, 9.999E35, -9.999E35, 9.999E35, -9.999E35, 9.999E35, -9.999E35, 9.999E35, -9.999E35, 4269, 'GCS_North_American_1983', 'PROJECTED', NULL, NULL, 'GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]', 'ArcSDE SpRef');
PostgreSQL における空間参照の作成
PostgreSQL で空間タイプの空間参照系を作成するには、以下のような INSERT ステートメントを使用します。SRID は一意の値に置き換えてください。以下の例では、SRID はコードの 3 行目の 1 です。
INSERT INTO sde.st_spatial_references (sr_name, srid, x_offset, y_offset, xyunits, z_offset, z_scale, m_offset, m_scale, min_x, max_x, min_y, max_y, min_z, max_z, min_m, max_m, cs_id, cs_name, cs_type, organization, org_coordsys_id, definition, description) VALUES ( 'GCS_North_American_1983', 1, -400, -400, 1000000000, -100000, 100000, -100000, 100000, 9.999E35, -9.999E35, 9.999E35, -9.999E35, 9.999E35, -9.999E35, 9.999E35, -9.999E35, 4269, 'GCS_North_American_1983', 'PROJECTED', NULL, NULL, 'GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]', 'ArcSDE SpRef');