Oracle の ST_Geometry 格納
ArcSDE for Oracle は、ジオデータベースへの ISO/OGC 準拠の SQL アクセスを可能にするジオメトリ格納タイプを提供します。このジオメトリ格納は、ジオグラフィック フィーチャを表すオブジェクト(ポイント、ライン、ポリゴン)の格納を提供することで、Oracle データベースの機能を拡張します。このジオメトリ格納は、Oracle データベースのリソースを効率よく使用し、レプリケーションやパーティションといった Oracle データベースの機能との互換性を維持し、空間データへのすばやいアクセスを可能にします。また、他のタイプのビジネス データと空間データの統合も可能にするので、マルチユーザ データベースで解析およびデータ製品にジオグラフィック コンポーネントを追加する際に効果を発揮します。空間データと他のビジネス オブジェクトを統合すると、管理しなければならないデータ格納リソースが少なくなるので、データへのマルチユーザ アクセス、管理、セキュリティも容易になります。
ArcGIS 9.3 以降のバージョンより、新規の ArcSDE for Oracle ジオデータベースはデフォルトでジオメトリ格納に ST_Geometry 空間タイプを使用します。SQL 3 Specification のユーザ定義データ タイプ(UDT)を実装しているので、旧跡の場所、道路、土地区画といった空間データを格納できる列を作成することができます。ST_Geometry 空間タイプの詳細については、このトピックの「ST_Geometry が空間データを格納する方法」セクションをご参照ください。
ArcSDE をインストールし、Oracle DBMS で ST_Geometry タイプとドメイン インデックスを使用するには、タイプ、演算子、ストアド プロシージャをインスタンス化するための適切なシステム権限を ArcSDE 管理者ユーザに割り当てる必要があります。必要な権限の詳細については、「Oracle に格納されたジオデータベースに対するユーザ権限」をご参照ください。
ArcSDE for Oracle ジオデータベースで ST_Geometry 空間タイプを使用すると、ISO SQL/MM 空間規格と OGC の Simple Feature Specification を実装している SQL 関数を通じて空間データにアクセスできます。他のタイプのデータと同様に、SQL コマンドを使用して空間フィーチャを格納、取得、操作できます。さまざまな標準ベースの関数と SQL コマンドおよびストアド プロシージャを使用して、空間データを取得および解析できます。データへの SQL アクセスを通じて、他のアプリケーションから ArcSDE for Oracle ジオデータベースで作成されたデータにアクセスできます。
ST_Geometry タイプは Oracle XA トランザクションではサポートされていません。
空間タイプを使用する Oracle ジオデータベースに SQL でアクセスするには、Oracle リスナーを設定する必要があります。詳細については、「SQL を使用するための Oracle リスナーの設定」をご参照ください。
ArcGIS 9.3 以降のバージョンより、新規の ArcSDE for Oracle ジオデータベースでは、すべての ST 関数および演算子が SDE スキーマ名で修飾される必要があります。たとえば、ST_Union 演算子を使用するクエリを実行する場合、演算子は「sde.ST_Union」と入力する必要があります。ArcSDE 9.2 以前のバージョンからアップグレードしたジオデータベースでは、この処理は不要です。
空間フィーチャに SQL でアクセスするには、ST_Geometry ライブラリを Oracle データベース管理システム(DBMS)と同じサーバ上にインストールする必要があります。Oracle DBMS を ArcSDE とは別のサーバ上で運用する場合は、必ず Oracle サーバのオペレーティング システムが ArcSDE にサポートされており、かつ ST_Geometry ライブラリがインストールされていることを確認してください。
ST_Geometry が空間データを格納する方法
次に、Oracle の ST_Geometry の定義を示します。
名前 |
タイプ |
---|---|
ENTITY |
NUMBER(38) |
NUMPTS |
NUMBER(38) |
MINX |
FLOAT(64) |
MINY |
FLOAT(64) |
MAXX |
FLOAT(64) |
MAXY |
FLOAT(64) |
MINZ |
FLOAT(64) |
MAXZ |
FLOAT(64) |
MINM |
FLOAT(64) |
MAXM |
FLOAT(64) |
AREA |
FLOAT(64) |
LEN |
FLOAT(64) |
SRID |
NUMBER(38) |
POINTS |
BLOB |
空間タイプの属性は、次の情報を表しています。
- Entity: 空間列に格納されるジオメトリック フィーチャのタイプ(ラインストリング、マルチラインストリング、マルチポイント、マルチポリゴン、ポイント、ポリゴン)。この値は st_geom_util ストアド プロシージャから得られるビット マスクです。
- Numpts: ジオメトリを定義するポイントの数(マルチパート ジオメトリの場合は、各パート間のセパレータも含まれます。各セパレータにつき 1 ポイントとなります。)
- Minx、Miny、Maxx、Maxy: ジオメトリの空間エンベロープ。
- Area: ジオメトリの面積。
- Len: ジオメトリの外周の長さ。
- SRID: ST_Spatial_References テーブルで関連する空間参照(座標系)レコードにリンクされるジオメトリの識別子。
- Points: ジオメトリを定義するポイント座標のバイト ストリーム。
他のオブジェクト タイプと同様に、ST_Geometry データ タイプにはコンストラクタ メソッドと関数が含まれます。コンストラクタ メソッドとは、データ タイプの新しいインスタンス(オブジェクト)を返し、その属性値を設定する関数です。
コンストラクタの名前はタイプと同じ(ST_Geometry)です。ST_Geometry タイプのオブジェクトをインスタンス化する際には、コンストラクタ メソッドを呼び出します。たとえば、次のように入力します。
CREATE TABLE hazardous_sites (name varchar2(128), location st_geometry);
次に示す ST_Geometry へのアクセス用の関数は、入力として ST_Geometry を 1 つ受け取り、要求されたプロパティ値を数値として返します。
- ST_Area メンバ関数: ジオメトリの面積を返します。
- ST_Len: ジオメトリの長さを返します。
- ST_Entity: エンティティ タイプを説明するビット マスクが含まれた数値を返します。
- ST_NumPoints: ジオメトリを定義するポイント(頂点)の数を返します。
- ST_MinM、ST_MinX、ST_MinY、ST_MinZ メンバ関数: ジオメトリの座標の最小値を返します。
- ST_MaxM、ST_MaxX、ST_MaxY、ST_MaxZ メンバ関数: ジオメトリの座標の最大値を返します。
- ST_SRID メンバ関数: ジオメトリの空間参照識別子を返します。
- Get_release メンバ関数: 内部で空間タイプの管理(アップグレード、パッチなど)に使用される静的メンバ関数です。
たとえば、次のクエリはアメリカ合衆国の各州の名前と面積を返します。
SELECT name, st_area(geometry) FROM us_states ORDER BY name;
ST_LineString、ST_MultiLineString、ST_MultiPoint、ST_MultiPolygon、ST_Point、および ST_Polygon はどれも ST_Geometry のサブタイプ(サブクラス)です。ST_Geometry とそのサブタイプは、同じ属性と関数を共有します。ST_LineString、ST_MultiLineString、ST_MultiPoint、ST_MultiPolygon、ST_Point、ST_Polygonのコンストラクタの定義は同じです。コンストラクタの名前は、生成するタイプと同じです。
ST_Point は限定されたオブジェクト(単一のポイント値)なので、次のいずれかのメソッドでも作成できます。
これらのメソッドは、座標ポイントと SRID を使用します。
METHOD FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT Argument Name Type In/Out Default? PT_X NUMBER IN PT_Y NUMBER IN SRID NUMBER IN SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 1) );
このメソッドでは、ユーザが座標ポイントと各ポイントの標高値を指定することができます。
METHOD FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT Argument Name Type In/Out Default? PT_X NUMBER IN PT_Y NUMBER IN PT_Z NUMBER IN SRID NUMBER IN SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 1) );
この ST_Point の最後のメソッドでは、作成するポイント オブジェクトの一部としてメジャー値を指定することもできます。
METHOD FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT Argument Name Type In/Out Default? PT_X NUMBER IN PT_Y NUMBER IN PT_Z NUMBER IN MEASURE NUMBER IN SRID NUMBER IN SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 401, 1) );
SP_GRID_INFO
SP_Grid_Info は、ST_Geometry_Index テーブルの [GRID] フィールドのデータ タイプとして使用されます。これには、グリッドレベルの空間インデックスの情報が含まれます。
SQL> desc sp_grid_info Name Null? Type GRID1 NUMBER GRID2 NUMBER GRID3 NUMBER
メタデータ スキーマ
Oracle の ST_Geometry タイプ テーブルとメタデータ テーブルは、SDE スキーマによって所有されます。スキーマ定義は、タイプ列/テーブル、空間インデックス(ST_Spatial_Index ドメイン インデックス)、および空間参照情報を定義するために使用されるメタデータ テーブルのベース テーブルの説明です。タイプ/ドメイン インデックス タイプの定義、パッケージ、メタデータ テーブルはすべて、SDE スキーマで作成されます。
ST_Geometry の定義は SDE ユーザによって所有されているため、ST_Geometry 列が含まれるテーブルがデータベース内にある場合は、絶対にデータベースから SDE ユーザを削除しないでください。削除すると、そのテーブルにアクセスできなくなります。
Oracle のアプリケーション開発者ガイドに記載されているように、ユーザがデータベースから削除される際には、FORCE オプションを使用した DROP TYPE ステートメントが実行されます。このステートメントは対象のユーザが所有するすべてのタイプを削除して、ユーザをデータベースから削除できるようにします。DROP TYPE FORCE では、削除されるタイプに他のタイプやテーブルが関連付けられている場合でも、タイプの削除を認めます。タイプが削除されると、関連付けられているテーブルが無効としてマークされ、テーブル内のデータにアクセスできなくなります。
次の ST_Geometry メタデータ テーブルの詳細については、「Oracle に格納されたジオデータベースのシステム テーブル」をご参照ください。
- ST_COORDINATE_SYSTEMS
- ST_GEOMETRY_COLUMNS
- ST_GEOMETRY_INDEX
- ST_SPATIAL_REFERENCES
ST_Geometry 格納を使用した Oracle でのフィーチャクラスの作成
フィーチャクラス に使用するジオメトリ格納タイプは、フィーチャクラスを作成したときに指定したコンフィグレーション キーワード内の GEOMETRY_STORAGE 設定によって決まります。
新規フィーチャクラスのデフォルト設定としての ST_Geometry の指定
ArcGIS 9.3 より、Oracle のジオデータベースのフィーチャクラスについては、ST_Geometry がデフォルトの格納タイプになります。つまり、DBTUNE テーブルにある DEFAULTS キーワードの GEOMETRY_STORAGE パラメータが ST_GEOMETRY に設定されます。
フィーチャクラス データのほとんどを ST_Geometry 形式で格納する場合は、DEFAULTS キーワードの GEOMETRY_STORAGE パラメータ設定を ST_GEOMETRY のままにします。
ArcGIS 9.3 より以前のバージョンで作成されたジオデータベースにおいて、すべての新規フィーチャクラスの作成にデフォルトで ST_Geometry 格納を使用したい場合は、DBTUNE テーブルで DEFAULTS キーワードの下の GEOMETRY_STORAGE パラメータを変更する必要があります。GEOMETRY_STORAGE パラメータを ST_GEOMETRY に設定します。
DBTUNE 設定の変更には sdedbtune 管理コマンドを使用してください。sdedbtune コマンドの使用の詳細については、「DBTUNE テーブル作成後の内容の変更」と、『ArcSDE コマンド リファレンス』をご参照ください。
一部のフィーチャクラスに対する ST_Geometry 格納の使用
ArcSDE for Oracle はさまざまなジオメトリ格納スキーマをサポートしており、これらの多様なスキーマを同じデータベースで組み合わせて使用することができます。デフォルトのジオメトリ スキーマは 1 つだけですが、個々のテーブルを異なるジオメトリ スキーマで作成することができます。
一部のフィーチャクラスだけを ST_Geometry 格納タイプで格納する場合は、それらのフィーチャクラスを作成するときに DEFAULTS キーワードの GEOMETRY_STORAGE を別の格納タイプに設定したうえで、キーワード ST_GEOMETRY を指定します。これにより、そのフィーチャクラスに ST_Geometry 列が作成されます。dbtune ファイルに ST_GEOMETRY キーワードは次のように表示されます。
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS ( # TABLESPACE <tablespace_name> ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
作成されるデータベース オブジェクトとその格納場所
ArcGIS で、ST_Geometry 格納を使用するフィーチャクラスを作成すると、3 つのデータベース オブジェクトが作成されます。次の表は、これらの格納の制御に使用するオブジェクトと DBTUNE パラメータをまとめたものです。
データベース オブジェクト | 格納パラメータ |
---|---|
ST_Geometry 列を持つテーブル | B_STORAGE パラメータがテーブルの格納を定義します。 ST_GEOM_LOB_STORAGE パラメータはテーブルの LOB セグメントの格納を定義します。 |
空間インデックス | S_STORAGE パラメータが空間インデックスの格納を定義します。 |
ObjectID 列のインデックス | B_INDEX_ROWID パラメータがこのインデックスの格納を定義します。 |
コンフィグレーション パラメータの詳細については、「Oracle DBTUNE コンフィグレーション パラメータ」と Lob 格納に関する次のセクションをご参照ください。
LOB セグメントの格納の設定
この場合 DEFAULTS キーワード リストの ST_GEOM_LOB_STORAGE パラメータを適切に変更することが推奨されます。ただし、DEFAULTS キーワードにこのパラメータを追加するときは、LOB セグメント名をこの定義に含めないでください。それぞれの LOB セグメント名はそのスキーマ内で一意でなければならないため、これを定義に含めると、名前の値を変更しない限り、2 番目のフィーチャの作成に失敗します。次の ST_GEOM_LOB_STORAGE パラメータの例にはセグメント名が含まれていないため、同じスキーマ内での名前の競合が回避されます。
ST_GEOM_LOB_STORAGE " STORE AS ( ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"
ST_GEOM_LOB_STORAGE パラメータの有効な値の例は次のようになります。
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS (TABLESPACE TERRA_NDX ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS (ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
このセクションで前述したように、LOB および LOB インデックス表領域名を定義する場合は、各フィーチャクラスを作成する前にこれらの値を変更する必要があります。これを怠ると、それ以降のフィーチャクラスの作成に失敗します。これは、各セグメント名が一意でなければならないためです。
Oracle LOB セグメントの作成と管理の詳細については、ArcGIS Resource Center で「LOB Segments」を検索し、[Documentation] → [Knowledge Base] の順に選択して、このトピックに関する技術情報をご参照ください。