SDO_GEOMETRY ジオメトリ格納を使用したフィーチャクラスの作成

SDO_GEOMETRY 格納でフィーチャクラスを作成すると、次の処理が発生します。

フィーチャクラスのビジネス テーブルに SDO_GEOMETRY 列が追加されます。

ArcSDE によって、指定されたビジネス テーブルに Geometry 列が追加され、これによりフィーチャクラスが作成されます。GEOMETRY_STORAGE パラメータが SDO_GEOMETRY に設定されている場合は、ArcSDE によってビジネス テーブルに SDO_GEOMETRY 列が追加されます。

次の例では、ビジネス テーブルに NAME と POPULATION 列が含まれています。ジオメトリ列の追加後には、Borders という名前の SDO_GEOMETRY 列も含まれます。必要に応じて一意なフィーチャ ID 列(次の例ではOBJECTID)が追加され、そのデータが設定されます。

名前

データ タイプ

NULL?

NAME

VARCHAR2(32)*

POPULATION

NUMBER(11)

BORDERS

MDSYS.SDO_GEOMETRY

OBJECTID

NUMBER(38)

いいえ

メモメモ:

* Unicode 文字列を使用する場合は VARCHAR2(32) ではなく NVARCHAR2(32) が使用されます。

Geometry 列は、ArcCatalog、sdelayer 管理ユーティリティ、または ArcSDE の C/Java API を使用して、ビジネス テーブルに追加できます。

SDO_GEOMETRY 列に空間インデックスが作成されます。

SDO_GEOMETRY 列をビジネス テーブルに追加すると、通常、そのジオメトリ列の空間インデックスが作成されます。デフォルトでは、ArcSDE によって SDO_GEOMETRY 列に R ツリー インデックスが作成されます。

あるいは、空間インデックスのないフィーチャクラスを作成することもできます。ただし、空間インデックスが作成されるまで、空間検索はサポートされません。ArcSDE で Oracle の SDO_FILTER 関数を使用するには、空間インデックスが存在している必要があります。

空間インデックスは何種類かの方法で(ArcCatalog、sdelayer 管理ユーティリティ、Oracle Spatial Index Advisor、SQL の使用、または ArcSDEのC/Java API を使用してプログラムから)作成できます。

ArcSDE はフィーチャクラスの LOAD_ONLY_IO モードと NORMAL_IO モードが切り替えられるたびに、ArcSDE によって作成された Oracle Spatial インデックスを自動的に削除して再作成します。Oracle Spatial Index Advisor アプリケーションによって定義された空間インデックス、または SQL を使って作成された空間インデックスは、ArcSDE がフィーチャクラスを LOAD_ONLY_IO モードに切り替えても削除されません。

Oracle Spatial メタデータ ビューにレコードが追加されます。

ArcSDEは ビジネス テーブルに SDO_GEOMETRY 列を追加する際に、USER_SDO_GEOM_METADATA ビューに必要な Oracle Spatial メタデータ レコードも追加します。このメタデータには、テーブルの名前、SDO_GEOMETRY 列の名前、SRID、および座標ディメンション情報が含まれています。

テーブルの作成にサードパーティ アプリケーションまたはSQLが使用された場合、空間列、そのテーブルのメタデータ、およびテーブルは ArcSDE に登録されます。テーブルの登録を解除しても、ArcSDE はメタデータを削除しません。ただし、テーブルが sdetable -o delete コマンドなどで削除される場合は常に、ArcSDE によってメタデータが削除されます。

座標ディメンションが指定されます。

ArcSDE のジオメトリは、2D(X、Y)、2D とメジャー、3D(X、Y、Z)、または 3D とメジャーで作成できます。新しいフィーチャクラスを作成するか、既存のテーブルに SDO_GEOMETRY 列を追加すると、ArcSDE によって、メタデータ ビューの DIMINFO 列に Oracle Spatial ディメンション情報が配置されます。

各 SDO_GEOMETRY 値の SRID が座標参照に基づいて設定されます。

Oracle Spatial は定義済みの座標参照を MDSYS.CS_SRS テーブルで提供します。ArcSDE を使用してフィーチャクラスを新規作成する際、SDO_GEOMETRY 列に特定の SRID を設定するには、適切な Oracle Spatial 座標参照の定義を特定した後、フィーチャクラスの SDO_SRID DBTUNE 格納パラメータをその値に設定します。

たとえば次のようになります。

#MY_SDO_KEYWORD
GEOMETRY_STORAGE SDO_GEOMETRY
SDO_SRID 8307
UI_TEXT "MY_SDO_KEYWORD"
END

SDO_SRID 格納パラメータが設定されていない場合、ArcSDE は対応するメタデータ レコードの各 SDO_GEOMETRY 値と SRID を NULL に設定します。

ArcSDE は Oracle Spatial SRID を必要としません。ArcSDE は Oracle Spatial とは別に、各フィーチャクラスの座標参照情報を SPATIAL_REFERENCES テーブルで管理します。サポートされている座標参照については、『Oracle Spatialユーザーズガイドおよびリファレンス』をご参照ください。

SDO_GEOMETRY 列にデータが設定されます。

データベースにジオメトリを格納する際、ArcSDE は SE_SHAPE という名前の ArcSDE API オブジェクトから SDO_GEOMETRY 値を設定します。SE_SHAPE オブジェクトには、標高、メジャー、CAD データ、アノテーション、サーフェス パッチを含め、シンプル ジオメトリとコンプレックス ジオメトリを追加することができます。SDO_GEOMETRY データ タイプはこれらのジオメトリック プロパティの一部をサポートしています。SDO_GEOMETRY と SE_SHAPE オブジェクトのコンポーネントは 1 対 1 で対応していないため、ArcSDE は ArcSDE データを Oracle Spatial テーブルに格納するときに、一連のルールに従います。

メモメモ:

ArcSDE では SDO_GEOMETRY オブジェクトに種類の異なるジオメトリを追加することはできません。また、ArcSDE は SDO_GEOMETRY オブジェクトに SDO_ETYPE が 0 のエレメントをエンコードしません。SDO_ETYPE が 0 のエレメントは、アプリケーション固有のエレメントです。

CAD およびアノテーション プロパティを格納する場合は、追加の列がビジネス テーブルに追加されます。

SDO_GEOMETRY タイプでは、ArcSDE 格納でサポートしなければならないすべてのタイプのジオメトリック エレメントを格納することができません。これらのエレメントの格納領域が必要な場合(フィーチャクラスの作成時にジオメトリ タイプ フラグから決定されます)、ArcSDE は SE_ANNO_CAD_DATA という名前の列をビジネス テーブルに追加します。このトピックの最初のセクションにあるフィーチャクラスの例の場合、この時点でビジネス テーブルには次の列が含まれます。

名前

データ タイプ

NULL?

NAME

VARCHAR2(32)*

POPULATION

NUMBER(11)

BORDERS

MDSYS.SDO_GEOMETRY

SE_ANNO_CAD_DATA

BLOB

OBJECTID

NUMBER(38)

いいえ

メモメモ:

* Unicode 文字列を使用する場合は VARCHAR2(32) ではなく NVARCHAR2(32) が使用されます。

ArcSDE はデータ ソースに CAD データが含まれていることを検出すると、CAD データのシンプル ジオメトリ表現を SDO_GEOMETRY 値に書き込み、変更していない CAD データを SE_ANNO_CAD_DATA 値に書き込みます。データ ソースに CAD データが含まれていない場合、ArcSDE は SE_ANNO_CAD_DATA 値 をNULL に設定します。SE_ANNO_CAD_DATA プロパティには、さまざまな ArcGIS コンポーネントのデータが含まれます。

Oracle Spatial フィルタ関数を使用してフィーチャクラスで空間検索が実行されます。

ArcSDE は Oracle Spatial の SDO_FILTER 関数を使用して、1 次空間検索を実行します。ArcSDE はアプリケーションが要求する空間リレーションシップに基づいて、SDO_GEOMETRY の 2 次空間検索を実行します。

アプリケーションが ArcSDE に指定する SQL WHERE 句には、Oracle Spatial の 1 次フィルタ関数と 2 次フィルタ関数が含まれていることがあります。アプリケーションは WHERE 句に空間フィルタを使用することで、空間検索をデータベース サーバ、ArcSDE アプリケーション サーバ、およびアプリケーションそのものに分散させることができます。


3/6/2012