地理数据库表和要素类存储相同类型的对象,即具有相同行为和属性的对象。例如,名为 WaterMains 的要素类可存储加压给水干管。所有给水干管都具有相同的行为,而且具有属性 ReferenceID、Depth、Material、GroundSurfaceType、Size 和 PressureRating。
尽管要素类或表中的所有对象都必须具有相同行为和属性,但并不是所有对象都共享相同的属性域。例如,在供水管网中,可能只有输水干管的压力值可以在 40 和 100 psi 之间,而配水干管的压力值只能在 50 和 75 psi 之间。这种情况下应使用属性域来强制实施此限制。要实现此类验证规则,您不必为输水干管和配水干管创建单独的要素类,而是希望区分这些类型的给水干管与其他干管以建立一组独立的域和默认值。可以使用子类型来实现这一点。
何时使用子类型
当必须对适合使用子类型的位置以及需要附加要素类的位置作出决定时,便引发了重要的地理数据库设计问题。通过默认值、属性域、连通性规则和关系规则区分对象时,建议为单个要素类或表创建单独的子类型。
当根据不同的行为、属性、访问权限或是否进行了多版本化来区分对象时,必须创建多个要素类。
子类型工作流
以下步骤用于为要素类或表创建子类型:
在下面的示例中,将会创建子类型以表示水管配件要素类中的不同配件类型。
第一步是定义用于存储子类型信息的字段:
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")