ArcGIS二次开发基础教程(04):属性查询与空间查询
程序员文章站
2022-06-12 16:52:22
...
ArcGIS二次开发基础教程(04):属性查询与空间查询
属性查询
-
简单条件查询
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(); }
-
查询要素高亮显示
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(); }
空间查询
-
简单空间查询
//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(); } }
-
空间查询高亮
//有两种方式使查询结果高亮,各有各的特点 //其一跟上面介绍的属性查询高亮一样,将SelectFeature方法的第一个参数换为ISpatialFilter即可 //这种方法可以得到查询要素集但比方法二复杂 //其二如下 这种更简单 但得不到选中要素集 根据不同情况使用 //参数一为查询几何体,参数二为查询包络线 axMapControl1.Map.SelectByShape(geometry, null, true);//第三个参数为是否只选中一个 //选中要素高亮显示 axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
上一篇: C++ 读取注册表
下一篇: [译]如何处理机器学习中的不平衡类别