C# ArcEngine 实现点击要素高亮并弹出其属性
2015-10-28 17:25
573 查看
本文是模仿ArcMap里面的Identify(识别)功能,通过点击要素,使其高亮显示并弹出其属性表!本文只做了点击查询!
本文所用的环境为VS2010,AecEngine基于C#语言,界面是用Dev做的,比windows自带的窗体稍微好看点,效果如下:
主要实现代码(在axMapControl1_OnMouseDown下):
本文所用的环境为VS2010,AecEngine基于C#语言,界面是用Dev做的,比windows自带的窗体稍微好看点,效果如下:
主要实现代码(在axMapControl1_OnMouseDown下):
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 == ESRI.ArcGIS.Geometry.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#中的装箱(Boxing)和拆箱(Unboxing)
- C#解决动态添加控件时,控件闪烁的问题
- C#解析Cookie字符串为CookieCollection
- c#下实现ping操作【转】
- c# 通过快捷方式读取目标路径
- C# ping操作,MSDN版(不是socket自己写值的版本)
- C#的MD5
- C#窗体透明
- [C#] 调用有管理员权限的CMD
- C# winform 弹出输入框
- C# WebBrowser 设置代理完全解决方案
- C#避免程序二次启动并接收参数
- C#创建和调用WebService
- C# 中实现快捷键的的方式
- C# 发送邮件
- .net-c# 获取机器码
- C# 连接 Exchange 发送邮件
- :c#的remoting里,CallContext.GetData获得的对象老是空的?该怎么处理
- 支付宝Payto接口的c#.net实现(二)
- 支付宝Payto接口的c#.net实现 (一)