本文框架将根据个人学习及工作需求搭建,持续更新。
1 基础
GP工具是ArcGIS中比较常用的数据处理工具,效率高而且经过充分的测试,比较可靠;直接调用这些工具会给我们的工作带来极大的遍历,本文旨在搜集和整理GP工具使用的示例代码,为自己和以后的学习者提供参考学习。
1.1 依赖的名称空间
1.2 基础代码框架
public void MainFrame() { //创建gp工具 ESRI.ArcGIS.Geoprocessor.Geoprocessor pGeoprocessor = ESRI.ArcGIS.Geoprocessor.Geoprocessor{}; pGeoprocessor.OverwriteOutput = true; pGeoprocessor.AddOutputToMap = false; //创建GDB文件 CreateFileGDB processor = new CreateFileGDB {}; processor.out_folder_path = @"d:\临时目录"; processor.out_name = "temp.gdb"; pGeoprocessor.Execute(processor, null); //其余示例代码可直接参照创建gdb文件的代码进行 }
1.3 使用GP工具的思路
自己琢磨的步骤:
引用ESRI.ArcGIS.Geoprocessing名称空间,创建GP执行对象
在ArcGIS中找到要使用的ArcToolBox工具,其所属的一级目录即为使用该工具需要的引用的名称空间;
打开ArcMap的工具帮助,即可看到使用该工具的参数说明及赋值规则
使用定义的GP对象,执行完成赋值的工具
输出结果
目前没发现怎么直接利用开发帮助文档,找到类似与普通接口调用那样的参数说明,以待后续研究,若有大神知道步骤,欢迎评论区告知。
2 分析工具-AnalysisTools
2.1 叠加工具-Overlay
2.1.1 相交-Intersect
计算输入要素的几何交集,所有图层和/或要素类中相叠置的要素或要素的各部分将被写入到输出要素类。
(1) 功能截图:
(2) 参数说明:
(3) 示例代码
/// <summary> /// 成功方式 /// </summary> /// <param name="inputFeatClass">输入要素类</param> /// <param name="clipFeatClass">裁剪要素类</param> /// <param name="outShpFileName">不带.shp的文件名</param> private void IntersectResults(IFeatureClass inputFeatClass, IFeatureClass clipFeatClass, string outShpFileName) { IGpValueTableObject valTbl = new GpValueTableObjectClass(); valTbl.SetColumns(2); object row = ""; object rank = 1; row = inputFeatClass; valTbl.SetRow(0, ref row); valTbl.SetValue(0, 1, ref rank); row = clipFeatClass; valTbl.SetRow(1, ref row); rank = 2; valTbl.SetValue(1, 1, ref rank); Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; ESRI.ArcGIS.AnalysisTools.Intersect intersect = new ESRI.ArcGIS.AnalysisTools.Intersect(); intersect.in_features = valTbl; intersect.out_feature_class = outShpFileName; intersect.join_attributes = "NO_FID"; intersect.output_type = "INPUT"; if (gp.Execute(intersect, null) == null) { throw new DataOutputException(GetGpMessage(gp)); } }
(4) 调用:
pGeoprocessor.Execute(IntersectResault(inFea1, inFea2, outFeaName), null);
3 数据管理工具 DataManagementTools
3.1 Joins
public AddJoin tableJoin(IFeatureClass editFeatureClass, IFeatureClass srcFeatureClass) { //1 创建gp工具 ESRI.ArcGIS.Geoprocessor.Geoprocessor pGeoprocessor = ESRI.ArcGIS.Geoprocessor.Geoprocessor{}; pGeoprocessor.OverwriteOutput = true; pGeoprocessor.AddOutputToMap = false; //2 创建GDB文件 CreateFileGDB processor = new CreateFileGDB {}; processor.out_folder_path = @"d:\临时目录"; processor.out_name = "temp.gdb"; pGeoprocessor.Execute(processor, null); //3 图层连接 AddJoin pAddJoin = new AddJoin { }; pAddJoin.in_layer_or_view = editFeatureClass; pAddJoin.in_field = "FEAID"; pAddJoin.join_table = srcFeatureClass as ITable; pAddJoin.join_field = "FEAID"; pAddJoin.join_type = "KEEP_ALL"; pGeoprocessor.Execute(pAddJoin, null); //4 图层拷贝 CopyFeatures pCopy = new CopyFeatures{}; pCopy.in_features = editFeatureClass; pCopy.out_feature_class = "d:\临时目录\temp.gdb\连接图层"; pGeoprocessor.Execute(pCopy , null); //5 移除连接 //ESRI.ArcGIS.DataManagementTools.RemoveJoin removeJoin = new ESRI.ArcGIS.DataManagementTools.RemoveJoin(editFeatureClass); //IGeoProcessorResult gpResult = gp.Execute(removeJoin,null) as IGeoProcessorResult; }