ArcGIS Engine开发之量测功能

本文详细介绍了如何使用ArcGIS Engine开发距离和面积测量功能。通过INewLineFeedback和IScreenDisplay接口实现距离测量,利用INewPolygonFeedback接口进行面积量测。在鼠标点击、移动和双击事件中进行测量逻辑处理,完成实时测量结果显示。最终,一个完整的量测工具由此诞生,适合开发者参考和学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、距离测量

 距离测量时,片段长度通过两点之间距离计算得到,全部长度通过片段长度的和计算得到。主要用到INewLineFeedback和IScreenDisplay两个接口。

 1)INewLineFeedback接口

该接口的主要方法如表:

方法 描述
Start 从指定点开始绘制追踪线的绘制
MoveTo 鼠标移动到的点,并实时绘制与上一节点的连接线
AddPoint 添加一个点
Stop 停止追踪线的绘制,并返回用户绘制的几何体

 

 

 

 

2)IScreenDisplay接口

MapControl中的每一个视图都有一个ScreenDisplay对象,用于控制视图中的图形绘制。ScreenDisplay对象除了管理窗体屏幕的显示属性外,也管理缓存和视图屏幕的变化等。可以通过IActiveView接口的ScreenDisplay属性获取ScreenDisplay对象。通ScreenDisplay对象的DisplayTransformation属性进行设备单位和地图单位的转换。

3)实现的思路

    • 鼠标点击时,首先判断INewLineFeedback接口的实例化对象pNewLineFeedback是否为空,如果为空就实例化,并设当前的鼠标点为pNewLineFeedback的起始点。反之,则把当前鼠标点添加到pNewLineFeedback中。
    • 鼠标移动时。实时计算鼠标移动点与上一鼠标点击点的距离,以及所画线的长度。
    • 鼠标双击时,停止绘制,并清空pNewLineFeedback对象
    • btnMeasureLine的单击事件打结果窗体,并设置bMeasurelength为true,以便从数据视图的鼠标事件中判断量算功能是否开启。

 

2、面积量测

面积量测通过INewPolygonFeedback接口绘制多边形来实现。使用NewPolygonFeedback和使用NewLineFeedback的方法类似,但其显示和返回的几何特征是一个封闭多边形,这意味着画多边形停止时,起点将成为终点,从而结束形状的绘制,该方法至少需要三个点被添加到几何对象中。

实现的思路如下

1)、点击鼠标时首先判断INewPolygonFeedback接口的实例化对象pNewPolygonFeedback是否为空,则实例化,并设当前鼠标点为pNewPolygonFeedback的起始点;反之则把当前的鼠标点添加到pNewPolygonFeedback中。

2)、鼠标移动时,判断绘制多边形时点的个数pPointCol是否超过3个点,如果超过三个,则由点击构建IPolygon接口,IArea接口,进而计算出面的总长度和面积。

3)、鼠标双击时,停止绘制,并清空pNewPloygonFeedback对象。


 

3、面积测量和距离测量的具体代码分布:

1.前提:新建一个用来显示测量结果的公共窗体
2.二者的button_click事件:
 1  #region 距离的测量按钮单击事件
 2         private void barButtonItem10_ItemClick(object sender, ItemClickEventArgs e)
 3         {
 4             mainMapControl.CurrentTool = null;
 5             pMouseOperate = "MeasureLength";
 6             mainMapControl.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
 7             if (frmMeasureResult == null || frmMeasureResult.IsDisposed)
 8             {
 9                 frmMeasureResult = new FormMeasureResult();
10                 frmMeasureResult.frmClosed += new FormMeasureResult.FormClosedEventHandler(frmMeasureResult_frmColsed);
11                 frmMeasureResult.labToltal.Text = "";
12                 frmMeasureResult.Text = "距离量测";
13                 frmMeasureResult.Show();
14             }
15             else
16             {
17                 frmMeasureResult.Activate();
18             }
19         }
20         #endregion
 1  #region 面积测量按钮单击事件
 2         private void btnPolyMeasure_ItemClick(object sender, ItemClickEventArgs e)
 3         {
 4             mainMapControl.CurrentTool = null;
 5             pMouseOperate = "MeasureArea";
 6             mainMapControl.MousePointer = esriControlsMousePointer.esriPointerCrosshair;//光标样式为十字丝
 7             if (frmMeasureResult == null || frmMeasureResult.IsDisposed)
 8             {
 9                 frmMeasureResult = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值