arcgis engine 二次开发中GP工具的应用占有举足轻重的作用。GP不仅具有非常强大的功能并且其调用简单。深得广大GIS喜爱。前几天做arcgis engine 二次开发项目需要做几个功能用到gp工具,分别有shp转gdb 、转mdb、 矢量数据以及栅格数据裁剪还有shp数据导入sde以及 gdb、mdb数据导入sde。
直接上代码吧,先贴代码再解释。
Geoprocessor GP = new Geoprocessor();
GP.OverwriteOutput = true;
//进行裁剪运算
ESRI.ArcGIS.AnalysisTools.Clip SClip = new ESRI.ArcGIS.AnalysisTools.Clip();
SClip.clip_features = this.clipFile;
SClip.in_features = layer;
SClip.out_feature_class = this.m_outputFile;
SClip.cluster_tolerance = "#";
GP.Execute(SClip, null);
IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();
IWorkspaceName workspaceName = workspaceFactory.Create(System.IO.Path.GetDirectoryName(_str2), System.IO.Path.GetFileName(_str2), null, 0);
IName name = (IName)workspaceName;
IWorkspace fGDB_Wor = (IWorkspace)name.Open();
Geoprocessor GP = new Geoprocessor();
ESRI.ArcGIS.ConversionTools.FeatureClassToGeodatabase tool = new ESRI.ArcGIS.ConversionTools.FeatureClassToGeodatabase();
tool.Input_Features = _str;
tool.Output_Geodatabase = _str2;
GP.Execute(tool, null);
Geoprocessor GP = new Geoprocessor();
ESRI.ArcGIS.ConversionTools.FeatureClassToGeodatabase tool = new ESRI.ArcGIS.ConversionTools.FeatureClassToGeodatabase();
tool.Input_Features = pathname;
tool.Output_Geodatabase =Application.StartupPath + "\\intostore.sde";
IGeoProcessorResult result = (IGeoProcessorResult)GP.Execute(tool, null);
重点来啦,总结:
GP工具其实难点在input和output的路径,GP工具对路径的要求非常严格。再进行GP工具调用实现功能的时候,它会首先会对数据进行检查。那咱们接下来就具体讲讲GP工具输入路径与输出路径的格式
首先GP工具最好是绝对路径,比如in_Feature可以featurelayer但是不是很稳定有时候会转换失败。最好选择绝对路径。值得注意的是如果你想将gdb中的一个要素导入sde地理数据库中,那么这两个路径该如何写呢?这个问题应该是gp工具中第二难得。
写法如下:
input:
output:
第二个难点是:
GP工具批量导入地理数据库,AE如何实现?
有的同学说可以for循环调用GP工具,其实有坑的。因为for循环每次都要打开output地理数据库,造成内存泄漏。所以这里咱们采用得是GP工具直接封装好的批量入库方法。但是input路径是非常有讲究得。我研究了好长时间才搞出来,在这里也和大家分享下,写法如下:
path;path;path;
再具体写,咱们这里可以将入库得数据推到一个数组里中间拿;分割开,然后放到input——feature里面即可。
下篇文章咱们讲sde里面得一些坑。
我深刻明白,一个人得力量是有限的。相互分享,大家会收益翻倍,何乐而不为?
谢谢大家,码字不易,希望大家多多支持
近日朋友用GP工具又遇到两个问题,在这里给大家总结一下:
1、GP工具裁剪、融合等。只要是需要两个图层间进行操作的。请注意啦,这时候就需要保持两个图层间数据一致性,最具有代表性的就是两个图层的坐标系要一致,这点最容易被忽略。
2、GP工具使用的时候,inputfeature传入的图层或者shp文件路径不能带·。比如:SDE·xxxx.shp如果是这样的会造成报提示:com组件错误,很费解,这个问题我们排查了半天,甚至把环境重装了,都没解决,后来无意间发现了。