在ArcEngine中使用INewLineFeedback实现距离测量(面积测量)的正确方法

时间:2016-02-25 10:58:31
【文件属性】:
文件名称:在ArcEngine中使用INewLineFeedback实现距离测量(面积测量)的正确方法
文件大小:85KB
文件格式:ZIP
更新时间:2016-02-25 10:58:31
ArcEngine 距离测量 面积测量 9.3 客户最近打电话过来,说我们的软件在量距离的时候不能平移地图。我们的软件是使用ArcEngine来开发的,在网上输入关键字“arcengine 距离测量”,可以搜索到一大堆内容基本相似的文章或代码,基本上都是采用INewLineFeedback来实现的,我们的软件也是使用此种方法。方法大致如下:写一个距离测量工具,继承自BaseTool,在该类中使用INewLineFeedback动态绘制多段折线,最后转化为Element添加到地图上。如果要增加平移功能,我们仿造ArcMap使用鼠标中键平移,在OnMouseDown、OnMouseMove、OnMouseUp事件中增加判断鼠标中键的语句,然后分别使用PanStart、PanMoveTo、PanStop实现地图的平移。 此时,出现了一个新问题,一旦移动地图后,之前使用INewLineFeedback绘制的线完全乱了方寸,有一部分线丢失了。之后又发现一个更可笑的问题,在绘制的过程中,如果使用alt+tab键切换到其它窗口,然后再切换回地图窗口的时候,会多出一条线,INewLineFeedback把切换窗口前的鼠标位置记录了下来。 对于这个问题,我使用ArcMap的测量工具检查了一下,发现不存在上述问题。但是INewLineFeedback为什么会产生这个bug,难道是本人的使用方法不对。在网上搜了一下其他类似代码进行测试,都存在这个bug。ArcEngine的SDK文档上也没有特别强调INewLineFeedback的使用细节。 本来打算用gdi进行解决,最后发现INewLineFeedback有一个Refresh函数,那么应该在什么地方使用它呢?在ArcMapControl的诸多事件中,尝试了OnAfterDraw、OnAfterScreenDraw、OnViewRefresh等,发现OnAfterScreenDraw是OK的。具体是在OnAfterScreenDraw事件中使用Refresh函数刷新INewLineFeedback,完美解决问题。
【文件预览】:
MeasureDistance
----MeasureDistance()
--------MeasureDistance.csproj(6KB)
--------Form1.cs(2KB)
--------DrawPolygonTool.cs(18KB)
--------Program.cs(496B)
--------frmAreaFormcs.resx(11KB)
--------Form1.resx(9KB)
--------frmDistanceForm.resx(6KB)
--------Properties()
--------frmDistanceForm.designer.cs(4KB)
--------Form1.Designer.cs(5KB)
--------frmAreaFormcs.designer.cs(4KB)
--------frmDistanceForm.cs(1KB)
--------frmAreaFormcs.cs(1KB)
--------obj()
--------bin()
----MeasureDistance.sln(935B)
----MeasureDistance.suo(21KB)

网友评论

  • 很好的东西,解决了划线同时可以移动底图的问题,刚好我就需要这个,多谢
  • 可以使用,还不错。
  • 谢谢大神啊
  • 帮了大忙啦
  • 大神,直接解决我的问题,3q
  • 测量距离没问题,面积不行
  • 谢谢共享!不过测量的结果并没有显示在绘制的线或上,而是显示在弹出框内。
  • 资源还行,改造一下就能用。
  • 大神,直接解决我的问题,3q
  • 没有用工程 直接借鉴里面的代码~感觉还不错
  • 挺简单的 不错 有用
  • 用vs2010 design视图显示不出来
  • 可以运行,很好啊,正缺这个
  • 大赞楼主 好东西分享。
  • 很赞。跨屏测距和侧面积。
  • 例子,在我的电脑没有够运行。可能是版本不一样
  • 已经添加引用了 但还是出现不存在类型或命名空间 AxMapControl 大家下载后都运行起来了吗?
  • 资源很有借鉴意义哦,我在自己的C#代码里用了这段代码,感觉挺好的!
  • 很实用的例子 谢谢
  • 学习了,代码不错