中国地图
GIS探索者
遥感影像纠正
GIS论坛
网站首页| GIS论坛 |新闻动态 | 技术专栏 | GIS书籍 | 资源下载 | 求职招聘 | 研究生考试 | GIS博客 | GIS空间站
欢迎光临GIS空间站!   网站地图
  专栏导航:| ArcGIS | MapInfo | TopMap | 地理信息 | 遥感 | GPS | 测绘 | WebGIS | LBS | 前沿 | 数据库 | 开发 | 行业应用
  推荐栏目:| AO开发 | 业界动态 | GIS资源 | 招聘信息 | 求职简历 | 共享软件 | 电子书籍 | 研究生考题 | 电子期刊 | GIS论文
您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> AO开发 >> 文章正文

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

作者:峰哥    文章来源:新浪博客    点击数:    更新时间:2007-10-6
TopMap活动
有时我们需要读取图层中某个字段的所有值的唯一值集合,或做统计用途,或作为其他功能的输入。

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

''' <summary>
    ''' 通过IDataStatistic接口获取图层指定字段的唯一值
    ''' </summary>
    ''' <param name='pFeatureLayer'>目标图层</param>
    ''' <param name='strField'>目标字段名</param>
    ''' <returns>目标字段的所有值的唯一值集合</returns>
    ''' <remarks></remarks>
    Public Function GetUVByDataStatisticsFunction GetUVByDataStatisticsByVal pFeatureLayer As IFeatureLayer, ByVal strField As String As IListOf String
        Dim uvList As IListOf String = New ListOf String

        Dim pQueryFilter As IQueryFilter = New QueryFilter
        Dim pFeatureCur As IFeatureCursor
        pQueryFilter.SubFields = strField
        pFeatureCur = pFeatureLayer.FeatureClass.SearchpQueryFilter, 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.AddpObj.ToString
        End While
        Return uvList
    End Function

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

 

Public Function GetUVByQueryDefFunction GetUVByQueryDefByVal pFeatureLayer As IFeatureLayer, ByVal strField As String As IListOf String
        Dim uvList As IListOf String = New ListOf 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.Value0
            uvList.AddpObj.ToString
            pRow = pCursor.NextRow
        End While
        Return uvList
    End Function

文章录入:3S_Studio    责任编辑:3S_Studio  发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
■■相 关 图 书:
■■相 关 文 章:
没有相关文章
  • 上一篇文章:

  • 下一篇文章:
  •  
    GIS博客精华
    热点文章
    热门资源
     
    关于我们 | 联系我们 | 广告服务 | 友情链接 | 申请链接 | 合作联盟 | 诚聘英才
      GIS空间站(GISSky.Net)版权所有 站长:兔八哥