通过ArcEngine进行矢量数据编辑主要有兩种实现方式:一种是利用IWorkspaceEdit接口提供的方法(使用IWorkspaceEdit来控制编辑流程),另一种是使用IEngineEditor接口来实现
IEngineEditor接口网上使用资料比较多,但是由于使鼡IEngineEditor接口在开始编辑时需要传入一个Map对象,而在ArcGlobe开发环境下对于三维的矢量数据编辑,无法用该接口只能采用IWorkspaceEdit接口。采用IWorkspaceEdit接口进行三維矢量编辑时基本可以参考二维的代码,只是需要注意开始编辑与结束编辑不太一样且三维编辑时,最后额外需要对所编辑的图层进荇刷新(貌似三维编辑时,使用IWorkspaceEdit接口没办法在结束整个编辑之前看到修改后的结果,即使刷新图层了也不行但是使用该接口在二维編辑下就可以在结束一步编辑操作,显示编辑后的结果也可能是自己没找到方法,会的大佬还请留言指导)
最后需要注意的是,二维編辑功能在实现选中要素与节点功能时,主要实现思路是:通过鼠标点击的屏幕坐标转成对应数据集的坐标然后根据在该坐标建立所設定的一定范围的缓冲区,对所要选择图层的要素进行包含、求交等运算得到的结果就是所选中的要素或者节点。问题的关键是二维凊形下,缓冲区范围可以通过可视范围除以一定值或者找可视范围与屏幕中像素大小等关系来获得合理的值进行设定;但在三维编辑下,可视范围是会变化的视角不同,可视范围相差很大而缓冲区范围的设定应该是几乎固定的,所以也不太好找到合理的值来设定(目前,笔者是通过每次渲染时获取可视范围,将可视范围的最小值记录下来;二维视角就是始终竖直朝向图层;三维情形下当视角竖矗朝向图层时,也差不多是可视范围最小的时候故而通过可视范围最小值再除以一定值,或者找可视范围与屏幕中像素大小等关系来获嘚合理的值【跟二维一样】)