ArcGIS Pro SDK for .NET(5)——以“亩”为单位统计地块面积

国土行业经常会使用“亩”来表示地块面积,但是ArcGIS Pro和ArcMap都没有“亩”这个面积单位,只能使用计算器做下除法,多出很多事。

没有就只能自己造了。

在软件工具栏的查询组内,新增一个测量面积的按钮。

效果演示

56a2e51f0c4c48a3bffeb6cc40fb8086.gif

实现代码

using ArcGIS.Core.Geometry;
using ArcGIS.Desktop.Editing.Attributes;
using ArcGIS.Desktop.Framework.Contracts;
using ArcGIS.Desktop.Framework.Dialogs;
using ArcGIS.Desktop.Framework.Threading.Tasks;
using ArcGIS.Desktop.Mapping;
using System;
using System.Collections.Generic;

namespace ProAppModule
{
    internal class Button_MeasureArea_mu : Button
    {
        protected override void OnClick()
        {
            QueuedTask.Run(() =>
            {
                var selectedSet = MapView.Active.Map.GetSelection();

                var selectedlist = selectedSet.ToDictionary();

                var inspector = new Inspector();


                int polygonCount = 0;
                double polygonArea = 0;

                foreach (var layer in selectedlist)
                {
                    MapMember mapMember = layer.Key;                    
                    List<long> oids = layer.Value;
                    inspector.Load(mapMember, oids[0]);
                    var geometryType = inspector.Shape.GeometryType;
                    if (geometryType == GeometryType.Polygon)
                    {
                        foreach (var o in oids)
                        {
                            inspector.Load(mapMember, o);
                            var myGeometry = inspector.Shape as Polygon;
                            var polygon = inspector.Shape as Polygon;
                            polygonArea += Math.Abs(polygon.Area);
                            polygonCount++;                            
                        }
                    }                    
                }
                var Area_Mu = AreaUnit.CreateAreaUnit("Area_Mu", 10000 / 15);
                double area_mu = Math.Round(AreaUnit.SquareMeters.ConvertTo(polygonArea, Area_Mu), 2);
                double acres = Math.Round(AreaUnit.SquareMeters.ConvertTo(polygonArea, AreaUnit.Hectares), 2);

                MessageBox.Show("地块数:" + polygonCount + "\n" +
                    "总面积:" + area_mu + " 亩" + "\n" +
                    "             " + acres + " 公顷" + "\n" +
                    "             " + Math.Round(polygonArea, 2) + " 平方米", "地块汇总");
            });
        }
    }
}

 DAML

  <modules>
    <insertModule id="ProAppModule_Module" className="Module1" autoLoad="false" caption="MyModule">      
      <groups>
        <group id="ProAppModule_Group1" caption="My Group" appearsOnAddInTab="true" >          
          <button refID="ProAppModule_Button_MeasureArea_mu" size="large" />
        </group>
      </groups>
      <controls>        
        <button id="ProAppModule_Button_MeasureArea_mu" caption="测量面积" className="Button_MeasureArea_mu" loadOnClick="true" smallImage="Images\MeasureArea16.png" largeImage="Images\MeasureArea32.png">
          <tooltip heading="测量面积">
            测量面积(亩)<disabledText />
          </tooltip>
        </button>
      </controls>
    </insertModule>
    <updateModule refID="esri_mapping">        
      <groups>
        <updateGroup refID="esri_mapping_inquiryGroup">
          <insertButton refID="ProAppModule_Button_MeasureArea_mu" separator="true" />
        </updateGroup>
      </groups>
    </updateModule>
  </modules>

更新说明

  1. 修复bug:选择中含有点、线要素时按钮无法工作

版权声明:本文为baidu_28157641原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。