ArcGIS二次开发实践— — 遍历ToolBox中的工具!_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > ArcGIS二次开发实践— — 遍历ToolBox中的工具!

ArcGIS二次开发实践— — 遍历ToolBox中的工具!

 2014/12/14 23:03:29  疯子离  程序员俱乐部  我要评论(0)
  • 摘要:在AO中,打开“文件A”的基本流程是:1、创建对应“文件A”类型的WorkspaceFactory;2、用WorkspaceFactory创建“文件A”的Workspace,Workspace可以是文件所在文件夹(如本文后面要创建的ToolBox的Workspace),也可以是空间数据库(如果你把文件存到数据库里了或要打开数据库里的数据)。3、用Workspace打开“文件A”
  • 标签:ArcGIS 遍历 工具 开发 开发实践

在AO中,打开“文件A”的基本流程是:

1、创建对应“文件A”类型的WorkspaceFactory

2、用WorkspaceFactory创建“文件A”的Workspace,Workspace可以是文件所在文件夹(如本文后面要创建的ToolBox的Workspace),也可以是空间数据库(如果你把文件存到数据库里了或要打开数据库里的数据)。

3、用Workspace打开“文件A”,获得对应类型的“文件A”对象

----------------------------------------------------好了,开始(这里,我的Toolbox路径为F:\Root\Tools\MagmaDistribution.tbx)。

ArcGIS的每个Toolbox,在windows下都是一个.tbx文件

通过AO的对象模型图可以知道,在.Net里用GPToolbox对象来代表Toolbox,因此我们首先需要打开事先准备好的.tbx文件,并实创建一个GPToolbox对象来管理它。

1、创建一个ToolboxWorkspaceFactory对象

2、ToolboxWorkspaceFactory来创建用于打.tbx文件ToolboxWorkspace

3、用ToolboxWorkspaceFactory通过.tbx文件的路径创建GPToolbox对象

这样我们就创建了一个代表ToolBox的对象,代码如下:

1 ToolboxWorkspaceFactory toolBoxWSF = new ToolboxWorkspaceFactoryClass();
2 IToolboxWorkspace toolBoxWS = (IToolboxWorkspace)toolBoxWSF.OpenFromFile("F:\\Root\\Tools", 0);
3 IGPToolbox toolbox = toolBoxWS.OpenToolbox("MagmaDistribution.tbx");

 

我的MagmaDistribution.tbx里放了3个tool,下面我们来获得这四个tool的名字,并输出到控制台:

 1  //输出toolbox的路径信息
 2                 Console.WriteLine("IGPToolBox的PathName:" + toolbox.PathName);
 3                 //从IGPToolbox的ToolNames属性获得toolbox里3个tool的名字。
 4                 ESRI.ArcGIS.Geoprocessing.IEnumGPToolName toolName = toolbox.ToolNames;
 5                 IGPToolName gpn = toolName.Next();
 6                 while (gpn != null)
 7                 {//循环输出tool的名字
 8                     Console.WriteLine(gpn.DisplayName);
 9                     gpn = toolName.Next();
10                 }

运行效果:

 

  

完整代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using ESRI.ArcGIS.esriSystem;
 5 using ESRI.ArcGIS.Geodatabase;
 6 using ESRI.ArcGIS.DataSourcesGDB;
 7 using ESRI.ArcGIS.Geoprocessing;
 8 
 9 namespace esriTestConsole
10 {
11     class Program
12     {
13         private static LicenseInitializer m_AOLicenseInitializer = new esriTestConsole.LicenseInitializer();
14     
15         [STAThread()]
16         static void Main(string[] args)
17         {
18             //ESRI License Initializer generated code.//这是创建ArcGIS控制台项目时自动生成的
19             m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeEngine, esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB, esriLicenseProductCode.esriLicenseProductCodeBasic, esriLicenseProductCode.esriLicenseProductCodeStandard, esriLicenseProductCode.esriLicenseProductCodeAdvanced },
20             new esriLicenseExtensionCode[] { esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork, esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst });
21             //ESRI License Initializer generated code.
22             try
23             {
24                 ToolboxWorkspaceFactory toolBoxWSF = new ToolboxWorkspaceFactoryClass();
25                 IToolboxWorkspace toolBoxWS = (IToolboxWorkspace)toolBoxWSF.OpenFromFile("F:\\Root\\Tools", 0);
26                 IGPToolbox toolbox = toolBoxWS.OpenToolbox("MagmaDistribution.tbx");
27                 //输出toolbox的路径信息
28                 Console.WriteLine("IGPToolBox的PathName:" + toolbox.PathName);
29                 //从IGPToolbox的ToolNames属性获得toolbox里4个tool的名字。
30                 ESRI.ArcGIS.Geoprocessing.IEnumGPToolName toolName = toolbox.ToolNames;
31                 IGPToolName gpn = toolName.Next();
32                 while (gpn != null)
33                 {//循环输出tool的名字
34                     Console.WriteLine(gpn.DisplayName);
35                     gpn = toolName.Next();
36                 }
37 38 } 39 catch (Exception ex) 40 { 41 Console.WriteLine(ex.Message); 42 } 43 ////Do not make any call to ArcObjects after ShutDownApplication() 44 finally 45 { 46 Console.WriteLine("输入任意字符退出程序:"); 47 Console.Read(); 48 m_AOLicenseInitializer.ShutdownApplication(); 49 } 50 } 51 } 52 }

 

发表评论
用户名: 匿名