Oracle での ST_Geometry

Esri ST_Geometry 空間データ タイプは、ジオデータベースを含む Oracle データベースと、ジオデータベースを含まない Oracle データベースで使用できます。また、他のタイプのビジネス データと空間データの統合も可能にするため、マルチユーザー データベースで解析およびデータ製品にジオグラフィック コンポーネントを追加する際に効果を発揮します。空間データを他のビジネス オブジェクトと一緒に保持すると、管理しなければならないデータ格納リソースが少なくなるため、データのマルチユーザー アクセス、管理、セキュリティも容易になります。

Esri ST_Geometry 空間データ タイプは、Oracle 内のジオデータベースにおけるデフォルトのジオメトリ格納タイプです。また、[空間タイプの作成 (Create Spatial Type)] ジオプロセシング ツールを使用して、Oracle データベースに ST_Geometry タイプをインストールすることもできます。

注意:

ST_Geometry タイプは Oracle XA トランザクションではサポートされていません。

ジオデータベースを作成し、Oracle データベース管理システムで ST_Geometry タイプとドメイン インデックスを使用するには、タイプ、演算子、ストアド プロシージャをインスタンス化するための適切なシステム権限をジオデータベース管理者ユーザー (sde) に割り当てる必要があります。必要な権限の詳細については、「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 インスタンスと同じサーバー上にインストールする必要があります。Oracle サーバーのオペレーティング システムが ST_Geometry ライブラリでサポートされていることを確認してください。

SQL を使用して ST_Geometry 空間タイプを含むテーブルにアクセスするには、Oracle extproc を構成する必要もあります。

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_Length はジオメトリの長さを返します。
  • 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, sde.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 (sde.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 (sde.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 (sde.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 メタデータを保持するために、次のデータベース オブジェクトが作成されます。

  • 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 の指定

Oracle の新しいジオデータベースのフィーチャクラスでは、ST_Geometry がデフォルトの格納タイプになります。つまり、DBTUNE テーブルにある DEFAULTS コンフィグレーション キーワードの GEOMETRY_STORAGE パラメーターが ST_GEOMETRY に設定されます。

ArcGIS 9.3 より前のバージョンで作成したジオデータベースを更新した後、デフォルトで ST_Geometry 格納タイプを使用して新しいすべてのフィーチャクラスを作成するには、DEFAULTS キーワードで GEOMETRY_STORAGE パラメーターを ST_GEOMETRY に設定する必要があります。手順については、「コンフィグレーション キーワードの変更」をご参照ください。

ジオデータベースの一部のフィーチャクラスに対する ST_Geometry 格納の使用

Oracle のジオデータベースはさまざまなジオメトリ格納タイプをサポートしており、これらの各タイプは同じデータベース内で組み合わせて使用することができます。デフォルトのジオメトリ格納タイプは 1 つだけですが、個々のテーブルを異なるジオメトリ格納タイプで作成することができます。

少数のフィーチャクラスで ST_Geometry 空間タイプ格納を使用する場合、DEFAULTS GEOMETRY_STORAGE を別の格納タイプに設定して、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

キーワードを追加したら、ST_Geometry データ タイプ格納を使用するフィーチャクラスを作成するときに、そのキーワードを使用できます。たとえば、SQL でアクセスする必要のあるデータの小さなサブセットがある場合、フィーチャクラスのそのサブセットだけを作成して、ジオメトリ格納に ST_Geometry 空間データ タイプを使用することができます。

フィーチャクラス用に作成されるデータベース オブジェクト

ArcGIS で、ST_Geometry 格納を使用するフィーチャクラスを作成すると、3 つのデータベース オブジェクトが作成されます。次の表は、これらの格納の制御に使用するオブジェクトとコンフィグレーション パラメーターをまとめたものです。

データベース オブジェクト格納パラメーター

ST_Geometry 列を持つテーブル

B_STORAGE パラメーターがテーブルの格納を定義します。

ST_GEOM_LOB_STORAGE パラメーターはテーブルの LOB セグメントの格納を定義します。

空間インデックス

S_STORAGE パラメーターが空間インデックスの格納を定義します。

ObjectID 列のインデックス

B_INDEX_ROWID パラメーターがこのインデックスの格納を定義します。

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 インデックス表領域名を定義する場合は、各フィーチャクラスを作成する前にこれらの値を変更する必要があります。この操作を行わないと、それ以降のフィーチャクラスの作成に失敗します。これは、各セグメント名が一意でなければならないからです。