ArcEngine Domain(待补充......)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yh0503/article/details/79820526

基础知识

属性域基础知识
属性域工具箱

ArcEngine操作

常用接口

IDomain、ICodedValueDomain、ICodedValueDomain2、IRangeDomain
Domain类图

创建编码域(coded value domains)

//将Workspace对象转换到IworkspaceDomains接口
IWorkspaceDomains workspaceDomains = (IWorkspaceDomains)workspace;
// 创建编码域
ICodedValueDomain codedValueDomain = new CodedValueDomainClass();
// 添加编码
codedValueDomain.AddCode("RES", "Residential");
codedValueDomain.AddCode("COM", "Commercial");
codedValueDomain.AddCode("IND", "Industrial");
codedValueDomain.AddCode("BLD", "Building");
// 移除编码
codedValueDomain.DeleteCode("BLD"); // The "Building" code is removed.
// 将ICodedValueDomain对象转换到IDomain对象上,设置通用属性
IDomain domain = (IDomain)codedValueDomain;
domain.Name = "Building Types";
domain.FieldType = esriFieldType.esriFieldTypeString;
domain.SplitPolicy = esriSplitPolicyType.esriSPTDuplicate;
domain.MergePolicy = esriMergePolicyType.esriMPTDefaultValue;
// 添加Domain到工作空间中
workspaceDomains.AddDomain(domain);

创建范围域(range domains)

// 将Workspace对象转换到IworkspaceDomains接口
IWorkspaceDomains workspaceDomains = (IWorkspaceDomains)workspace;
// 创建范围域
IRangeDomain rangeDomain = new RangeDomainClass();
rangeDomain.MinValue = 0;//设置最小值
rangeDomain.MaxValue = 255;//设置最大值
//将IRangeDomain对象转换到IDomain对象上,设置通用属性
IDomain domain = (IDomain)rangeDomain;
domain.Name = "EightBitUnsignedInt";//设置Domain名称
domain.FieldType = esriFieldType.esriFieldTypeInteger;//设置Domain的字段类型
domain.SplitPolicy = esriSplitPolicyType.esriSPTDuplicate;//设置Domain的分割策略
domain.MergePolicy = esriMergePolicyType.esriMPTAreaWeighted;//设置Domain的合并策略
//添加Domain到工作空间中
workspaceDomains.AddDomain(domain);

打开值域

IWorkspaceDomains workspaceDomains = (IWorkspaceDomains)workspace;
IDomain requestedDomain = workspaceDomains.get_DomainByName(domainName);

删除值域

IWorkspaceDomains workspaceDomains = (IWorkspaceDomains)workspace;
workspaceDomains.DeleteDomain(domainName);

#

修改值域

//修改Domain的属性
......代码略
//修改完,调用AlterDmoain方法保存修改
IWorkspaceDomains2.AlterDomain(pDomain);

在字段上应用值域

// For example: domainName = "Material".
// fieldName = "CP_MATERIAL".
public void AssignDomainToField(IFeatureClass featureClass, String domainName,String fieldName)
{
    // Cast the feature class to IDataset to get a reference to the workspace.
    IDataset dataset = (IDataset)featureClass;
    // Get the workspace and cast it to the IWorkspaceDomains interface and get the requested domain.
    IWorkspace workspace = dataset.Workspace;
    IWorkspaceDomains workspaceDomains = (IWorkspaceDomains)workspace;
    IDomain domain = workspaceDomains.get_DomainByName(domainName);
    // Get the field to assign the domain to.
    IFields fields = featureClass.Fields;
    int fieldIndex = featureClass.FindField(fieldName);
    IField field = fields.get_Field(fieldIndex);
    // Check that the field and domain have the same field type.
    if (field.Type == domain.FieldType)    
    {
        // Cast the feature class to the ISchemaLock and IClassSchemaEdit interfaces.
        ISchemaLock schemaLock = (ISchemaLock)featureClass;
        IClassSchemaEdit classSchemaEdit = (IClassSchemaEdit)featureClass;
        // Attempt to get an exclusive schema lock.        
        try        
        {
            // Lock the class and alter the domain.
            schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
            classSchemaEdit.AlterDomain(fieldName, domain);
            Console.WriteLine("The domain was successfully assigned.");        
        }
        catch (Exception exc)        
        {
            // Handle the exception in a way appropriate for the application.
            Console.WriteLine(exc.Message);        
        }
        finally
        {
            // Set the schema lock to be a shared lock.
            schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
        }
    }
    else
    {
        Console.WriteLine("The field and the domain have different field types: " + 
            "Field = {0}, Domain = {1}", field.Type, domain.FieldType);    
    }
}

猜你喜欢

转载自blog.csdn.net/yh0503/article/details/79820526