Oracle の ST_Geometry 格納
Esri ST_Geometry 空間データ タイプは、ジオデータベースを含む Oracle データベースと、ジオデータベースを含まない Oracle データベースで使用できます。また、他のタイプのビジネス データと空間データの統合も可能にするので、マルチユーザ データベースで解析およびデータ製品にジオグラフィック コンポーネントを追加する際に効果を発揮します。空間データを他のビジネス オブジェクトと一緒に保持すると、管理しなければならないデータ格納リソースが少なくなるので、データのマルチユーザ アクセス、管理、セキュリティも容易になります。
Esri ST_Geometry 空間データ タイプは、Oracle 内のジオデータベースにおけるデフォルトのジオメトリ格納タイプです。また、[空間タイプの作成(Create Spatial Type)] を使用して、Oracle データベースに ST_Geometry タイプをインストールすることもできます。
ST_Geometry タイプは Oracle XA トランザクションではサポートされていません。
ジオデータベースを作成し、Oracle DBMS で ST_Geometry タイプとドメイン インデックスを使用するには、タイプ、演算子、ストアド プロシージャをインスタンス化するための適切なシステム権限をジオデータベース管理者ユーザに割り当てる必要があります。必要な権限の詳細については、「Oracle に格納されたジオデータベースに対するユーザ権限」をご参照ください。Oracle データベースに ST_Geometry タイプをインストールするには、sde ユーザが存在していて、タイプ、演算子、ストアド プロシージャをインスタンス化するための特定の権限が付与されている必要もあります。詳細については、Oracle データベースへの ST_Geometry の追加 をご参照ください。
Oracle または Oracle データベースのジオデータベースで Esri ST_Geometry 空間タイプを使用すると、ISO SQL/MM 空間規格と OGC の Simple Feature Specification を実装している SQL 関数を通じて空間データにアクセスできます。他のタイプのデータと同様に、SQL コマンドを使用して空間フィーチャを格納、取得、操作できます。さまざまな標準ベースの関数と SQL コマンドおよびストアド プロシージャを使用して、空間データを取得および解析できます。SQL でデータにアクセスすることで、Oracle で作成されたデータに他のアプリケーションからアクセスできます。
空間フィーチャに SQL でアクセスするには、ST_Geometry ライブラリを Oracle データベース管理システム(DBMS)と同じサーバ上にインストールする必要があります。Oracle DBMS を ArcSDE サービスとは別のサーバ上で運用する場合は、必ず Oracle サーバのオペレーティング システムが ArcSDE にサポートされており、かつ ST_Geometry ライブラリがインストールされていることを確認してください。
空間タイプを使用する Oracle テーブルに SQL でアクセスするには、Oracle リスナーを設定する必要があります。詳細については、「SQL を使用するための Oracle リスナーの設定」をご参照ください。
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) );
メタデータ スキーマ
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 メタデータを保持するために、次のデータベース オブジェクトが作成されます。
- SDE データベース ユーザ
- SDE ユーザのデフォルトの表領域
- ST_Geometry 関数
- ST_Geometry ビュー
- ALL_ST_GEOMETRY_COLUMNS_V
- USER_ST_GEOMETRY_COLUMNS_V
- USER_ST_GEOM_INDEX_V
- ST_Geometry トリガ
- DB_EV_DROP_ST_METADATA
- DB_EV_ALTER_ST_METADATA
- DB_EV_RENAME_ST_METADATA
- TG_ST_SPATIAL_REF_SRID
- TG_ST_CREF_SYS
- TG_GCOL_NAME
- TG_ST_GEOMINDEX_NAME
- An SPX_UTIL パッケージおよびパッケージ本体
- SDEXMLTOTEXT 演算子
- ST_Geometry タイプ
- BLOB_ARRAY_TAB
- INT_ARRAY_TAB
- FLT_ARRAY_TAB
- BND_ROWID_TAB
- SP_GRID_INFO
SP_Grid_Info は、ST_Geometry_Index テーブルの [GRID] フィールドのデータ タイプとして使用されます。これには、グリッドレベルの空間インデックスの情報が含まれます。
ST_Geometry 格納を使用した Oracle でのフィーチャクラスの作成
ST_Geometry 空間データ タイプがインストールされているデータベースでは、フィーチャクラスを作成するときに、ST_Geometry を格納タイプとして指定します。
ジオデータベースでは、フィーチャクラスに使用するジオメトリ格納タイプは、フィーチャクラスを作成したときに指定したコンフィグレーション キーワード内の GEOMETRY_STORAGE 設定によって決まります。
新規ジオデータベースにおけるフィーチャクラスのデフォルト設定としての ST_Geometry の指定
ArcGIS 9.3 より、Oracle の新しいジオデータベースのフィーチャクラスについては、ST_Geometry がデフォルトの格納タイプになります。つまり、DBTUNE テーブルにある DEFAULTS キーワードの GEOMETRY_STORAGE パラメータが ST_GEOMETRY に設定されます。
ArcGIS 9.3 より以前のバージョンで作成されたジオデータベースにおいて、すべての新規フィーチャクラスの作成にデフォルトで ST_Geometry 格納を使用したい場合は、DBTUNE テーブルで DEFAULTS キーワードの下の GEOMETRY_STORAGE パラメータを変更する必要があります。GEOMETRY_STORAGE パラメータを ST_GEOMETRY に設定します。
DBTUNE 設定の変更には sdedbtune 管理コマンドを使用してください。sdedbtune コマンドの使用の詳細については、「DBTUNE テーブルの内容の変更」と、Oracle 対応の ArcSDE アプリケーション サーバに付属する『ArcSDE コマンド リファレンス』をご参照ください。
ジオデータベースの一部のフィーチャクラスに対する ST_Geometry 格納の使用
Oracle のジオデータベースはさまざまなジオメトリ格納タイプをサポートしており、これらの各タイプはどれも同じデータベース内で組み合わせて使用することができます。デフォルトのジオメトリ格納タイプは 1 つだけですが、個々のテーブルを異なるデータ タイプで作成することができます。
少数のフィーチャクラスで ST_Geometry 空間タイプ格納を使用する場合、DEFAULTS GEOMETRY_STORAGE を別の格納タイプに設定して、ST_Geometry 格納に別のキーワードを作成することができます。たとえば、sdedbtune コマンドを使用して DBTUNE テーブルをテキスト ファイルにエクスポートし、キーワードを次のようなファイルに追加して、そのファイルを DBTUNE テーブルにインポートすることができます。
##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
キーワードを追加したら、ST_Geometry データ タイプ格納を使用するフィーチャクラスを作成するときに、そのキーワードを使用できます。たとえば、SQL でアクセスする必要のあるデータの小さなサブセットがある場合、フィーチャクラスのそのサブセットだけを作成して、ジオメトリ格納に ST_Geometry 空間データ タイプを使用することができます。
ユーザ データ用に作成されるデータベース オブジェクト
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 インデックス表領域名を定義する場合は、各フィーチャクラスを作成する前にこれらの値を変更する必要があります。これを行わない場合、それ以降のフィーチャクラスの作成に失敗します。これは、各セグメント名が一意である必要があるためです。