地理数据库表和要素类存储相同类型的对象 - 即具有相同行为和属性的对象。 例如,一个名为 WaterMains 的要素类可能存储加压供水主管线。 所有供水主管线都具有相同的行为,并具有 ReferenceID、Depth、Material、GroundSurfaceType、Size 和 PressureRating 这些属性。
尽管要素类或表中的所有对象都必须具有相同的行为和属性,但并非所有对象都共享相同的属性域。 例如,在供水网络中,可能只有输水主管线的压力在 40 到 100 psi 之间,而配水主管线的压力在 50 到 75 psi 之间。 您将使用属性域来强制执行此限制。 要实施这种验证规则,您不必为输水和配水主管线创建单独的要素类,但您需要区分这些类型的供水主管线,以便建立一组单独的域和默认值。 您可以使用子类型来实现这一点。
何时使用子类型
当您必须决定在何处适合使用子类型以及在何处需要额外的要素类时,会出现一个重要的地理数据库设计问题。 当您根据对象的默认值、属性域、连通性规则和关系规则来区分对象时,建议您为单个要素类或表创建单独的子类型。
当您基于不同的行为、属性或访问权限,或者对象是否为多版本来区分对象时,您必须创建多个要素类。
子类型工作流
以下步骤用于为要素类或表创建子类型:
在以下示例中,创建子类型以表示供水管件要素类中的不同管件类型。
第一步是定义用于存储子类型信息的字段:
import arcpy
arcpy.env.workspace = "C:/data/Montgomery.gdb"
arcpy.management.SetSubtypeField("Water/Fittings", "TYPECODE")
定义子类型字段后,将子类型代码添加到子类型列表中:
arcpy.management.AddSubtype("Water/Fittings", "0", "unknown")
arcpy.management.AddSubtype("Water/Fittings", "1", "bend")
arcpy.management.AddSubtype("Water/Fittings", "2", "cap")
arcpy.management.AddSubtype("Water/Fittings", "3", "cross")
arcpy.management.AddSubtype("Water/Fittings", "4", "coupling")
arcpy.management.AddSubtype("Water/Fittings", "5", "expansion joint")
arcpy.management.AddSubtype("Water/Fittings", "6", "offset")
arcpy.management.AddSubtype("Water/Fittings", "7", "plug")
arcpy.management.AddSubtype("Water/Fittings", "8", "reducer")
arcpy.management.AddSubtype("Water/Fittings", "9", "saddle")
arcpy.management.AddSubtype("Water/Fittings", "10", "sleeve")
arcpy.management.AddSubtype("Water/Fittings", "11", "tap")
arcpy.management.AddSubtype("Water/Fittings", "12", "tee")
arcpy.management.AddSubtype("Water/Fittings", "13", "weld")
arcpy.management.AddSubtype("Water/Fittings", "14", "riser")
最后一步是设置默认子类型代码:
arcpy.management.SetDefaultSubtype("Water/Fittings", "2")