SQL Server に格納されたジオデータベースのフィーチャクラス
フィーチャクラスは、すべてが同じジオメトリ タイプ(ポイント、ライン、ポリゴン、マルチポイント、アノテーション、ディメンション、またはマルチパッチ)の地理フィーチャのコレクションです。たとえば、1 つのフィーチャクラスに線路沿いのすべての列車車庫のポイントを格納することができます。別のフィーチャクラスには、すべての鉄道線路を表すラインを格納することできます。
このトピックでは、カタログ ウィンドウ、DBMS(データベース管理システム)、および XML ドキュメントでのフィーチャクラスの表示について説明します。
ArcGIS for Desktop のフィーチャクラス
ArcGIS for Desktop で作成可能なフィーチャクラスには、ポイント、マルチポイント、ライン、ポリゴン、アノテーション、ディメンション、およびマルチパッチの 7 つのタイプがあります。
カタログ ツリーでは、フィーチャクラスのタイプをアイコンに基づいて判断できます。次の表に、フィーチャクラスの各タイプを表すアイコンを示します。
フィーチャクラスのアイコン |
フィーチャクラスのタイプ |
---|---|
ポイントまたはマルチポイント |
|
ライン |
|
ポリゴン |
|
アノテーション |
|
ディメンション |
|
マルチパッチ |
Microsoft SQL Server では、カタログ ツリーに表示されるフィーチャクラスの名前には、フィーチャクラスが格納されているデータベースの名前、フィーチャクラスを所有しているユーザの名前、そしてフィーチャクラスの名前が含まれています。
たとえば、ジオデータベース「geodata」でユーザ「sasha」に所有されているフィーチャクラス「parcels」は、カタログ ツリーでは「geodata.SASHA.PARCELS」と表示されます。
フィーチャクラスの各タイプについては、「フィーチャクラスの基礎」をご参照ください。
Microsoft SQL Server データベースに格納されたフィーチャクラス
SQL Server データベースのフィーチャクラスでは、3 つのジオメトリ格納タイプ、バイナリ、Microsoft Geometry、または Microsoft Geography のいずれかが使用されます。
すべてのフィーチャクラスにはベース テーブル(ビジネス テーブル)が作成され、属性情報、ObjectID、および Shape フィールドが格納されます。ObjectID および Shape フィールドには別の名前を付けることができますが、これらのフィールドはフィーチャクラスのベース テーブルに存在している必要があります。
アノテーション フィーチャクラスとディメンション フィーチャクラスのベース テーブルには、追加の必須フィールドがあります。これらのフィールドのリストについては、「アノテーション フィーチャクラス プロパティの管理」と「ディメンション フィーチャのプロパティ」をご参照ください。
データを読み込むたび、またはジオデータベースを作成するたびに、データベースに複数の i テーブルとストアド プロシージャが定義されます。これらのストアド プロシージャと i テーブルは、フィーチャクラスのフィーチャ ID の生成に使用されます。i テーブルの名前には番号が含まれています。この番号は、SDE_table_registry テーブルのフィーチャクラスの registration_id に相当します。これらのテーブルまたはストアド プロシージャの編集はサポートされていません。
SQL Server データベースで Microsoft Geometry または Geography タイプを使用して格納されるフィーチャクラス
SQL Server データベースに格納されるジオデータベースは、フィーチャの格納に、デフォルトで Microsoft Geometry 格納タイプを使用します。また、Microsoft Geography 格納タイプも使用されます。これらの格納タイプのいずれかを使用するフィーチャクラスにはベース テーブルが用意されています。ベース テーブルには、フィーチャクラス ジオメトリが格納される GEOMETRY または GEOGRAPHY タイプの列が含まれており、関連するフィーチャ テーブルはありません。
ベース テーブルは、属性を格納する DBMS テーブルであり、空間列を追加することにより空間に対応します。ベース テーブルの名前は、フィーチャクラスの名前です。
Geometry または Geography 格納タイプを使用するフィーチャクラス テーブルには、関連するシステム テーブル(GDB_ITEMS、SDE_spatial_references、SDE_table_registry、SDE_column_registry、SDE_geometry_columns、および SDE_layers)と関連するビューもあります。
View a diagram of a feature class using SQL Server geometry or geography storage..
このファイルを開くには、Adobe Acrobat Reader が必要です。
破線はテーブル間の暗黙的なリレーションシップを示し、実線は明示的に定義されたリレーションシップを示しています。
Geometry または Geography フィーチャクラスに使用されるビュー(ST_SPATIAL_REFERENCE_SYSTEMS および ST_GEOMETRY_COLUMNS)は図には表示されません。これらのビューが、すでに図中にある SDE_spatial_references および SDE_geometry_columns のシステム テーブルを基準としているためです。
フィーチャクラスで CAD エンティティの格納が有効になっていると、曲線などの CAD データを格納するための補助テーブルがフィーチャクラスに対して作成されます。ArcGIS for Desktop で作成されるフィーチャクラスは、すべて CAD エンティティを格納するように設定されます。ArcSDE 管理コマンドを使用してデータをインポートする、または ArcSDE に登録する場合、作成したフィーチャクラスに CAD データを格納できるかどうか指定します。フィーチャクラス図には SDE_geometry42 という CAD テーブルも示されています。テーブル名の 42 は、SDE_layers テーブルのフィーチャクラスの layer_id を参照しています。
CAD 補助テーブルに対する結合は、正曲線などの CAD データがフィーチャクラスに追加されるまで有効になりません。有効になると、フィーチャクラスに対するクエリには、CAD データがすでに存在しない場合であっても常に CAD 補助テーブルが含まれるようになります。
SQL Server データベースにバイナリ形式で格納されるフィーチャクラス
SQL Server のジオデータベースにバイナリ形式(ArcSDE Compressed Binary またはジオメトリの OGC Well-Known Binary 表現)で格納されるフィーチャクラスは、ここで説明するベース テーブル、関連するフィーチャ テーブル、空間インデックス テーブルで構成されます。
-
ベース テーブル
ベース テーブルは、属性を格納する DBMS テーブルであり、空間列を追加することにより空間に対応します。ベース テーブルの名前は、フィーチャクラスの名前です。先の図では、ベース テーブルは PARCELS テーブルです。
バイナリ スキーマ実装では、ベース テーブルの空間列(上記の例では PARCELS テーブルの SHAPE フィールド)に空間データを一意に参照するフィーチャ ID が含まれます。フィーチャ ID は、ベース テーブルをフィーチャ テーブルと空間インデックス テーブルに関連付けます。
空間対応のベース テーブルには、ベース テーブルとフィーチャ テーブルのレコード間のリレーションシップを維持するために、データベース トリガが定義されます。
すべてのバージョン非対応のフィーチャクラスのベース テーブルに、DELETE-UPDATE トリガと INSERT トリガが含まれています。INSERT トリガは、ベース テーブルの空間列に重複する値が含まれないようにします。DELETE-UPDATE トリガは、ベース テーブル、フィーチャ テーブル、空間インデックス テーブルの空間列に対する操作を管理します。
これらのトリガは、スタンドアロンのフィーチャクラスまたはフィーチャ データセットのフィーチャクラスがバージョン対応登録されるたびに、自動的に削除されます。フィーチャクラスのバージョン対応登録が解除されると、それらは再作成されます。これらのトリガのいずれを編集した場合も、フィーチャクラスをマルチバージョン対応にすると、トリガは削除されます。
-
フィーチャ テーブル(F<レイヤID>)
フィーチャ テーブルは、各フィーチャのジオメトリック シェープを格納します。このテーブルは、Layer_ID テーブルの SDE_layers 列の番号によって識別されます。ベース テーブルとフィーチャ テーブル間のリレーションシップは、フィーチャ ID(FID)を通じて管理されます。この ArcGIS によって管理されるキーは、空間列において一意です。
フィーチャ テーブルの定義フィールド名
フィールド タイプ
説明
NULL?
fid
int
主キー。フィーチャ テーブルをベース テーブルに結合する一意な ID です。
いいえ
numofpts
int
フィーチャを定義するポイントの数。
いいえ
entity
smallint
空間列に格納されるジオメトリのタイプ(ポイント、ライン、ストリングなど)。
いいえ
eminx
float
フィーチャの最小 X 値。eminy、emaxx、emaxy とともにフィーチャのエンベロープを定義します。
いいえ
eminy
float
フィーチャの最小 Y 値。eminx、emaxx、emaxy とともにフィーチャのエンベロープを定義します。
いいえ
emaxx
float
フィーチャの最大 X 値。eminx、eminy、emaxy とともにフィーチャのエンベロープを定義します。
いいえ
emaxy
float
フィーチャの最大 Y 値。eminx、eminy、emaxx とともにフィーチャのエンベロープを定義します。
いいえ
eminz
float
3D フィーチャの最小 Z 値。
emaxz
float
3D フィーチャの最大 Z 値。
min_measure
float
フィーチャの最小 M 値。
max_measure
float
フィーチャの最大 M 値。
area
float
ジオメトリの面積
いいえ
len
float
ジオメトリの外周の長さ。
いいえ
ポイント
varbinarymax
ジオメトリを定義するポイント座標のバイト ストリーム。
フィーチャが挿入または更新されると、extents や numofpts といった列の値は自動的に再計算されます。
-
空間インデックス テーブル(S<レイヤID>)
バイナリ実装の空間インデックスは、空間インデックス テーブルです。このテーブルは、シンプルな均一のグリッドに基づいて、シェープへの参照を格納します。このテーブルは、Layer_ID テーブルの SDE_layers 列の番号によって識別されます。
空間インデックスには空間検索をサポートするためのシェープとグリッド セルの組み合わせごとに、エントリが 1 つ含まれます。3 つのグリッド セルにまたがるフィーチャの場合は、テーブルに 3 つのエントリが含まれます。空間検索を実行すると、検索エリアのグリッド セルが特定され、候補ジオメトリのリストを取得するために使用されます。
空間インデックス テーブルの定義フィールド名
フィールド タイプ
説明
NULL?
sp_fid
int
主キー。空間インデックス テーブルをベース テーブルに結合する一意な ID です。
いいえ
gx
bigint
空間インデックス グリッドの X 値。
いいえ
gy
bigint
空間インデックス グリッドの Y 値。
いいえ
eminx
bigint
フィーチャの最小 X 値。eminy、emaxx、emaxy とともにフィーチャのエンベロープを定義します。
いいえ
eminy
bigint
フィーチャの最小 Y 値。eminx、emaxx、emaxy とともにフィーチャのエンベロープを定義します。
いいえ
emaxx
bigint
フィーチャの最大 X 値。eminx、eminy、emaxy とともにフィーチャのエンベロープを定義します。
いいえ
emaxy
bigint
フィーチャの最大 Y 値。eminx、eminy、emaxx とともにフィーチャのエンベロープを定義します。
いいえ
すべてのフィーチャクラスのベース テーブルに、DELETE-UPDATE トリガと INSERT トリガが含まれています。INSERT トリガは、ベース テーブルの空間列に重複する値が含まれないようにします。DELETE-UPDATE トリガは、ベース テーブル、フィーチャ テーブル、空間インデックス テーブルの空間列に対する操作を管理します。これらのトリガは、スタンドアロンのフィーチャクラスまたはフィーチャ データセットのフィーチャクラスがバージョン対応登録されるたびに、自動的に削除されます。フィーチャクラスのバージョン対応登録が解除されると、それらは再作成されます。これらのトリガのいずれを編集した場合、フィーチャクラスをバージョン対応登録すると、トリガは削除されます。ベース テーブルとフィーチャ テーブル間で参照整合性を維持することは重要です。フィーチャ テーブルまたは空間インデックス テーブルでレコードを編集しないでください。ベース テーブル、フィーチャ テーブル、空間インデックス テーブルには、参照整合性を維持するためのインデックスと制約が追加されています。ただし、これらのインデックスと制約は、フィーチャクラスが LOAD_ONLY_IO モードに変換され、フィーチャクラスへの高速なデータ挿入が有効な状態になったときに削除されます。
フィーチャクラスが NORMAL_IO モードに戻され、ArcGIS を通じてフィーチャクラスを検索できる状態になると、インデックスが作成され、制約が有効になります。NORMAL_IO モードへの変換は、ベース テーブルの空間列またはフィーチャ テーブルの FID 列で一意インデックスを構築できなければ失敗します。また、ベース テーブルの空間列に存在する値がフィーチャ テーブルの FID 列に存在しない場合にも失敗します。この場合は、無効なベース テーブルのレコードへの参照が SDE_EXCEPTIONS テーブルに読み込まれます。
-
フィーチャクラスに関連するシステム テーブル
GDB_ITEMS システム テーブルは、ジオデータベース内のデータセット(フィーチャクラス、ラスタ カタログなど)を管理するテーブルです。
View a diagram of a feature class using binary storage in SQL Server..
注意:このファイルを開くには、Adobe Acrobat Reader が必要です。
破線はテーブル間の暗黙的なリレーションシップを示し、実線は明示的に定義されたリレーションシップを示しています。
GDB_ITEMS、SDE_table_registry、SDE_column_registry、SDE_layers テーブルのデータベース名フィールドにはすべて同じ値が含まれていますが、図が煩雑にならないように、これらのフィールド間の暗黙的なリレーションシップは示していません。同様に、これらすべてのテーブルの所有者フィールドにも同じ値が含まれていますが、この図ではリレーションシップは示されていません。
XML ドキュメントのフィーチャクラス
フィーチャクラスは DataElement エレメント内で定義されます。フィーチャクラスを定義する DataElement タグには、esri:DEFeatureClass のタイプが設定されます。フィーチャクラスの DataElement 内には、Field、Domain、ConfigurationKeyword、SpatialReference elements などのフィーチャクラスを定義する他のエレメントが配置されます。
次に、Parcels フィーチャクラスを定義する XML ドキュメントのコンテンツの一部を示します。
<DataElement xsi:type="esri:DEFeatureClass">
<CatalogPath>/V=dbo.DEFAULT/FC=geodata.SASHA.Parcels</CatalogPath>
<Name>geodata.SASHA.Parcels</Name>
<DatasetType>esriDTFeatureClass</DatasetType>
<DSID>22</DSID>
<Versioned>false</Versioned>
<CanVersion>true</CanVersion>
<ConfigurationKeyword/>
<HasOID>true</HasOID>
<OIDFieldName>objectid</OIDFieldName>
<Fields xsi:type="esri:Fields">
<FieldArray xsi:type="esri:ArrayOfField">
<Field xsi:type="esri:Field">
<Name>objectid</Name>
<Type>esriFieldTypeOID</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>