
在ArcEngine中运用INewLineFeedback进行准确的距离和面积测量的方法
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本文介绍如何利用ArcEngine中的INewLineFeedback接口实现精确距离与面积测量的技术细节及操作步骤。
最近有客户来电反映,在使用我们的软件进行距离测量功能时无法平移地图的问题。我们所开发的软件是基于ArcEngine平台创建的,并且在网上的搜索结果中发现,大部分关于“arcengine 距离测量”的文章或代码都采用了INewLineFeedback来实现该功能。
具体来说,我们的软件也使用了这种方法:编写一个距离测量工具类继承自BaseTool,在这个类里通过调用INewLineFeedback动态绘制多段折线,并最终将其转化为Element添加到地图上。为了增加平移的功能,我们参照ArcMap的做法在鼠标中键按下、移动和释放等事件中加入相应的判断语句来实现PanStart、PanMoveTo以及PanStop操作。
然而,在引入了这些改动后,发现了一个新的问题:一旦用户开始使用鼠标的中间按钮进行地图的拖动(即平移),之前通过INewLineFeedback绘制出的距离测量线会变得混乱甚至部分丢失。进一步测试还发现了另一个意外的问题——在绘图的过程中如果切换到其他应用程序再返回时,软件会在原有基础上多画一条新的折线。
为了解决这些问题,我们检查了ArcMap自带的量测工具,并没有发现同样的问题出现。于是怀疑是否是我们的代码实现方法有误?在网上找到的一些类似代码也存在相同的bug现象,而官方文档中并没有对INewLineFeedback的具体使用细节作出特别说明或警告信息。
起初考虑用GDI来解决这个问题,但后来注意到INewLineFeedback类里有一个Refresh函数可以用来更新显示。经过尝试,在ArcEngine的多个事件回调方法(如OnAfterDraw、OnViewRefresh等)中调用了这个刷新功能后发现,在OnAfterScreenDraw这一特定时刻使用它能够有效解决问题。
综上所述,通过在绘制距离测量线的过程中适时地调用INewLineFeedback类中的Refresh函数,并将其放置于ArcEngine的事件序列中的合适位置(如OnAfterScreenDraw),可以解决因地图平移而导致的距离线条混乱丢失以及窗口切换后多出额外折线的问题。
全部评论 (0)


