ArcGIS 下的GP function Tool開發

來源:互聯網
上載者:User

       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完成較複雜的商務程序。 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.