现在的位置: 首页 > 综合 > 正文

ArcGIS 下的GP function Tool开发

2013年08月07日 ⁄ 综合 ⁄ 共 3177字 ⁄ 字号 评论关闭

       Visual C++ 开发Geoprocessing 工具

     GP工具开发步骤

      继承IGPFunctionFactory和IGPFunction接口
     2.实现上述接口中的方法
     3.定义UI参数
     4.处理UI参数(验证期处理和执行期调用)
     5.如何调用GP工具
 
     GP工具涉及的主要接口
     IGPFunctionFactory
     IGPFunction
  

        1.GP工具的模式
       对象创建型模式(工厂模式)
只要实现IGPFunctionFactory接口,便可以在ArcGIS软件启动时,ArcToolBox加载自  定义的GP工具。
自定义的GP工具需要实现IGPFunction接口。一旦实现该接口,ArcToolBox根据名字列出每个自定义GP工具。
2.GP工具开发中需要自己实现的方法
IGPFunctionFactory主要的三个方法
 
GetFunction(BSTR Name, IGPFunction * * Function)
// Returns the geoprocessing function object with the given name
 
GetFunctionName(BSTR Name, IGPName * * functionname) 
//Returns the geoprocessing function name object with the given name.
 
GetFunctionNames (IEnumGPName * * functionnames)
// Returns an enumeration of function name objects of all the geoprocessing functions managed by this function factory
 
IGPFunction的主要方法
get_Name(BSTR * Name)
get_ParameterInfo(IArray * * params)
get_FullName(IName * * Name)
IsLicensed(VARIANT_BOOL * IsLicensed)
Validate(IArray * paramvalues, VARIANT_BOOL updateValues, IGPEnvironmentManager * envMgr, IGPMessages * * message)
Execute(IArray * paramvalues, ITrackCancel * trackcancel, IGPEnvironmentManager * envMgr, IGPMessages * message)
 

3.关键的操作(主要涉及GPFunction中的方法)
(1)UI参数定义-----------get_ParameterInfo(IArray * * params)
 

Params是保存每一项自定义的UI参数的动态数组
 

图中m_ipParameters变量为IArrayPtr类型,直接传递给Params参数
 
       STDMETHOD(get_ParameterInfo)(IArray * * params)
       {
              if (params == NULL)
                     return E_POINTER;
              IArrayPtr ipArray=m_ipParameters;
              *params=ipArray.Detach();         
                            return S_OK;
       }
这个方法的作用是根据用户设置的各类参数来设置GP Function Tool 的UI。
如何交互的细节已经被隐藏。用户只需要设定参数类型,自动的得到参数对应的UI。
 
可直接定义的参数类型如下(具体查看ao帮助IGPDataType Interface)
 

定义一个double参数
 //变量Version------参数类型double
 

ipGPParameterEdit.CreateInstance(CLSID_GPParameter);
ipGPDataType.CreateInstance(CLSID_GPDoubleType);//参数类型       
ipGPParameterEdit->putref_DataType(ipGPDataType);
ipGPParameterEdit->put_Direction(esriGPParameterDirectionInput);//定义为输入或输出
ipGPParameterEdit->put_DisplayName(CComBSTR("Input Version of VCT "));
ipGPParameterEdit->put_Name(CComBSTR("Input Version (Just support 2.0)"));//参数名称
ipGPParameterEdit->put_ParameterType(esriGPParameterTypeRequired); //必须输入参数
m_ipParameters->Add(ipGPParameterEdit);
 

(2)参数验证--------- Validate()方法
自定义类型参数后,通过Validate方法来提示输入的参数信息是否正确。
       1.       增强客户体验
      2.       执行较简单的数据校验
      3.       反馈一系列的校验信息
 
如何进行参数验证
可以使用IGPUtilities的InternalValidate方法
m_ipGPUtilities->InternalValidate     (m_ipParameters,paramvalues,updateValues,TRUE,envMgr,&ipGPMessages);
 
 

(3)执行---------------Execute()方法
最重要的方法之一,
1.根据用户输入得到参数对象,包括Featureclass,Table等
2.结合获取参数类型做普通的AO开发
3.错误信息的友好提示
 

 If (ipFeatureClass==NULL)
        {
                  
 ipMsg.CreateInstance(CLSID_GPMessage);
 ipMsg->put_Type(esriGPMessageTypeError);               
 ipMsg->put_Description(CComBSTR("Error in Open Featureclass!"));               
 message->Add(ipMsg);                  
 return E_FAIL;
        }
      
 else
        {
       ipMsg.CreateInstance(CLSID_GPMessage);
       ipMsg->put_Type(esriGPMessageTypeInformative);
       ipMsg->put_Description(CComBSTR("/n----succeed to Open FeatureClass  !---"));
       message->Add(ipMsg);
Return S_OK;
        }
 

部署
直接注册DLL。
在ArcToolBox中添加工具到自定义的ArcToolBox目录中。
 

总结
1.GP工具适用于常用的数据处理工作
2.可以实现多个GP工具构建MoudleBuilder完成较复杂的业务流程。
 


抱歉!评论已关闭.