ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询

属性

字段的添加、删除和查找

IFeatureLayer GetLayerByName(string name)
{ILayer layer = null;for(int i=0;i<axMapConTrol1.LayerCount;i++){layer = axMapControl1.get_Layer(i);if(layer.Name.Equals(name))return layer as IFeatureLayer;}return null;
}IFeatureLayer featureLayer = GetLayerByName("图层名") as IFeatureLayer;
IFeatureClass featrueClass = featureLayer.Feature;
//添加字段
IFieldEdit fieldEdit = new FieldClass() as IFieldEdit;
fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
fieldEdit.Name_2 = "字段名";
//还可设置字段的其他属性
featureClass.AddField(fieldEdit as IField);
//删除字段
IFields fields = featureClass.Fields;//查找字段
IField field = fields.get_Field(fields.FindField("字段名"));
featureClass.DeleteField(field);

查询

1. 简单条件查询

IFeatureLayer featureLayer = GetLaerByName("图层名称");
IFeatureClass featureLayer = featureLayer.FeatureClass;
//查询条件
IQueryFilter queryFilter = new QueryFilterClass();
//sql语句的Where部分
queryFilter.WhereClause = "FID = 1";
//Search方法第一个参数为查询条件,为null获得所有要素
//为IQueryFilter是属性查询,为ISpatialFilter则是空间查询
//第二个参数为true表示不能更改属性
//返回指示要素的光标
IFeatureCursor cursor = featureClass.Search(queryFilter,true);
IFeature feature = cursor.NextFeature();
//通过while循环遍历所的要素
while(feature != null)
{//....一些操作feature = cursor.NextFeature();
}

2. 选择要素高亮显示

IFeatureLayer featureLayer = GetLayerByname("图层名称");
IFeatureSelection featureSelection = featureLayer as IFeatureSelection;
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = "FID = 1";
//第一个参数同上,第二个参数表示如何将选中的元素添加进元素集,第三个参数表示是否只选一个
//选中元素将自动高亮显示
featureSelection.SelectFeatures(queryFilter,esriSelectionResultEnum.esriSelectionResultAddNew,false);
ISelectionSet selectionSet = featureSelection.SelectionSet;
//通过id遍历选中要素
IEnumIDs ids = selectionSet.IDs;
long id = ids.Next();
if(id != -1)
{//通过id获得要素IFeature feature = featureLayer.FeatureClass.GetFeature(id);//...一些操作id = ids.Next();
}

3. 简单空间查询

//mapcontrol的点击事件 实现用鼠标在地图画出矩形 然后查询图层中与矩形相交的要素
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{//清除选中要素axMapControl1.Map.ClearSelection();IFeatureLayer featureLayer = GetLayerByName("图层名称");IFeatureClass featureClass = featureLayer.FeatureClass();ISpatialFilter spatialFilter = new SpatialFilterClass();//获取在地图上画出的矩形IEnvelop env = axMapControl1.TrackRectangle;//设置查询参数spatialFilter.Geometry = enc as IGeometry;//查询几何体//查询的空间参考类型 此处是相交spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;//第一个参数是ISpatialFilter 是空间查询IFeatureCursor cursor = featureCLass.Search(spatialFilter,true);IFeature feature = cursor.NextFeature();//通过while循环遍历所的要素while(feature != null){//....一些操作feature = cursor.NextFeature();}
}

4. 空间查询高亮

//有两种方式使查询结果高亮,各有各的特点
//其一跟上面介绍的属性查询高亮一样,将SelectFeature方法的第一个参数换为ISpatialFilter即可
//这种方法可以得到查询要素集但比方法二复杂
//其二如下  这种更简单 但得不到选中要素集  根据不同情况使用
//参数一为查询几何体,参数二为查询包络线
axMapControl1.Map.SelectByShape(geometry, null, true);//第三个参数为是否只选中一个
//选中要素高亮显示
axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

历届GIS应用技能大赛开发题答案点这里,尚在不定期更新中

ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询相关推荐

  1. ArcGIS二次开发基础教程(11):网络分析之最短路径分析

    ArcGIS二次开发基础教程(11):网络分析之最短路径分析 最短路径分析 这里直接调用了在mdb中建立好的网络数据集 //全局变量 private INetworkDataset my_networ ...

  2. ArcGIS二次开发基础教程(10):三维分析

    ArcGIS二次开发基础教程(10):三维分析 坡度分析 请务必学会使用帮助文档!!! //DEM数据的坡度分析 将分析结果添加到地图上 //首先获取DEM数据,方法有很多例如从个人地理数据库获取,也 ...

  3. ArcGIS二次开发基础教程(06):有关图层的基本操作

    ArcGIS二次开发基础教程(06):有关图层的基本操作 0. PageLayout和MapControl 的同步 void CopyToPage(){//对象拷贝,把mapcontrol的地图拷贝重 ...

  4. ArcGIS二次开发基础教程(13):网络分析之最近设施分析

    ArcGIS二次开发基础教程(13):网络分析之最近设施分析 最近设施分析 /// <summary>/// Geodatabase function: open work space// ...

  5. ArcGIS二次开发基础教程(09):叠加分析

    ArcGIS二次开发基础教程(09):叠加分析 缓冲区分析的概念及原理请查看帮助文档 http://desktop.arcgis.com/zh-cn/arcmap/latest/tools/analy ...

  6. ArcGIS二次开发基础教程(00):基础界面设计

    ArcGIS二次开发基础教程(00) : 基础界面设计 (开发环境:VS2010+ArcEngine10.2+C# :鉴于学习ArcGIS二次开发的同学都有一定的WinForm开发和ArcGIS软件使 ...

  7. ArcGIS二次开发基础教程(03):保存文档和导出地图

    ArcGIS二次开发基础教程(03):保存文档和导出地图 保存文档 保存: //这里的path为全局变量 在打开文件获添加数据时赋值原路径 //判断打开文件是否为mxd文件 是则保存 不是则另存为 i ...

  8. ArcGIS二次开发基础教程(08):在MapControl上画图(添加元素)

    ArcGIS二次开发基础教程(08):在MapControl上画图(添加元素) 添加临时元素 0. 点元素 //临时画图的元素将不会保存在地图中 //全局变量 IPoint pt; IElement ...

  9. ArcGIS二次开发基础教程:开发环境配置教程(ArcEngine10.4+VS2019)

    开发环境配置教程 由于ArcGIS.ArcEngine以及承载开发环境的Visual Studio的版本众多,其开发环境的配置也有不小的难度,故写此文章写给新入门ArcGIS二次开发的同学,帮助他们摆 ...

最新文章

  1. linux用8m内存读取1g日志,检查 Linux 中内存使用状况的 8 条命令
  2. hdu-1392 Surround the Trees poj Rope (简单凸包)
  3. boost::hana::while_用法的测试程序
  4. 操作系统(二): 进程与线程
  5. android studio 默认继承AppCompatActivity动态设置标题title的方法
  6. android html footer 固定,前端小技巧之footer固定
  7. mysql mysqldump触发器备份_MySQL常用的备份工具之mysqldump
  8. R语言 高阶可视化绘图系统:ggplot2入门 | 第8讲
  9. jquery插件实现分页
  10. 【python量化】统计套利之配对交易策略实现(基于python)
  11. 自动匹配模板 一分钟搞定财务报表
  12. 微信公众号主体注销了,怎么办理账号迁移和公证?
  13. 计算机知识技能大赛总结,计算机知识技能大赛总结
  14. 360校招失败的惨痛经历
  15. JVM——GC算法原理
  16. mysql group 查询的替代_mysql group_concat替代或多行作为列
  17. Android Studio 与工具下载地址(谷歌、百度云、AndroidDevTools均可下载)
  18. linux如何切换任务,linux 0.11中简单的任务切换中遇到的问题
  19. 入选最受关注AI公司的Kitt.AI:多轮对话聊天机器人开发也可以很简单
  20. matlab视网膜血管分割,视网膜血管增强与分割算法研究

热门文章

  1. 持续集成工具之Hudson
  2. 【IoT】硬件设计:天线有哪些种类?
  3. hi mate, lets recall the bloody “JOIN“
  4. viterbi matlab仿真,通信系统中Viterbi译码的Matlab仿真与实现
  5. MySQL中的排序规则
  6. Matlab画三维图的一些技巧
  7. 人物传记——ANDI WHITE:正视自己,才是人生中最值得做的一件事
  8. 向kaggle中添加包
  9. python np array归一化_浅谈利用numpy对矩阵进行归一化处理的方法
  10. swift5 ios的国际化(本地化,全球化,多语言)(最主要博客)