c#+AE-属性查询之框选查询

属性查询是ArcGIS Engine二次开发中经常用到的基础功能,这里就以框选查询为例,介绍一下矢量图层的属性查询。
整个过程分为两部分,一是获取框选的要素,而是显示框选要素的属性值。
得到框选要素的方法代码如下:

  /// <summary>
        /// 框选数据集
        /// </summary>
        /// <param name="pFeatureLayer">操作图层</param>
        /// <returns></returns>
        private List<IFeature> RecSelectFetures(IFeatureLayer pFeatureLayer)
        {
            List<IFeature> pFeatures = new List<IFeature>();
            if (pFeatureLayer != null)
            {
                IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
                pFeatureSelection.Clear();
                axMapControl1.Refresh();

                IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                IGeometry pGeometry = axMapControl1.TrackRectangle();
                ISpatialFilter pSpatialFilter = new SpatialFilterClass();
                pSpatialFilter.Geometry = pGeometry;
                pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                IFeatureCursor pFeatureCursor = pFeatureLayer.Search(pSpatialFilter, false);
                IFeature pFeature = pFeatureCursor.NextFeature();
                pFeatureSelection.CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew;
                while (pFeature != null)
                {
                    pFeatureSelection.Add(pFeature);
                    pFeatures.Add(pFeature);
                    pFeature = pFeatureCursor.NextFeature();
                }
                axMapControl1.ActiveView.Refresh();
            }
            return pFeatures;
        }

获取并显示框选要素属性值的代码如下:

 /// <summary>
        /// 返回数据源
        /// </summary>
        /// <param name="pFeatureList">框选的数据集</param>
        /// <returns></returns>
        private DataTable AttributeShow(List<IFeature> pFeatureList)
        {
            DataTable pDataTable = new DataTable();
            if (pFeatureList != null)
            {
                if (pFeatureList.Count > 0)
                {
                    for (int i = 0; i < pFeatureList[0].Fields.FieldCount; i++)
                    {
                        DataColumn pDataColumn = new DataColumn();
                        pDataColumn.ColumnName = pFeatureList[0].Fields.get_Field(i).Name;
                        pDataColumn.Caption = pFeatureList[0].Fields.get_Field(i).AliasName;
                        pDataTable.Columns.Add(pDataColumn);
                    }
                    for (int j = 0; j < pFeatureList.Count; j++)
                    {
                        DataRow pDataRow = pDataTable.NewRow();
                        for (int k = 0; k < pDataTable.Columns.Count; k++)
                        { 
                            int index=pFeatureList[j].Fields.FindField(pDataTable.Columns[k].ColumnName);
                            if (index >= 0)
                            {
                                pDataRow[k] = pFeatureList[j].get_Value(index);
                            }   
                        }
                        pDataTable.Rows.Add(pDataRow);
                    }
                }
            }
            return pDataTable;
        }

其实验效果如图:
查询效果

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值