1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > ArcGIS二次开发基础教程(04):有关字段的操作和简单属性及空间查询

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

时间:2021-06-06 22:44:13

相关推荐

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

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应用技能大赛开发题答案点这里,尚在不定期更新中

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。