• 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

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

  • 相关阅读:
    图片显示、PNG透明
    表格边框
    PowerDesigner 16安装注意事项
    web.config中httpRunTime的属性(转)
    禅道程序员的10条原则转载为了不忘
    MS SQL 小时分钟加减 运算 摘
    CASE WHEN THEN 小结
    Java集合框架总结(2)——Set接口的使用
    Java集合框架的知识总结(1)
    Hadoop1.2.0开发笔记(六)
  • 原文地址:https://www.cnblogs.com/beileierhao/p/2487083.html
Copyright © 2020-2023  润新知