当前位置: 代码迷 >> GIS >> Geoprocessor 循环疏失,寻求原因
  详细解决方案

Geoprocessor 循环疏失,寻求原因

热度:115   发布时间:2016-05-05 06:23:41.0
Geoprocessor 循环出错,寻求原因
各位大侠帮忙看下,我用Geoprocessor 调用Arctoolbox中的clip工具(analysistool)执行矢量裁切,过程如果小于一分钟就重复执行,超过一分钟结束循环。可是循环一次还行,在执行第二次时就失败了,出现错误提示:未处理的COMexception ,对COM 组件的调用返回了错误 HRESULT E_FAIL。 如何才能实现对已输出的shp文件进行覆盖?
代码如下:
while (DateTime.Compare(compareTime, endTimeMany) > 0)   //当执行时间小于一分钟时执行循环
            {
               Geoprocessor gp = new Geoprocessor();
                gp.OverwriteOutput = true;   //这个overwriteoutput重写的到底是什么?不能对第一次执行时输出的文件进行覆盖么?

                IFeatureClass inputfeatureclass = inputfeaturelayer.FeatureClass; // inputfeatureclass 被裁切的shp文件
                IDataset dataset = inputfeatureclass as IDataset;
                IFields outfields = inputfeatureclass.Fields; 

                IWorkspaceFactory pFWSF = new ShapefileWorkspaceFactoryClass();
                pFWS = pFWSF.OpenFromFile(resultDataStorePath, 0) as IFeatureWorkspace; //resultDataStorePath是输出结果保存路径
                IFeatureClass outfeatureclass = pFWS.CreateFeatureClass(resultDataStoreName, cliplayerClass.FeatureClass.Fields, null , null, esriFeatureType.esriFTSimple, "Shape", ""); //创建 ,就是在这一句出错的
                Clip clipTool = new Clip(inputfeatureclass, cliplayerClass, outfeatureclass);//参数分别对应:输入图层,用于裁切的图层和输出图层
                gp.Execute(clipTool, null);
                IFeatureLayer outlayer = new FeatureLayerClass();
                outlayer.FeatureClass = outfeatureclass;
                outlayer.Name = outfeatureclass.AliasName;
                pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
             }
剩下分好少,大侠们莫怪啊
------解决方案--------------------
第一次使用shapefile文件后没释放文件句柄?
------解决方案--------------------
话说你初始化license了么?
还有就是在64位操作系统下也会出现这样的问题。要改成X86才可以编译。
------解决方案--------------------
你得手动写代码把上次生成的shapefile文件删除。