直接上代码:

要素查询 并高亮显示

模糊查询我的根据自己的表设计的,自己用基本语句是

属性表字段 LIKE '*内容*'

*号为 SQL like语句里的% like '%%',在ArcGIS里是*开始用%不出来,其他查询语句都遵循SQL语法

 /// <summary>/// 清除选择/// </summary>/// <param name="mapControl"></param>public static void ClearSelection(IMapControlDefault mapControl){try{IActiveView activeView = (IActiveView)mapControl.Map;//清除数据集前必须先刷新for (int i = 0; i < mapControl.LayerCount; i++){activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, mapControl.get_Layer(i), null);mapControl.Map.ClearSelection();activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, mapControl.get_Layer(i), null);}}catch (System.Exception ex){MessageBoxEX.Show("清除选择失败!" + ex);}}/// <summary>/// 名称查询/// </summary>/// <param name="mapControl"></param>/// <param name="index">图层</param>/// <param name="field">字段</param>/// <param name="value">查询值</param>public static void SelectByName(IMapControlDefault mapControl,string layerName, string field, string value){try{ClearSelection(mapControl);//清除选择string selectName = value.Trim();ILayer layer = getFeatureLayer(mapControl, layerName);//获取对应图层IFeatureLayer featureLayer = layer as IFeatureLayer;IFeatureClass featureClass = featureLayer.FeatureClass;IQueryFilter queryFilter = new QueryFilterClass();//查询对象实例化IFeatureCursor featureCursor;IFeature feature = null;string str = field + " = '" + selectName+"'" ;//创建查询语句queryFilter.WhereClause = str;featureCursor = featureClass.Search(queryFilter, true);//进行查询操作feature = featureCursor.NextFeature();//下一个得到查询要素if (null != feature){mapControl.Map.SelectFeature(layer, feature);//地图高亮显示mapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);//刷新}}catch (System.Exception ex){MessageBoxEX.Show("依据名称查询选中要素失败!"+ex);}}/// <summary>/// 全局模糊查询/// </summary>/// <param name="mapControl">map控件</param>/// <param name="layerName">图层名称</param>/// <param name="value">查询内容</param>public static void SelectByLike(IMapControlDefault mapControl,string layerName , string value){//查询语句//[tf_number] LIKE '**' or [tf_name] LIKE  '**' or  [tf_time] LIKE '**'  查询台风语句 tfPoint//[name] LIKE '**' 查询城市 city//[tf_name] LIKE '**' or [tf_time] LIKE '**' or [tf_text] LIKE '**' 登陆点 tfLoaclPoint//[tf_name] LIKE '**' 台风路径 tfRoad//[china_name] LIKE '**' 省份  provincetry{ClearSelection(mapControl);//清除选择string selectName = value.Trim();string strSQL ="";switch (layerName.Trim()){case "城市"://图层名strSQL = "[name] LIKE '*" + selectName + "*'";break;case "登陆点"://图层名strSQL = "[tf_name] LIKE '*" + selectName + "*' or [tf_time] LIKE '*" + selectName + "*' or [tf_text] LIKE '*" + selectName + "*'";break;case "台风地理数据"://图层名strSQL = "[tf_number] LIKE '*" + selectName + "*' or [tf_name] LIKE  '*" + selectName + "*' or  [tf_time] LIKE '*" + selectName + "*'"; break;case "台风路径"://图层名strSQL = "[tf_name] LIKE '*" + selectName + "*'"; break;case "省份"://图层名strSQL = "[china_name] LIKE '*" + selectName + "*'"; break;}ILayer layer = getFeatureLayer(mapControl, layerName);IFeatureLayer featureLayer = layer as IFeatureLayer;IFeatureClass featureClass = featureLayer.FeatureClass;IQueryFilter queryFilter = new QueryFilterClass();IFeatureCursor featureCursor;IFeature feature = null;queryFilter.WhereClause = strSQL;featureCursor = featureClass.Search(queryFilter, true);feature = featureCursor.NextFeature();while (null != feature){if(layerName.Trim()== "城市" || layerName.Trim() == "省份")mapControl.Map.SelectFeature(featureLayer, feature);//对要素高亮显示elseShowByFilter(mapControl, featureLayer, strSQL);//只显示满足条件的要素mapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);//刷新feature = featureCursor.NextFeature();//移动至下一个要素}}catch{MessageBoxEX.Show("查询失败!");}}/// <summary>/// 名称查询显示所有/// </summary>/// <param name="mapControl"></param>/// <param name="index">图层</param>/// <param name="field">字段</param>/// <param name="value">查询值</param>public static void SelectByNameAll(IMapControlDefault mapControl, string layerName, string field, string value){try{string selectName = value.Trim();ILayer layer = getFeatureLayer(mapControl, layerName);IFeatureLayer featureLayer = layer as IFeatureLayer;IFeatureClass featureClass = featureLayer.FeatureClass;IQueryFilter queryFilter = new QueryFilterClass();IFeatureCursor featureCursor;IFeature feature = null;string str = field + " = '" + selectName + "'";queryFilter.WhereClause = str;featureCursor = featureClass.Search(queryFilter, true);feature = featureCursor.NextFeature();if (null != feature){mapControl.Map.SelectFeature(layer, feature);mapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);}}catch (System.Exception ex){MessageBoxEX.Show("依据名称查询选中要素失败!" + ex);}}

属性表查询及编辑:

 /// <summary>/// 查询指定条件下的属性表信息显示,默认字段去除/// </summary>/// <param name="mapControl">map控件</param>/// <param name="index">图层</param>/// <param name="field">属性值</param>/// <param name="value">条件值</param>/// <returns>DataTable</returns>public static DataTable FeatureTableByName(IMapControlDefault mapControl, string lyerName, string field, string value){DataTable pTable = new DataTable();//建立一个tablestring selectName = value.Trim();//查询条件try{IFeatureLayer featureLayer = getFeatureLayer(mapControl, lyerName);//获取图层IFields pFields = featureLayer.FeatureClass.Fields;//获取要素类字段int log = -1;for (int i = 0; i < pFields.FieldCount; i++) //FieldCount字段集合中的字段数{pTable.Columns.Add(pFields.get_Field(i).AliasName);//datatable添加字段if (pFields.get_Field(i).AliasName.ToString() == "SHAPE"){ log = i; }//记录“Shape”行。}//创建一个新的查询过滤器IFeatureClass featureClass = featureLayer.FeatureClass;IQueryFilter queryFilter = new QueryFilterClass();//查询IFeatureCursor featureCursor;IFeature feature = default(IFeature);string str = field + " = '" + selectName + "'";//查询语句queryFilter.WhereClause = str;featureCursor = featureClass.Search(queryFilter, true);//查询执行feature = featureCursor.NextFeature();//获取查询第一个要素while (feature != null){DataRow newRow = pTable.NewRow();string featapye = feature.Shape.GeometryType.ToString();//获取要素类类型名for (int i = 0; i < pFields.FieldCount; i++){if (log != i){newRow[i] = feature.get_Value(i).ToString();//每行要素赋值给datatable}else{newRow[i] = featapye;//要素类型赋值}}pTable.Rows.Add(newRow);feature = featureCursor.NextFeature();//下一个要素}ShowByFilter(mapControl, featureLayer, str);//只显示满足条件的要素//删除默认字段pTable.Columns.Remove("OBJECTID");//删除objectID列for (int i=0; i < pTable.Columns.Count; i++){string name = pTable.Columns[i].ColumnName;if (name.Contains("SHAPE"))//判断字段是否包含SHAP默认字段pTable.Columns.Remove(name);}}catch (System.Exception ex){MessageBoxEX.Show("查询指定条件下的属性表信息失败!" + ex.Message);}return pTable;}/// <summary>/// 属性表信息全部查询/// </summary>/// <param name="mapControl">mapControl控件</param>/// <param name="index">图层</param>/// <returns>DataTable</returns>public static DataTable FeatureTable(IMapControlDefault mapControl, string lyerName){DataTable pTable = new DataTable();//建立一个tableint log = -1;try{IFeatureLayer featureLayer = getFeatureLayer(mapControl, lyerName);IFields pFields = featureLayer.FeatureClass.Fields;for (int i = 0; i < pFields.FieldCount; i++) //FieldCount字段集合中的字段数{pTable.Columns.Add(pFields.get_Field(i).AliasName);if (pFields.get_Field(i).AliasName.ToString() == "SHAPE"){log = i; }//记录“Shape”行。}//创建一个新的查询过滤器IFeatureClass featureClass = featureLayer.FeatureClass;IQueryFilter queryFilter = new QueryFilterClass();IFeatureCursor featureCursor;IFeature feature = default(IFeature);featureCursor = featureClass.Search(null, false);//全部查询feature = featureCursor.NextFeature();while (feature != null){DataRow newRow = pTable.NewRow();string featapye = feature.Shape.GeometryType.ToString();for (int i = 0; i < pFields.FieldCount; i++){if (log != i){string str = feature.get_Value(i).ToString();newRow[i] = feature.get_Value(i).ToString();}else{newRow[i] = featapye;}}pTable.Rows.Add(newRow);feature = featureCursor.NextFeature();}}catch (System.Exception ex){MessageBoxEX.Show("属性表信息全部查询失败!" + ex.Message);}return pTable;}/// <summary>/// 面要素返回带面积的表/// </summary>/// <param name="mapControl"></param>/// <param name="lyerName"></param>/// <returns></returns>public static DataTable FeatureArea(){DataTable pTable = new DataTable();//建立一个tableint log = -1;double area = 0;try{string appPath = Environment.CurrentDirectory + "\\shp\\Intersect.shp";IFeatureLayer featureLayer = WSpaceAnalysis.GetLayerFromPathShp(appPath);IFields pFields = featureLayer.FeatureClass.Fields;for (int i = 0; i < pFields.FieldCount; i++) //FieldCount字段集合中的字段数{pTable.Columns.Add(pFields.get_Field(i).AliasName);if (pFields.get_Field(i).AliasName.ToString() == "SHAPE"){log = i;}//记录“Shape”行。}//创建一个新的查询过滤器IFeatureClass featureClass = featureLayer.FeatureClass;IQueryFilter queryFilter = new QueryFilterClass();IFeatureCursor featureCursor;IFeature feature = default(IFeature);featureCursor = featureClass.Search(null, false);//全部查询feature = featureCursor.NextFeature();if (feature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)pTable.Columns.Add("AreaAll");//如果是面要素加一个面积字段while (feature != null){DataRow newRow = pTable.NewRow();string featapye = feature.Shape.GeometryType.ToString();for (int i = 0; i < pFields.FieldCount; i++){if (log != i){string str = feature.get_Value(i).ToString();newRow[i] = feature.get_Value(i).ToString();if (feature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon){                    //计算面积    IArea pArea = feature.Shape as IArea;newRow[i + 1] = pArea.Area * 10000;//得到的面积单位是平方米并存入  }}else{newRow[i] = featapye;}}pTable.Rows.Add(newRow);feature = featureCursor.NextFeature();}}catch (System.Exception ex){MessageBoxEX.Show("属性表信息全部查询失败!" + ex.Message);}return pTable;}/// <summary>/// 属性表编辑/// </summary>/// <param name="mapControl"></param>/// <param name="layerName"></param>/// <param name="dataTable"></param>public static void EditFeature(IMapControlDefault mapControl,string layerName, DataTable dataTable){int row =0;//记录第几行IFeatureLayer featureLayer = getFeatureLayer(mapControl, layerName);IFields pFields = featureLayer.FeatureClass.Fields;IFeatureClass pFeatureClass = featureLayer.FeatureClass;IQueryFilter pQueryFilter = new QueryFilterClass();IFeatureCursor pFeatureCursor;IFeature pFeature = default(IFeature);//首先获取Featureclass,利用Featureclass获取IWorkspace和IWorkspaceEdit:IWorkspace workspace = ((IDataset)pFeatureClass).Workspace;IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;//然后开启编辑状态:bool startEdit = workspaceEdit.IsBeingEdited();if (!startEdit){workspaceEdit.StartEditing(false);}workspaceEdit.StartEditOperation();//然后获取IFeatureCursor和IFeature:pFeatureCursor = pFeatureClass.Search(null, false);pFeature = pFeatureCursor.NextFeature();while (pFeature != null){//然后用IFeature.set_Value()方法对Feature进行属性表值的修改:for (int i = 0; i < pFields.FieldCount; i++){string name = dataTable.Columns[i].ColumnName;//获取字段的名称if (name.Contains("SHAPE") || name.Contains("OBJECTID")) //除了默认的字段外才能修改continue;elsepFeature.set_Value(i, dataTable.Rows[row][i]);}//修改完成,要用IFeature.store()方法保存:pFeature.Store();//然后最好将Feature释放掉,再进行接下来的修改:System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeature);pFeature = null;pFeature = pFeatureCursor.NextFeature();row++;}//接下来用IFeatureCursor.Flush():pFeatureCursor.Flush();System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);//最后停止编辑状态:workspaceEdit.StopEditOperation();startEdit = workspaceEdit.IsBeingEdited();if (!startEdit){workspaceEdit.StopEditing(true);}}#region   辅助私有方法/// <summary>/// 显示符合条件的要素/// </summary>/// <param name="sMapCtr"></param>/// <param name="sFlyr"></param>/// <param name="sFilter"></param>private static void ShowByFilter(IMapControlDefault sMapCtr, IFeatureLayer sFlyr, string sFilter){IFeatureLayerDefinition pDef = sFlyr as IFeatureLayerDefinition;pDef.DefinitionExpression = sFilter;sMapCtr.ActiveView.Refresh();}/// <summary>/// 获取指定名称的矢量图层对象/// </summary>/// <param name="layerName">图层名称</param>/// <returns></returns>private static IFeatureLayer getFeatureLayer(IMapControlDefault mapControl, string layerName){ILayer layer;IGeoFeatureLayer featureLayer;for (int i = 0; i < mapControl.LayerCount; i++){layer = mapControl.get_Layer(i);if (layer != null && layer.Name == layerName){featureLayer = layer as IGeoFeatureLayer;return featureLayer;}}return null;}#endregion

C# 基于AE的GIS二次开发 要素查询操作,属性表查询操作及其属性表修改操作相关推荐

  1. C# 基于AE的GIS二次开发实例-----台风信息系统

    设计任务 课程设计的主要任务是利用GIS公共平台提供的二次开发环境开发一套"台风GIS软件",在遵循国家台风编码的基础上,实现台风的运动轨迹可视化,以及台风经过区域的经济损失评估. ...

  2. C# 基于AE的GIS二次开发 空间分析 缓冲区分析(Buffer) 相交(Intersect) 联合(Union)

    调用GP工具实现空间分析的; 需引用命名空间: using ESRI.ArcGIS.AnalysisTools;//添加引用 在Arcgis10.2\DeveloperKit10.2\DotNet\T ...

  3. C# 基于AE的GIS二次开发 基本操作方法

    使用ae前需许可认证:加在Program  main函数里面 //签入AE运行许可if (!RuntimeManager.Bind(ProductCode.Engine)){if (!RuntimeM ...

  4. c# AE GIS二次开发学习专题(二) 基本地图控件使用

    GIS二次开发学习专题(二) 基本地图控件使用 学习资料来自<牟乃夏 AE开发教程-基于C#.NET> 发的代码是我整理+老师布置的作业 这一部分是地图基本控件的使用与编写,包括: 一.二 ...

  5. GIS二次开发(C#+AE)

    GIS二次开发(C#+AE) 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: << ...

  6. [转] GIS二次开发(C#+AE)

    乘风莫邪 原文GIS二次开发(C#+AE) 此过程描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <</FONT>安装目录>/ ...

  7. GIS二次开发学习专题(一)C#入门

    GIS二次开发学习专题(一) 假期时间想整理电脑内存,所以就把代码发到网上了,希望可以供大家参考,学习资料来自<牟乃夏 AE开发教程-基于C#.NET> 发的代码是我整理+老师布置的作业 ...

  8. GIS二次开发:实验五 综合实验

    一.实验目的 1.掌握栅格数据读取与另存: 2.掌握地图制图工具的实现: 3.基于遥感影像的森林资源信息管理与更新系统的实现 二.实验仪器与设备 计算机.visual studio 软件.ArcGIS ...

  9. 基于Python的ArcGIS二次开发实验实习教程

    基于Python的ArcGIS二次开发实验实习教程. ISBN编号: 9787307221772 原价(定价): 39元, 武汉大学出版社 天猫正版链接: https://detail.tmall.c ...

最新文章

  1. 使用getopts处理输入参数
  2. 网上书店例子(JSP和JavaBean)
  3. asp.net core 系列之webapi集成EFCore的简单操作教程
  4. LeetCode MySQL 1241. 每个帖子的评论数
  5. kmeans算法实例及python代码-Python实现k-means算法
  6. 基于ARM嵌入式系统的PC/104总线设计
  7. 酷柚易汛进销存开发进度一览表以及各版本之间区别!
  8. Win7 启动 0xc0000034错误 - 解决
  9. Android获取桌面应用程序
  10. HEVC编码视频格式
  11. 使用tensorboard遇到:Output 0 of UnbindBackward is a view and is being modified inplace.....
  12. HTML5印章绘制电子签章图片,中文英文椭圆章、中文英文椭圆印章 电子签章图片采集
  13. Redis主从复制 AKF
  14. 关于 git rebase 的踩坑记录
  15. CCF推荐会议 | 软件工程:截稿日期纵览(含SAS,ASE等)
  16. 利用Java Swing技术设计一个Email邮箱地址注册的图形用户界面应用程序
  17. atthesametime啥意思_at the same time和on the same time有什么区别吗
  18. EO-88遥测信号接收教程
  19. 服务器神器——tmux
  20. qq 企业邮箱 php群发邮件,PHP使用QQ免费企业邮箱发送邮箱的代码

热门文章

  1. mysql 的alter table操作
  2. 文件夹隐藏精灵 v5.1 bt
  3. ironpython使用numpy_将numpy加载到IronPython中
  4. 树莓派安装raspberry os,两种方式连接树莓派,并设置静态ip开机自动连接WiFi
  5. access里的多步oledb错误_OLEDB 错误
  6. Python爬虫_爬取36kr
  7. Shadow Detection
  8. 【论文笔记】EPro-PnP == Tongji U Alibaba DAMO ==CVPR‘2022 Best Student Paper
  9. Ubuntu Kylin中编译运行cgminer挖矿软件
  10. MFC界面控件BCGControlBar v33.3 - 编辑控件功能升级