ArcEngine 查询要素图层某个字段的唯一值

ArcGIS按属性查询中有列出字段唯一值的功能,在教学案例中给出了一段实现代码,

//使用FeatureClass对象的IDataset接口来获取dataset和workspace的信息
IDataset dataset = (IDataset)currentFeatureLayer.FeatureClass;
//使用IQueryDef接口的对象来定义和查询属性信息。通过IWorkspace接口的CreateQueryDef()方法创建该对象。
IQueryDef queryDef = ((IFeatureWorkspace)dataset.Workspace).CreateQueryDef();
//设置所需查询的表格名称为dataset的名称
queryDef.Tables = dataset.Name;
//设置查询的字段名称。可以联合使用SQL语言的关键字,如查询唯一值可以使用DISTINCT关键字。
queryDef.SubFields = 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();
}

作为Engine的初学者觉得有点看不懂,怎么办。。。用之前学的基础知识写一段看的懂的。。。

//获取要素图层的源
IFeatureClass feclass = currentFeatureLayer.FeatureClass;
//根据源数据创建游标
IFeatureCursor cusro = feclass.Search(null, true);
IFeature fea = cusro.NextFeature();
//获取源数据的所有字段
IFields fields = currentFeatureLayer.FeatureClass.Fields;
//获取所选字段的Index
int index = fields.FindField(currentFieldName);

while (fea != null)
{
    
    
    string str;
    str = fea.get_Value(index).ToString();
    //如果值列表中还没有str这个值
    if (!listBoxValues.Items.Contains("\'" + str + "\'"))
    {
    
    
        //将str加入到值列表,并且str前后加上单引号
        listBoxValues.Items.Add("\'" + str + "\'");
    }
    fea = cusro.NextFeature();
}

其实之后再看了两遍教学代码还是能看的懂得,不过找替代方法不失为一种复习知识点的办法。


今天继续测试的时候发现这两段代码不是等效的,第一段代码只能对.gdb数据库中的要素类进行查询而不能直接查询shp文件,第二段代码是可以查询数据库中的要素类也可以查询单独的shp文件。尝试修改第一段代码,奈何初学者水平有限没有成功,以后有想法修改成功再贴上来。

猜你喜欢

转载自blog.csdn.net/baidu_28157641/article/details/105259170