arcgis获取唯一值实践及总结

//在点击“获取唯一属性值”按钮时触发事件,执行本函数
//对图层的某个字段进行唯一值获取操作,并将所有的唯一值显示在listBoxValues控件中
private void buttonGetUniqeValue_Click(object sender, EventArgs e)
{
try
{
/*
//使用FeatureClass对象的IDataset接口来获取dataset和workspace的信息
IDataset dataset = (IDataset)currentFeatureLayer.FeatureClass;
//使用IQueryDef接口的对象来定义和查询属性信息。通过IWorkspace接口的CreateQueryDef()方法创建该对象。
IQueryDef queryDef = ((IFeatureWorkspace)dataset.Workspace).CreateQueryDef();
//设置所需查询的表格名称为dataset的名称
MessageBox.Show(dataset.Name);
queryDef.Tables = dataset.Name;
MessageBox.Show(currentFieldName);
//设置查询的字段名称。可以联合使用SQL语言的关键字,如查询唯一值可以使用DISTINCT关键字。
queryDef.SubFields = “DISTINCT (” + currentFieldName + “)”;
//执行查询并返回ICursor接口的对象来访问整个结果的集合

            ICursor cursor = queryDef.Evaluate();
            //使用IField接口获取当前所需要使用的字段的信息
            IFields fields = currentFeatureLayer.FeatureClass.Fields;
            IField field = fields.get_Field(fields.FindField(currentFieldName));

            //对整个结果集合进行遍历,从而添加所有的唯一值
            //使用IRow接口来操作结果集合。首先定位到第一个查询结果。
            IRow row = cursor.NextRow();
            //如果查询结果非空,则一直进行添加操作
            while (row != null)
            {
                //对String类型的字段,唯一值的前后添加'和',以符合SQL语句的要求
                if (field.Type == esriFieldType.esriFieldTypeString)
                {
                    listBoxValues.Items.Add("\'" + row.get_Value(0).ToString() + "\'");
                }
                else
                {
                    listBoxValues.Items.Add(row.get_Value(0).ToString());
                }
                //继续执行下一个结果的添加
                row = cursor.NextRow();
            }
             * 
             *以上这种方法由于workspace的原因(需要在同一个workspace中),无法成功使用。
            */

            IQueryFilter pQueryfilter = new QueryFilterClass();
            IFeatureCursor pFeatureCursor = null;

            pQueryfilter.SubFields = currentFieldName;
            pFeatureCursor = currentFeatureLayer.FeatureClass.Search(pQueryfilter, true);
            IDataStatistics pDataStati = new DataStatisticsClass();
            pDataStati.Field = currentFieldName;
            pDataStati.Cursor = (ICursor)pFeatureCursor;

            IEnumerator pEnumertaor = pDataStati.UniqueValues;
            pEnumertaor.Reset();
            while (pEnumertaor.MoveNext())
            {
                object obj = pEnumertaor.Current;
                listBoxValues.Items.Add(obj.ToString());
            }

        }
       catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值