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完成较复杂的业务流程。
来自:http://blog.csdn.net/jx1228/archive/2008/04/03/2247898.aspx
其他语言实现方法类似