国土行业经常会使用“亩”来表示地块面积,但是ArcGIS Pro和ArcMap都没有“亩”这个面积单位,只能使用计算器做下除法,多出很多事。
没有就只能自己造了。
在软件工具栏的查询组内,新增一个测量面积的按钮。
效果演示

实现代码
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>更新说明
- 修复bug:选择中含有点、线要素时按钮无法工作
版权声明:本文为baidu_28157641原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。