基于C#的AE二次开发之通过点击地图窗口计算面要素面积并显示(ITopologicalOperator)

28 篇文章 16 订阅
24 篇文章 44 订阅

基于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类库下,还可以对点要素、线要素进行查询。

https://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#//002m000003t6000000

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值