社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
最近在项目里面有几处要用到调用GP工具,之前没咋用过,后来用的时候发现了很多的问题,现在记下来留给以后使用或者有问题的朋友可以看看。一般调用GP工具都是这个错误
"对 COM 组件的调用返回了错误 HRESULT E_FAIL",
出现这个错误主要的原因大致可以概括为以下:
1.参数缺少或者参数类型不正确,这是最容易解决的,改变正确的参数类型即可:
解决方法:一般我们在调用GP时都会在GIS里面先使用一遍,看看用到哪些变量,
例如 以这个 ESRI.ArcGIS.AnalysisTools.Update updateTool = new ESRI.ArcGIS.AnalysisTools.Update();叠加分析中的更新工具为例
在这个界面里面有三个必须选择的参数, updateTool.in_features = inputLayer.FeatureClass;
updateTool.update_features = updateFeaturelayer.FeatureClass;
updateTool.out_feature_class =this.OutputPath;
这三个参数是必须的,但是有人会问怎么判断输入的参数是对的呢,不急,在上面的红色箭头上,TOOL Help,点击就会进入
往下看,有Data Type.这就是在说明输入的类型
这就解决了参数的问题
2.参数路径不正确,或者gp的overwrite属性未设置,例如一个不存在的路径或者该路径下已有同名文件,这个问题就需要设置overwrite属性为true,(个人认为这点不是太重要,先写下了).
3.这个是最重要的,也是重点了。就是Arcengine授权的问题,自从10.1之后,在授权没了arcinfo这个授权选项了,换成了如下:
这是一个license控件,用控件讲解方便,但是我们在程序中,还是推荐用代码授权(不知道为啥,反正听大神说的),
从上到下,权限递增,但是只能选择一个,切上面的权限优先使用,明白了吧,就是你都选了,权限也只是上面的ArcGis Engine
针对于上面的GP工具这个权限要高点,使用advanced.
代码: ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
IAoInitialize aoInitialize = new AoInitialize();
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);
将这段代码加载你的程序,InitializeComponent()之前就可以了;
写的好累.....
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!