Oracle に格納されたジオデータベースのフィーチャクラス
フィーチャクラスは、すべてが同じジオメトリ タイプ(ポイント、ライン、ポリゴン、マルチポイント、アノテーション、ディメンション、またはマルチパッチ)の地理フィーチャのコレクションです。たとえば、1 つのフィーチャクラスに線路沿いのすべての列車車庫のポイントを格納することができます。別のフィーチャクラスには、すべての鉄道線路を表すラインを格納することできます。
このトピックでは、カタログ ウィンドウ、DBMS(データベース管理システム)、および XML ドキュメントでのフィーチャクラスの表示について説明します。
ArcGIS for Desktop のフィーチャクラス
ArcGIS for Desktop で作成可能なフィーチャクラスには、ポイント、マルチポイント、ライン、ポリゴン、アノテーション、ディメンション、およびマルチパッチの 7 つのタイプがあります。
カタログ ツリーでは、フィーチャクラスのタイプをアイコンに基づいて判断できます。次の表に、フィーチャクラスの各タイプを表すアイコンを示します。
フィーチャクラスのアイコン |
フィーチャクラスのタイプ |
---|---|
ポイントまたはマルチポイント |
|
ライン |
|
ポリゴン |
|
アノテーション |
|
ディメンション |
|
マルチパッチ |
Oracle では、カタログ ツリーに表示されるフィーチャクラスの名前に、フィーチャクラスを所有するユーザの名前とフィーチャクラス自体の名前が含まれます。
たとえば、ユーザ Perrita が所有している parcels フィーチャクラスは、カタログ ツリーに「PERRITA.Parcels」として表示されます。
フィーチャクラスの各タイプについては、「フィーチャクラスの基礎」をご参照ください。
Oracle データベースでのフィーチャクラス テーブル
Oracle データベースのフィーチャクラスでは、ST_Geometry(デフォルト)、バイナリ、または SDO_Geometry の 3 つのジオメトリ格納タイプのいずれかを使用します。
すべてのフィーチャクラスにはベース テーブル(ビジネス テーブル)が作成され、属性情報、ObjectID、および Shape フィールドが格納されます。ObjectID および Shape フィールドには別の名前を付けることができますが、これらのフィールドはフィーチャクラスのベース テーブルに存在している必要があります。
アノテーション フィーチャクラスとディメンション フィーチャクラスのベース テーブルには、追加の必須フィールドがあります。これらのフィールドのリストについては、「アノテーション フィーチャクラス プロパティの管理」と「ディメンション フィーチャのプロパティ」をご参照ください。
Oracle データベースに ST_Geometry タイプで格納されるフィーチャクラス テーブル
ST_Geometry ユーザ定義タイプで格納されるフィーチャクラスは、ベース テーブルと空間インデックスで構成されます。ST_Geometry フィーチャクラスでは、フィーチャクラスのジオメトリを ST_LineString、ST_MultiPoint、ST_Polygon などのサブクラスを使用して ST_Geometry 空間列に格納します。ジオメトリ値は、この空間列に直接格納されます。
ST_Geometry フィーチャクラスにも関連する空間インデックス(S)テーブルがあります。空間インデックス テーブルの命名規則は、フィーチャクラスの空間インデックスの作成時に ST_GEOMETRY_INDEX テーブルに生成される ID に関連しています。たとえば、ST_GEOMETRY_INDEX テーブルの空間インデックスの INDEX_ID の値が 16 である場合、名前は S16_IDX$ になります。
テーブルで空間インデックスを作成すると、ST_GEOMETRY_COLUMNS システム テーブルと ST_GEOMETRY_INDEX システム テーブルにそのテーブルのエントリが作成されます。選択と DML メタデータの操作には、ST_GEOMETRY_COLUMNS 情報スキーマ テーブルが使用されます。ST_GEOMETRY_COLUMNS テーブルに対するエントリの挿入と削除には、ストアド プロシージャが使用されます。
フィーチャクラスが ST_Geometry 格納を使用して作成されると、ST_Geometry 列を持つビジネス テーブルが所有者のスキーマに作成されます。また、フィーチャクラスの情報を追跡するために、sde ユーザのスキーマの LAYERS、TABLE_REGISTRY、GEOMETRY_COLUMNS、COLUMN_REGISTRY、sde_spatial_references(空間参照が定義されている場合)、および GDB_ITEMS テーブルにレコードが追加されます。sde ユーザのスキーマの GDB_ITEMTYPES テーブルは、データ(この場合はフィーチャクラス)のタイプを定義します。
ST_Geometry 列を持つテーブルを作成しても、ST_Geometry メタデータは挿入されません。このメタデータ情報は明示的に(またはアプリケーションで)登録しなければなりません。
Esri では、システム テーブルの手動による操作をサポートしていません。ST_Geometry 空間列を持ち、ArcSDE に登録されている、または ArcSDE によって作成されたテーブルでは、そうしたテーブルのメタデータを手動で変更しないことが重要となります。
View a diagram of a feature class using ST_Geometry storage in Oracle.
このファイルを開くには、Adobe Acrobat Reader が必要です。
破線はテーブル間の暗黙的なリレーションシップを示し、実線は明示的に定義されたリレーションシップを示しています。
Oracle データベースにバイナリ ジオメトリ タイプで格納されるフィーチャクラス テーブル
Oracle のジオデータベースにバイナリ形式(ArcSDE Compressed Binary またはジオメトリの OGC Well-Known Binary 表現)で格納されるフィーチャクラスは、ここで説明するように、ベース テーブル、関連するフィーチャ テーブル、空間インデックス テーブルで構成されます。
-
ベース テーブル
バイナリ スキーマ実装では、ベース テーブルの空間列に空間データを一意に参照するフィーチャ ID が含まれています。フィーチャ ID は、ベース テーブルを 2 つの別のテーブル(フィーチャ テーブルと空間インデックス テーブル)に関連付けます。空間対応のバージョン対応登録されていないベース テーブルには、ベース テーブルとフィーチャ テーブルのレコード間のリレーションシップを維持するために、データベース トリガが定義されます。すべてのバージョン対応登録されていないベース テーブルには、ベース テーブルの空間列が削除された場合にフィーチャ テーブルからもそれを削除するための、CASCADE DELETE トリガがあります。これらのトリガは Oracle Enterprise Manager で確認することができます。これらのトリガは、スタンドアロンのフィーチャクラスまたはフィーチャ データセットのフィーチャクラスがバージョン対応登録されるたびに、自動的に削除されます。フィーチャクラスのバージョン対応登録が解除されると、それらは再作成されます。これらのトリガのいずれかを編集した場合、フィーチャクラスをバージョン対応登録すると、トリガは削除されます。
-
フィーチャ テーブル(F<レイヤID>)
フィーチャ テーブルは、各フィーチャのジオメトリック シェープを格納します。このテーブルは、LAYER_ID テーブルの LAYERS 列の番号によって識別されます。ベース テーブルとフィーチャ テーブル間のリレーションシップは、フィーチャ ID(FID)を通じて管理されます。この ArcSDE によって管理されるキーは、空間列において一意です。
フィーチャ テーブルの定義フィールド名
フィールド タイプ
説明
NULL?
FID
NUMBER(38)
主キー。フィーチャ テーブルをベース テーブルに結合する一意な ID
NOT NULL
NUMOFPTS
NUMBER(38)
フィーチャを定義するポイントの数
NOT NULL
ENTITY
NUMBER(38)
空間列に格納されるジオメトリのタイプ(ポイント、ライン、ストリングなど)
NOT NULL
EMINX
FLOAT(64)
フィーチャの最小 X 値。eminy、emaxx、emaxy とともにフィーチャのエンベロープを定義します。
NOT NULL
EMINY
FLOAT(64)
フィーチャの最小 Y 値。eminx、emaxx、emaxy とともにフィーチャのエンベロープを定義します。
NOT NULL
EMAXX
FLOAT(64)
フィーチャの最大 X 値。eminx、eminy、emaxy とともにフィーチャのエンベロープを定義します。
NOT NULL
EMAXY
FLOAT(64)
フィーチャの最大 Y 値。eminx、eminy、emaxx とともにフィーチャのエンベロープを定義します。
NOT NULL
EMINZ
FLOAT(64)
3D フィーチャの最小 Z 値
EMAXZ
FLOAT(64)
3D フィーチャの最大 Z 値
MIN_MEASURE
FLOAT(64)
フィーチャの最小 M 値
MAX_MEASURE
FLOAT(64)
フィーチャの最大 M 値(Null 値を許可)
AREA
FLOAT(64)
ジオメトリの面積
LEN
FLOAT(64)
ジオメトリの外周の長さ
POINTS
LONG RAW
ジオメトリを定義するポイント座標のバイト ストリーム
フィーチャが挿入または更新されると、extents や numofpts といった列の値は自動的に再計算されます。
ベース テーブルとフィーチャ テーブル間のリレーションシップは、空間列と FID 列を通じて管理されます。この ArcSDE によって管理されるキーは一意です。ベース テーブルとフィーチャ テーブル間で参照整合性を維持することは重要です。フィーチャ テーブルまたは空間インデックス テーブルでレコードを編集しないでください。ベース テーブル、フィーチャ テーブル、空間インデックス テーブルには、参照整合性を維持するためのインデックスと制約が追加されています。ただし、これらのインデックスと制約は、フィーチャクラスが LOAD_ONLY_IO モード(フィーチャクラスへの高速なデータ挿入が有効な状態)に変換されたときに削除されます。
フィーチャクラスが NORMAL_IO モードに戻され、ArcSDE クライアントを通じてフィーチャクラスを検索できる状態になると、インデックスが作成され、制約が有効になります。NORMAL_IO モードへの変換は、ベース テーブルの空間列またはフィーチャ テーブルの FID 列で一意インデックスを構築できなければ失敗します。また、ベース テーブルの空間列に存在する値がフィーチャ テーブルの FID 列に存在しない場合にも失敗します。この場合は、無効なベース テーブルのレコードへの参照が SDE_EXCEPTIONS テーブルに読み込まれます。
フィーチャ テーブルは、ジオメトリ、アノテーション、CAD エレメントを POINTS 列に格納します。POINTS 列は、DBTUNE キーワードの GEOMETRY_STORAGE パラメータの設定に応じて、BLOB または LONG RAW として定義することができます。LONG RAW として定義された列で Compressed Binary 空間データを格納したい場合は、DBTUNE キーワードの GEOMETRY_STORAGE パラメータを SDEBINARY に設定します。BLOB として定義された列で Compressed Binary 空間データを格納したい場合は、SDELOB に設定します。
-
空間インデックス テーブル(S<レイヤID>)
バイナリ実装の空間インデックスは、空間インデックス テーブルです。このテーブルは、シンプルな均一のグリッドに基づいて、シェープへの参照を格納します。このテーブルは、LAYER_ID テーブルの LAYERS 列の番号によって識別されます。
空間インデックスには空間検索をサポートするためのシェープとグリッド セルの組み合わせごとに、エントリが 1 つ含まれます。3 つのグリッド セルにまたがるフィーチャの場合は、テーブルに 3 つのエントリが含まれます。空間検索を実行すると、検索エリアのグリッド セルが特定され、候補ジオメトリのリストを取得するために使用されます。
空間インデックス テーブルの定義
空間インデックス テーブルフィールド名
フィールド タイプ
説明
NULL?
SP_FID
NUMBER(38)
主キー。空間インデックス テーブルをベース テーブルに結合する一意な ID
NOT NULL
GX
NUMBER(38)
空間インデックス グリッドの X 値
NOT NULL
GY
NUMBER(38)
空間インデックス グリッドの Y 値
NOT NULL
EMINX
NUMBER(38)
フィーチャの最小 X 値。eminy、emaxx、emaxy とともにフィーチャのエンベロープを定義します。
NOT NULL
EMINY
NUMBER(38)
フィーチャの最小 Y 値。eminx、emaxx、emaxy とともにフィーチャのエンベロープを定義します。
NOT NULL
EMAXX
NUMBER(38)
フィーチャの最大 X 値。eminx、eminy、emaxy とともにフィーチャのエンベロープを定義します。
NOT NULL
EMAXY
NUMBER(38)
フィーチャの最大 Y 値。eminx、eminy、emaxx とともにフィーチャのエンベロープを定義します。
NOT NULL
空間インデックス テーブルは、ArcSDE フィーチャクラスのすべてのジオメトリのグリッド範囲を定義します。
- sp_fid - フィーチャ テーブルをベース テーブルに結合する一意の ID を含んでいます。
- gx/gy - フィーチャの範囲をグリッド セルで定義します。
- eminx/eminy/emaxx/emaxy - フィーチャの範囲をシステム単位で定義します。
次の例では、WELLS ベース テーブルの FEATURE-ID 列が、フィーチャ テーブルと空間インデックス テーブルのフィーチャを参照しています。
WELL_ID DEPTH ACTIVE FEATURE-ID 1 30029 Yes 101 2 13939 No 102 3 92891 No 103 … … … FID AREA LEN EMINX,EMINY,… POINTS 101 <compressed feature> 102 <compressed feature> 103 <compressed feature> … … SP_FID GX GY {EMINX,EMINY,EMAXX,EMAXY} 101 70 100 102 70 100 103 71 100 … A business/feature/spatial index key reference
バイナリ タイプのフィーチャクラスの空間インデックスは LAYERS テーブルの LAYER_ID 値によって識別されますが、ST_Geometry タイプのフィーチャクラスの空間インデックス テーブルは ST_GEOMETRY_INDEX テーブルに生成された INDEX_ID によって識別されます。
View a diagram of a feature class using binary storage in Oracle.
このファイルを開くには、Adobe Acrobat Reader が必要です。
破線はテーブル間の暗黙的なリレーションシップを示し、実線は明示的に定義されたリレーションシップを示しています。
Oracle データベースに Oracle Spatial ジオメトリ タイプで格納されるフィーチャクラス テーブル
Oracle Spatial は、空間ジオメトリ タイプ(MDSYS.SDO_GEOMETRY)を使用します。これらのフィーチャクラスでもベース テーブルが作成されますが、ベース テーブルにはフィーチャクラスのジオメトリを格納する SDO_Geometry 空間列があります。ジオメトリ値は、この空間列に直接格納されます。
View a diagram of a feature class using SDO_Geometry storage in Oracle..
このファイルを開くには、Adobe Acrobat Reader が必要です。
破線はテーブル間の暗黙的なリレーションシップを示し、実線は明示的に定義されたリレーションシップを示しています。
XML ドキュメントのフィーチャクラス
フィーチャクラスは DataElement エレメント内で定義されます。フィーチャクラスを定義する DataElement タグには、esri:DEFeatureClass のタイプが設定されます。フィーチャクラスの DataElement 内には、Field、Domain、ConfigurationKeyword、SpatialReference elements などのフィーチャクラスを定義する他のエレメントが配置されます。
次に、Parcels フィーチャクラスを定義する XML ドキュメントのコンテンツの一部を示します。
<DataElement xsi:type="esri:DEFeatureClass">
<CatalogPath>/V=SDE.DEFAULT/FC=PERRITA.PARCELS</CatalogPath>
<Name>PERRITA.PARCELS</Name>
<DatasetType>esriDTFeatureClass</DatasetType>
<DSID>21</DSID>
<Versioned>false</Versioned>
<CanVersion>true</CanVersion>
<HasOID>true</HasOID>
<OIDFieldName>OID</OIDFieldName>
<Fields xsi:type="esri:Fields">
<FieldArray xsi:type="esri:ArrayOfField">
<Field xsi:type="esri:Field">
<Name>OID</Name>
<Type>esriFieldTypeInteger</Type>
<IsNullable>false</IsNullable>
<Length>4</Length>
<Precision>10</Precision>
<Scale>0</Scale>
<Required>true</Required>
<Editable>false</Editable>
<AliasName>OBJECTID</AliasName>
<ModelName>OBJECTID</ModelName>
</Field>
フィーチャクラスを定義するその他のすべてのエレメント
</DataElement>