zoukankan      html  css  js  c++  java
  • ArcGIS Engine属性查询并加亮显示(查询结果在其他窗体中显示)

    查询分为属性查询和空间查询。我现在做的是属性查询,用IQueryFilter

    属性查询的基本步骤是:

    1)获取要查询的图层

    2)获取要素要素图层

    3)获取要素集

    4)用IQueryFilter进行过滤筛选

    Dim pFeatureSelection As IFeatureSelection = CType(pFeatureLayer, IFeatureSelection)
    Dim pQueryFilter As IQueryFilter = New QueryFilterClass()
    pQueryFilter.WhereClause = (TypeComboBox.Text + TextBox1.Text)
    pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, False)

    5)要将筛选出的要素集显示在数据表中,用ICursor和IFeatureCursor对每个要素进行遍历

        在这里谈一下个人对ICursor和IFeatureCursor的理解。ICursor主要是针对所有的类型的行进行的操作,而IFeatureCursor则主要是针对地图的要素进行的操作。ICursor是IFeatureCursor的父类。

    Dim pCursor As ICursor = Nothing
    pSelectionSet.Search(Nothing, True, pCursor) '找所有满足查询过滤器的行,返回一个ICursor。这是Nothing,所有返回了所有行。
    Dim pFeatureCursor As IFeatureCursor = CType(pCursor, IFeatureCursor)
    Dim pFeature As IFeature
    pFeature = pFeatureCursor.NextFeature

    6)将各元素依次赋值给datatable,以datatable为数据源传给datagridview

    If pSelectionSet IsNot Nothing Then
                Dim dt As New DataTable
                Dim dc As DataColumn = Nothing
                For i = 1 To pFeatureLayer.FeatureClass.Fields.FieldCount
                    dc = New DataColumn(pFeatureLayer.FeatureClass.Fields.Field(i - 1).Name)
                    dt.Columns.Add(dc)
                Next
    
                    Dim dr As DataRow
                While (pFeature IsNot Nothing)
                    Dim pGeometry As IGeometry
                    pGeometry = pFeature.Shape
                    Dim obj As Object = Nothing
                    My.Forms.MainForm.AxMapControl1.FlashShape(pGeometry, 3, 400, obj)
                    dr = dt.NewRow
                    Dim j As Integer
                    For j = 0 To pFeature.Fields.FieldCount - 1 Step 1
                        If pFeatureLayer.FeatureClass.FindField(pFeatureLayer.FeatureClass.ShapeFieldName) = j Then
                            dr(j) = pFeatureLayer.FeatureClass.ShapeType.ToString()
                        Else
                            dr(j) = pFeature.Value(j).ToString()
                        End If
                    Next
                    dt.Rows.Add(dr)
                    pFeature = pFeatureCursor.NextFeature()
                End While
                DataGridView1.DataSource = dt
            End If

    顺便说下DataSet和DataTable的区别:

    DataSet是数据集。DataTable是表。DataSet包含多个DataTable,用的时候,dataset["表名"]得到DataTable

    这个终于做完啦。。。。。。

  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/beileierhao/p/2487083.html
Copyright © 2011-2022 走看看