基于C#的AE二次开发之通过点击地图窗口计算面要素面积并显示
我的开发环境为ArcGIS Engine 10.2与Visual studio2010。主地图名称为axMapControl1。创建主地图的OnMouseDown来实现面状要素面积的计算,面状要素类必须经过投影(采用投影坐标系,而不是地理坐标系),否则计算出来的面积有误!(注意相关事件的添加与动态链接库的引入)
-
效果预览:
-
实现代码
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
try
{
//实例化一个点,以该点作拓扑算子,将点击的位置坐标赋予pPoint
IPoint pPoint = new ESRI.ArcGIS.Geometry.Point();
ITopologicalOperator pTopologicalOperator = pPoint as ITopologicalOperator;
pPoint.PutCoords(e.mapX, e.mapY);
//以缓冲半径为0进行缓冲 得到一个点
IGeometry pGeometry = pTopologicalOperator.Buffer(0);
//以该点进行要素选择(只能选中面状要素,点和线无法选中)
axMapControl1.Map.SelectByShape(pGeometry, null, false);
//刷新视图
axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
// 获取选择集
ISelection pSelection = axMapControl1.Map.FeatureSelection;
// 打开属性标签
IEnumFeatureSetup pEnumFeatureSetup = pSelection as IEnumFeatureSetup;
pEnumFeatureSetup.AllFields = true;
// 获取要素
IEnumFeature pEnumFeature = pSelection as IEnumFeature;
IFeature pFeature = pEnumFeature.Next();
while (pFeature != null)
{
double area = 0;
double mu = 0;
//计算面积
IArea pArea = pFeature.Shape as IArea;
area = pArea.Area;//得到的面积单位是平方米
mu = area * 0.0015;//转换为亩
MessageBox.Show("该地块面积是:" + Math.Round(area, 6) + "平方米,约为:" + Math.Round(mu, 6)+ "亩");
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex+"");
}
}
ITopologicalOperator类从属于ESRI.ArcGIS.Geometry类库下,还可以对点要素、线要素进行查询。
- ESRI官网ITopologicalOperator接口查询地址为
https://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#//002m000003t6000000