ArcEngine子类型字段的操作

先来了解一下什么是ArcGIS中的子类型字段。新建一个要素类,名称为道路,其字段如下图所示:其中Type为长整型字段,用以标识道路的类别。
在这里插入图片描述
现在我们选择该要素类,单击右键,弹出界面后选择子类型选项卡,如下图所示:子类型字段选择Type,然后添加国道省道县道乡道这四个字类型,点击确定即可。
在这里插入图片描述
下面开始编辑该要素类,可以发现图层列表和编辑框内已经将该要素类分为四类,如下图所示:
在这里插入图片描述
在这里插入图片描述
其实在设置好子类型字段后,你也可以给子类型字段设置属性域,可参考如下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.SystemUI;

namespace WindowsFormsApplication1
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void btnAddSubtypes_Click(object sender, EventArgs e)
        {
            IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(@"E:\Users\dsf\Desktop\data.gdb", 0);
            IWorkspaceDomains pWorkspaceDomains = pWorkspace as IWorkspaceDomains;
            IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;

            // 编码属性域
            ICodedValueDomain pCodedValueDomain = new CodedValueDomain() as ICodedValueDomain;
            pCodedValueDomain.AddCode("01", "1001");
            pCodedValueDomain.AddCode("02", "1002");
            pCodedValueDomain.AddCode("03", "1003");
            pCodedValueDomain.AddCode("04", "1004");

            // 添加属性域
            IDomain pDomain = pCodedValueDomain as IDomain;
            pDomain.Name = "道路代码";
            pDomain.Description = "该属性域用于约束道路代码";
            pDomain.FieldType = esriFieldType.esriFieldTypeString;
            pDomain.MergePolicy = esriMergePolicyType.esriMPTDefaultValue;
            pDomain.SplitPolicy = esriSplitPolicyType.esriSPTDefaultValue;
            pWorkspaceDomains.AddDomain(pDomain);

            // 创建字段子类型
            IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass("道路");
            ISubtypes pSubtypes = pFeatureClass as ISubtypes;
            pSubtypes.SubtypeFieldName = "Type";
            pSubtypes.AddSubtype(1, "国道");
            pSubtypes.AddSubtype(2, "省道");
            pSubtypes.AddSubtype(3, "县道");
            pSubtypes.AddSubtype(4, "乡道");
            pSubtypes.DefaultSubtypeCode = 1;

            // 子类型设置属性域
            pSubtypes.set_Domain(1, "Code", pWorkspaceDomains.get_DomainByName("道路代码"));
            pSubtypes.set_Domain(2, "Code", pWorkspaceDomains.get_DomainByName("道路代码"));
            pSubtypes.set_Domain(3, "Code", pWorkspaceDomains.get_DomainByName("道路代码"));
            pSubtypes.set_Domain(4, "Code", pWorkspaceDomains.get_DomainByName("道路代码"));
        }
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值