C# ArcEngine 实现点击要素高亮并弹出其属性
2023-09-14 09:02:22 时间
转自 C# ArcEngine 实现点击要素高亮并弹出其属性
本文是模仿ArcMap里面的Identify(识别)功能,通过点击要素,使其高亮显示并弹出其属性表!本文只做了点击查询!
ITopologicalOperator pTopo; IGeometry pGeometry; IFeature pFeature; IFeatureLayer pFeatureLayer; IFeatureCursor pCursor; ISpatialFilter pFilter; DataTable dataTable;
for (int i = 0; i < axMapControl1.Map.LayerCount; i++) { pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); pTopo = pPoint as ITopologicalOperator;
double m_Radius = 1; pGeometry = pTopo.Buffer(m_Radius); if (pGeometry == null) continue;
axMapControl1.Map.SelectByShape(pGeometry, null, true);//第三个参数为是否只选中一个 axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null); //选中要素高亮显示 pFilter = new SpatialFilterClass(); pFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; pFilter.Geometry = pGeometry; pFeatureLayer = axMapControl1.Map.get_Layer(i) as IFeatureLayer; pCursor = pFeatureLayer.Search(pFilter, false); pFeature = pCursor.NextFeature();
string fieldName; if (pFeature != null) { if (Application.OpenForms["otherQueryForm"] == null) { otherqueryform = new otherQueryForm(); otherqueryform.Show(); } else { Application.OpenForms["otherQueryForm"].Show(); }//这里主要控制子窗体不会重复弹出
dataTable = new DataTable(); for (int k = 0; k < 2; k++) { if (k == 0) { dataTable.Columns.Add("属性"); } if (k == 1) { dataTable.Columns.Add("值"); } } DataRow datarow; for (int j = 0; j < pFeature.Fields.FieldCount; j++) { datarow = dataTable.NewRow(); for (int m = 0; m < 2; m++) { if (m == 0) { fieldName = pFeature.Fields.get_Field(j).Name; datarow[m] = fieldName; } if (m == 1) { if (pFeature.Fields.get_Field(j).Name == "Shape") { if (pFeature.Shape.GeometryType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint) { datarow[m] = "点"; } If ( pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline) { datarow[m] = "线"; } if (pFeature.Shape.GeometryType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) { datarow[m] = "面"; } } else { datarow[m] = pFeature.get_Value(j).ToString(); } } } dataTable.Rows.Add(datarow); } otherqueryform.dataGridView1.DataSource = dataTable; otherqueryform.layerName_dev.Text = pFeatureLayer.Name; otherqueryform.dataGridView1.Refresh(); pFeature = null; break; } }
相关文章
- C#中using语句是什么意思「建议收藏」
- C#中Dock属性的作用[通俗易懂]
- c# mysql executenonquery_C#与数据库访问技术之ExecuteNonQuery方法
- 看我是如何用C#编写一个小于8KB的贪吃蛇游戏的
- 1.5万字长文:从 C# 入门 Kafka(生产者)
- 编写高质量代码改善C#程序——使用泛型集合代替非泛型集合(建议20)
- C#HttpClientCookie验证解决方法
- c#中使用自动属性减少代码输入量
- c#设置xml内容不换行及属性xsi:nil=true的空节点添加
- C#获取属性名的方法
- C#生成验证码取随机数字加字母(改进版)
- C#方法的总结详解
- 深入理解C#索引器(一种支持参数的属性)与属性的对比
- c#后台修改前台DOM的css属性示例代码
- c#执行外部命令示例分享
- C#中属性和成员变量的区别说明
- asp.net中C#获取字符串中汉字的个数的具体实现方法
- C#类中的属性使用总结(详解类的属性)
- C#无限参数的写法
- C++与C#互调dll的实现步骤