获取图层字段的唯一值集合(ArcEngine)

   有时我们需要读取图层中某个字段的所有值的唯一值集合,或做统计用途,或作为其他功能的输入。 

      一般通过IDataStatistics接口来获取唯一值集合,代码如下:

   ' '' <summary>
     ' '' 通过IDataStatistic接口获取图层指定字段的唯一值
     ' '' </summary>
     ' '' <param name="pFeatureLayer">目标图层</param>
     ' '' <param name="strField">目标字段名</param>
     ' '' <returns>目标字段的所有值的唯一值集合</returns>
     ' '' <remarks></remarks>
     Public   Function GetUVByDataStatistics(ByVal pFeatureLayer As IFeatureLayer, ByVal strField As StringAs IList(Of String)
        
Dim uvList As IList(Of String= New List(Of String)

        
Dim pQueryFilter As IQueryFilter = New QueryFilter
        
Dim pFeatureCur As IFeatureCursor
        pQueryFilter.SubFields 
= strField
        pFeatureCur 
= pFeatureLayer.FeatureClass.Search(pQueryFilter, True)

        
Dim pDataStatic As IDataStatistics = New DataStatistics
        pDataStatic.Field 
= strField
        pDataStatic.Cursor 
= pFeatureCur
        
Dim pEnumvar As System.Collections.IEnumerator = pDataStatic.UniqueValues
        pEnumvar.Reset()
        
While pEnumvar.MoveNext
            
Dim pObj As Object = pEnumvar.Current
            uvList.Add(pObj.ToString)
        
End While
        
Return uvList
    
End Function



      但当图层的数据量很大时,以上这种方法执行起来速度较慢,性能影响比较明显,得考虑使用另外一种方法。通过IQueryDef接口使用类似SQL的查询语句来获取图层字段的唯一值集合,执行速度等同于执行SQL查询语句。

  ' '' <summary>
     ' '' 通过IQueryDef接口查询字段的唯一值
     ' '' </summary>
     ' '' <param name="pFeatureLayer">目标图层</param>
     ' '' <param name="strField">目标字段名</param>
     ' '' <returns>目标字段的所有值的唯一值集合</returns>
     ' '' <remarks></remarks>
     Public   Function GetUVByQueryDef(ByVal pFeatureLayer As IFeatureLayer, ByVal strField As StringAs IList(Of String)
        
Dim uvList As IList(Of String= New List(Of String)

        
Dim pQueryDef As IQueryDef
        
Dim pRow As IRow
        
Dim pCursor As ICursor
        
Dim pFeatureWorkspace As IFeatureWorkspace
        
Dim pDataset As IDataset

        pDataset 
= pFeatureLayer.FeatureClass
        pFeatureWorkspace 
= pDataset.Workspace
        pQueryDef 
= pFeatureWorkspace.CreateQueryDef
        
With pQueryDef
            .Tables 
= pDataset.Name ' Fully qualified table name
            .SubFields = "DISTINCT(" & strField & ")"
            pCursor 
= .Evaluate
        
End With

        pRow 
= pCursor.NextRow
        
While Not pRow Is Nothing
            
Dim pObj As Object = pRow.Value(0)
            uvList.Add(pObj.ToString)
            pRow 
= pCursor.NextRow
        
End While
        
Return uvList
    
End Function


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值