『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS Engine 10 开发手册(4-10)子类和域

ArcGIS Engine 10 开发手册(4-10)子类和域

空间数据库(Geodatabase)是一个面向对象的数据库,它将空间实体视为对象加以管理,并为对象的完 整性提供了一些行为,其中阈和子类是很常见的。

     空间数据库(Geodatabase)是一个面向对象的数据库,它将空间实体视为对象加以管理,并为对象的完 整性提供了一些行为,其中阈和子类是很常见的。


     子类和域的概念

     子类提供了一种划分要素的方法,即依据长整型数属性值把要素类划分成多个逻辑组。例如,街道类 中有一个长整型属性字段 CLASS(街道级别),1 代表主要街道,2 代表次要街道。将街道类划分为两个子 类,主要街道和次要街道就是根据要素类中的列的数值而创建。任何值为 1 的要素都归类到次要街道子类, 值为 2 的要素类属于主要街道子类。这样在 ARCMAP 中可以利用符号表示或根据子类对其进行编辑。通过子 与一个域的联结,还可以为整个子类加强数据的完整性。注意:子类列必须是长整数。

 

     域是适用于业务表中字段的规则,它们通过只允许在字段中输入为属性域所指定的值来实施数据 完整性。ArcGIS 中提供了两种类型的域:范围属性域和编码属性域,其中范围属性域仅适用于数值 字段。下面是 ArcGIS Engine 关于域的模型图:

 

 

 

     代码创建域

     域是数据库的一个属性,而不是要素类的,因此要定义一个域是在数据库的层次上进行,下面我 们用代码创建一个编码域

 

void CreateDomain (IWorkspace pWorkspace)

{

  IWorkspaceDomains pWorkspaceDomains = (IWorkspaceDomains) pWorkspace;

  ICodedValueDomain pCodedValueDomain = new CodedValueDomainClass ();

  pCodedValueDomain.AddCode ("RES","Residential");

  pCodedValueDomain.AddCode ("COM","Commercial");

  pCodedValueDomain.AddCode ("IND","Industrial");

 

  IDomain pDomain = (IDomain) pCodedValueDomain;

  pDomain.Name = "Building Types";

 

  pDomain.FieldType = esriFieldType.esriFieldTypeString;

  pDomain.SplitPolicy = esriSplitPolicyType.esriSPTDuplicate;

  pDomain.MergePolicy = esriMergePolicyType.esriMPTDefaultValue;

  pWorkspaceDomains.AddDomain (pDomain);

}

 

public void AssignDomainToFieldWithSubtypes (IFeatureClass pFeatureClass)

{

  IDataset pDataset = (IDataset) pFeatureClass;

  IWorkspace pWorkspace = pDataset.Workspace;

  IWorkspaceDomains pWorkspaceDomains = (IWorkspaceDomains) pWorkspace;

  IDomain pDistributionDiamDomain = pWorkspaceDomains.get_DomainByName ("DistDiam");

 

  ISubtypes pSubtypes = (ISubtypes) pFeatureClass;

 

  pSubtypes.set_Domain (1, "SIZE_ONE",pDistributionDiamDomain);

}

 

public void AddPipeSubtypes (IFeatureClass pFeatureClass)

{

 

  ISubtypes pSubtypes = (ISubtypes) pFeatureClass;

  pSubtypes.SubtypeFieldName = "PipeType";

  pSubtypes.AddSubtype (1, "Primary");

  pSubtypes.AddSubtype (2, "Secondary");

  pSubtypes.DefaultSubtypeCode = 1;

}

      京ICP备08100627号-22 京公网安备 11010802030428号