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

来源:互联网 发布:java 写html table 编辑:程序博客网 时间:2024/05/22 01:36

属性查询是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;        }

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

0 0
原创粉丝点击