ArcGIS Engine二次开发VS2013使用MuneStirp控件实现两点距离测量
时间: 2023-07-11 20:04:31 浏览: 106
首先,在 ArcGIS Engine 项目中添加 MuneStirp 控件。可以通过以下步骤实现:
1. 在 Visual Studio 中打开 ArcGIS Engine 项目。
2. 在 Solution Explorer 中右键单击该项目,选择“添加引用”。
3. 在“添加引用”对话框中,选择“COM”选项卡。
4. 在列表中找到并选中“ESRI MuneStirp Control 10.x”。
5. 单击“确定”按钮,将 MuneStirp 控件添加到项目中。
接下来,实现两点距离测量的代码如下:
1. 在 Form_Load 事件中添加以下代码:
```csharp
// 设置 MuneStirp 控件的默认工具
axMapControl1.CurrentTool = null;
axMuneStirpControl1.SetBuddyControl(axMapControl1);
// 添加测量工具
IMenuDef menuDef = new ToolbarMenuClass();
menuDef.AddItem(new MeasureToolClass());
axMuneStirpControl1.AddItem(menuDef, 0, -1, false, esriCommandStyles.esriCommandStyleIconAndText);
```
2. 定义测量工具类 MeasureTool,继承自 BaseCommand 类,实现 ICommand 接口:
```csharp
public class MeasureTool : BaseCommand, ICommand
{
private IMapControl3 _mapControl;
private IMap _map;
private IActiveView _activeView;
private IPoint _startPoint;
private IPoint _endPoint;
private bool _isMouseDown;
public MeasureTool()
{
base.m_caption = "Distance Measure";
}
public override void OnCreate(object hook)
{
_mapControl = hook as IMapControl3;
_map = _mapControl.Map;
_activeView = _mapControl.ActiveView;
base.m_enabled = true;
}
public override void OnClick()
{
if (_mapControl != null)
{
_mapControl.CurrentTool = this;
_isMouseDown = false;
}
}
public override void OnMouseDown(int Button, int Shift, int X, int Y)
{
if (_mapControl != null)
{
_startPoint = _mapControl.ToMapPoint(X, Y);
_isMouseDown = true;
}
}
public override void OnMouseMove(int Button, int Shift, int X, int Y)
{
if (_mapControl != null && _isMouseDown)
{
_endPoint = _mapControl.ToMapPoint(X, Y);
_activeView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
}
}
public override void OnMouseUp(int Button, int Shift, int X, int Y)
{
if (_mapControl != null && _isMouseDown)
{
_endPoint = _mapControl.ToMapPoint(X, Y);
_isMouseDown = false;
// 计算两点距离
double distance = _startPoint.Distance(_endPoint);
// 显示测量结果
MessageBox.Show($"Distance: {distance} meters");
_activeView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
}
}
public override void OnMouseMove(int Button, int Shift, int X, int Y, double MapX, double MapY)
{
OnMouseMove(Button, Shift, X, Y);
}
}
```
在该类中,实现了 ICommand 接口的 OnCreate、OnClick、OnMouseDown、OnMouseMove 和 OnMouseUp 方法。其中,OnClick 方法设置 MuneStirp 控件的当前工具为该测量工具;OnMouseDown 方法记录鼠标按下时的点;OnMouseMove 方法记录鼠标移动过程中的点;OnMouseUp 方法计算两点距离并显示测量结果。
3. 在 MuneStirp 控件上右键单击,选择“定制”菜单,在弹出菜单中选择“Distance Measure”工具,即可开始使用该测量工具。
以上就是使用 MuneStirp 控件实现两点距离测量的完整代码。