资源描述:
《ArcEngine 测量.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、利用ArcEngine实现距离量测,面积量测的功能已很简单,相信众多的ArcGIS爱好者都能写.但单纯的实现功能总觉得欠什么.本人喜欢改代码,喜欢优化代码,在原有的功能基础上总喜欢"润色",使之更好看.前一整子在玩skyline时看到skyline的测距功能能实时显示量测的距离,于是联想到之前自己用C#+ArcEngine写的测距功能.何不也优化一下自己代码?想到就做到.最近手有点痒,算练练手.废话少说,先附上效果图:说明:1.本功能的特点在于在量测的过称当中实时显示量测距离,并将结果实时显示在测距上方.在显示窗体上也显示量测的总
2、距离.要点:1.INewLineFeedback负责画线;2.在OnMouseDown事件中计算量测距离,并向GraphicsContainer添加线和节点的Element;3.在OnMouseUp事件中实时计算距离随鼠标移动后产生的新距离.4.将节点,量测值,线的element都分别存入到节点组和轨迹线组(IGroupElement),即用IGroupElement同一管理这些element;最后将这些groupelement又添加到一个总的groupelement.这样做的目的在于好控制这些element,特别是启动新的量测或
3、取消量测功能时可以控制这些element,而不必去用IGraphicsContainer.DeleteAllElements来清除这些element,使用IGraphicsContainer.DeleteAllElements会将所有的element删除.5.量测值element为ITextElement,由于他停靠在轨迹线的上方,因此需要对量测值element进行一定角度的旋转,旋转角度由轨迹线的方向角决定.6.绘制element之后的刷新问题也是比较重要的.刷新范围一定要控制好,太小了,添加的element显示不出来,太大了,
4、浪费.(实在不好控制就刷新整个extent吧,呵呵)核心代码如下:1.TrackLine类TrackLine//=================================功能测距==========================//描述:实时显示测量距离,节点位置,总长度//编程: Jin 开发时间:2009.8.10-2009.8.11//特点:实时计算量测距离.//缺点: 由于采用element做为显示内容,地图进行放大缩小操作后并不能很好// 控制量测值element和轨迹线e
5、lement之间的距离间隔.//===================================================================using System;using System.Drawing;using System.Runtime.InteropServices;using ESRI.ArcGIS.ADF.BaseClasses;using ESRI.ArcGIS.ADF.CATIDs;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Carto;
6、using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;using System.Windows.Forms;namespace MhGis.GisTool.Pb_Toolbar{ class TrackLine : BaseTool { private IHookHelper m_hookHelper = null; private INewLineFeedback m_NewLi
7、neFeedback = null; private IPointCollection m_ptColl; //记录节点 private MeasureMsgInfo _MsgInfo = null; private IPolyline m_TraceLine = null; //完整的轨迹线 // private IGroupElement m_Elements = null; //用于保存包含此功能产生的所有Element private IG
8、roupElement m_TraceElement = null; //测距轨迹线 private IGroupElement m_VertexElement = null; //结点 private IGroupEl