ジオデータベース テーブルおよびフィーチャクラスには、同タイプのオブジェクト、つまり、振舞いおよび属性が同じオブジェクトが格納されます。たとえば、WaterMains というフィーチャクラスに加圧給水管が格納される場合、すべての給水管の振舞いは同じであり、また、属性として ReferenceID (参照ID)、Depth (深さ)、Material (素材)、GroundSurfaceType (地表面タイプ)、Size (サイズ)、および PressureRating (圧力定格) が共有されます。
フィーチャクラスまたはテーブルのオブジェクトはすべて、同じ振舞いと属性を共有している必要がありますが、すべてのオブジェクトが同じ属性ドメインを共有するわけではありません。たとえば、送水管のみに 40 ~ 100 psi の水圧を設定し、配水管には 50 ~ 75 psi の水圧を設定することができる水道ネットワークなどがこれに該当します。属性ドメインを使用すると、このような範囲制限を設定できます。この種の整合性ルールを実装する場合、送水管と配水管にそれぞれ別々のフィーチャクラスを作成する必要はありませんが、別々のドメインおよびデフォルト値の設定を使用してそれぞれの給水管のタイプを区別する必要があります。このような場合、サブタイプを使用できます。
サブタイプを使用する状況
ジオデータベースの設計において重要な要素は、サブタイプをどこで使用し、フィーチャクラスをどこで追加するかを決定することです。オブジェクトをデフォルト値、属性ドメイン、接続性ルール、リレーションシップ ルールで区別する場合は、1 つのフィーチャクラスまたはテーブルに別々のサブタイプを作成することが推奨されます。
振舞い、属性、またはアクセス権限、あるいはマルチバージョン対応であるかどうかに基づいてオブジェクトを区別する場合は、複数のフィーチャクラスを作成する必要があります。
サブタイプのワークフロー
フィーチャクラスまたはテーブルのサブタイプを作成するには、次の手順に従います。
- サブタイプ フィールドの設定 (Set Subtype Field):サブタイプ コードが格納されるフィールドを入力テーブルまたは入力フィーチャクラスに定義します。
- サブタイプの追加 (Add Subtype):フィーチャクラスまたはテーブルのサブタイプのセットに新しいサブタイプを追加します。
- デフォルト サブタイプの設定 (Set Default Subtype):サブタイプの個別デフォルト値 (コードとも呼ばれる) を設定します。
次に示す例では、水道管用継手フィーチャクラス内で異なる継手タイプを表すためにサブタイプが作成されます。
最初に、サブタイプ情報の格納に使用されるフィールドを定義します。
import arcpy
arcpy.env.workspace = "C:/data/Montgomery.gdb"
arcpy.SetSubtypeField_management("Water/Fittings", "TYPECODE")
サブタイプ フィールドが定義されたら、サブタイプ コードがサブタイプ リストに追加されます。
arcpy.AddSubtype_management ("Water/Fittings","0", "unknown")
arcpy.AddSubtype_management ("Water/Fittings", "1", "bend")
arcpy.AddSubtype_management ("Water/Fittings", "2", "cap")
arcpy.AddSubtype_management ("Water/Fittings", "3", "cross")
arcpy.AddSubtype_management ("Water/Fittings", "4", "coupling")
arcpy.AddSubtype_management ("Water/Fittings", "5", "expansion joint")
arcpy.AddSubtype_management ("Water/Fittings", "6", "offset")
arcpy.AddSubtype_management ("Water/Fittings", "7", "plug")
arcpy.AddSubtype_management ("Water/Fittings", "8", "reducer")
arcpy.AddSubtype_management ("Water/Fittings", "9", "saddle")
arcpy.AddSubtype_management ("Water/Fittings", "10", "sleeve")
arcpy.AddSubtype_management ("Water/Fittings", "11", "tap")
arcpy.AddSubtype_management ("Water/Fittings", "12", "tee")
arcpy.AddSubtype_management ("Water/Fittings", "13", "weld")
arcpy.AddSubtype_management ("Water/Fittings", "14", "riser")
最後に、デフォルトのサブタイプ コードを設定します。
arcpy.SetDefaultSubtype_management ("Water/Fittings", "2")