Oracle での ST_Geometry
Esri ST_Geometry 空間データ タイプは、ジオデータベースを含む 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 空間規格と Open Geospatial Consortium (OGC) の Simple Feature Specification を実装している SQL 関数を通じて空間データにアクセスできます。 他のタイプのデータと同様に、SQL コマンドを使用して空間フィーチャを格納、取得、操作できます。 さまざまな標準ベースの関数と SQL コマンドおよびストアド プロシージャを使用して、空間データを取得および解析できます。 SQL でデータにアクセスすることで、Oracle で作成されたデータに他のアプリケーションからアクセスできます。
SQL を使用して空間フィーチャにアクセスするには、ST_Geometry ライブラリーを Oracle インスタンスと同じサーバー上にインストールする必要があります。 Oracle サーバーのオペレーティング システムが ST_Geometry ライブラリーで サポート されていることを確認してください。
SQL を使用して ST_Geometry 空間タイプを含むテーブルにアクセスするには、 Oracle extproc を構成 する必要もあります。
ArcGIS Coordinate Systems Data とともにインストールされているグリッド ファイルが必要な変換については、 ST_Geometry SQL 関数リファレンス Oracle で ST_Geometry 空間タイプを含む SQL を使用する方法については、
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 は、ジオメトリーの空間参照 ID を返します。
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
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
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
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 に設定されます。
ジオデータベースの一部のフィーチャクラスに対する 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 列を持つテーブル |
|
|
空間インデックス |
|
|
ObjectID 列のインデックス |
|
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 インデックス表領域名を定義する場合は、各フィーチャクラスを作成する前にこれらの値を変更する必要があります。 この操作を行わないと、それ以降のフィーチャクラスの作成に失敗します。これは、各セグメント名が一意でなければならないからです。