ArcEngine&&ArcAddin开发中的常见问题

1.产生情景:创建工作空间打开GDB文件时。(创建Shp文件或其他数据库文件时也可能出现。)

报错提醒:

报错含义:已经存在同名的工作空间;

 

解决方案:1、找到电脑上已存在的名为gdbName的gdb文件,并删除或更名。

2、通过if判断是否存在对应的gdb文件,存在则打开,否则就创建一个新的,这样可以避免出现此错误,创建一个新的要素类也可以这样判断

 

附上:ArcEngine二次开发错误编码对照表

 

2.ArcGIS开发中的空间关系(ISpatial. esriSpatialRelEnum)

GIS空间查询(SpatialFilter)时各种空间关系总结

DE-9IM 空间关系模型

3.  问题:

解决方案:

ArcEngine中COM对象与其基础RCW分开后就不能再使用-CSDN博客

4.  获取当前执行程序的debug路径

AppDomain currentDomainn = AppDomain.CurrentDomain;

Assembly assembly = Assembly.GetExecutingAssembly();

string assemblyPath = assembly.Location;

MessageBox.Show(assemblyPath);

string assemblyDirectory = System.IO.Path.GetDirectoryName(assemblyPath);

MessageBox.Show(assemblyDirectory);

获取其它一些路径的方法

5.IFeature.Store()报错:无法再编辑调用回收行上的存储。

解决方案:将IFeatureClass.Search()方法的第二个参数设为false.

解决原因:如果第二个参数为true,featureCursor会在while循环结束后(对图层中符合要求的要素搜索结束后)自动释放掉,要求对要素的所有操作都在while循环里进行,否则就会产生该报错。

相反,如果为false,那么在while循环结束后不会自动释放游标,所以在结束while循环后再对feature操作不会产生该报错

6.  IFeature.Store()报错:已试图对空几何进行操作。

7.  错误 18 无法将文件“obj\Debug\GlobalObjectToos.dll”复制到“bin\Debug\GlobalObjectToos.dll”。文件“bin\Debug\GlobalObjectToos.dll”正由另一进程使用,因此该进程无法访问此文件。

解决方案:将正在运行的ArcMap程序关闭。

8.错误:空间索引格网大小无效。

解决方案:

1.将产生报错的要素删除,并重建。

2.  停止编辑的情况下,打开ArcCatalog,在要素层上右键-属性-索引-删除空间索引;再对数据进行编辑;编辑完成后来来创建空间索引

9.  错误:使用完自行开发的Add-in工具后,无法使用原有的编辑工具(只能选中,无法拖动,修改,删除等),只能停止编辑再开始编辑才能恢复。

引起原因:(个人推测)同时调用了IEditor.StartOperation(),IEditor.StopOperation()和          IWorkspaceEdit.StartEditing(true);

IWorkspaceEdit.StartEditOperation();

IWorkspaceEdit.StopEditOperation();

IWorkspaceEdit.StopEditing(true);

解决方案:保留IEditor,删除IWorkspaceEdit

10.  Form窗体程序,将事件处理程序与事件相关联的方法(以CheckListBox的ItemCheck事件为例):

设置CheckListBox的(Name)为CheckList,

事件处理程序命名为:CheckList_ItemCheck(组件的名字_事件的名字),

在designer.cs文件中绑定事件处理程序:

this.CheckList.ItemCheck += 

new System.Windows.Forms.ItemCheckEventHandler(CheckList_ItemCheck);

11.  异常:无法加载DLL"xxx.dll"找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

背景及产生原因:C#中调用ArcMapLicense组件产生错误

解决方案:dll生成的平台(x64/x86/AnyCpu),与我们的工程的平台不符合;

在解决方案——>属性——>生成——>目标平台——>改为x86即可。

 

这是由于我在进行这次创建的时候采用的是将其它的FeatureClass复制到该Featuclass上,那么就存在新建的和原来的Shape坐标参考不一样,所以为了解决此错误,在创建shape的时候修改如下:复制旧的shape到此FeatureClass,错误解决

13. 

检测工具输入的信息是否有误,是否为空

14. 

在Licensecontrol插件更改其属性的权限

15. 

调用IWorkspaceFactory时结束要用Marshal.ReleaseComObject(workspaceFactory);释放

不然会出现无法将类型强制转换为什么什么的错误提示

16.  “LC.exe”已退出,代码为 -1。

找到文件下的licnses.licx文件删除并重新创建一个

https://www.cnblogs.com/XiaoRuLiang/p/10076549.html

17,无法再次编译已经回收行上的内容

过滤条件改成false,因为如果为true的时候,则代表着在下面的while结束的时候自动释放空间,

18.  删除GDB文件时报错:文件“timestamps”正在被进程使用,该进程无法访问。

产生原因:使用Directory.Delete(path,true);删除gdb文件夹

解决方案:改为使用Dataset删除:

//将IWorkspace转为 Dataset

Dataset dataset = workspace as Dataset;

dataset.Delete();

完美解决

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值