1. ArcEngine9.x遷至ArcEngine10.x
相信很多同學都知道,在ArcEngine9.x下正常編譯的代碼到ArcEngine10.x會報錯:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components.
解決方法是添加Version引用,在InitializeComponent之前綁定桌面產品:
Using ESRI.ArcGIS; ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
這稱之為Runtime綁定,即任何ArcObjects代碼(包括許可初始化代碼)被執行之前,指定相稱的ArcGIS產品——ArcGIS Desktop或者ArcGIS Engine應用程序。綁定的ProductCode有ArcReader、Engine、Desktop、EngineOrDesktop、Server五種類型,一般建議是EngineOrDesktop。
2. ArcGIS for Desktop產品級別
我們必須了解Desktop產品級別,以便確定調用功能所涉及的許可權限。在ArcGIS9.x中分為ArcInfo/ArcEditor /ArcView/ ArcReader等新產品,而ArcGIS10.x則換了一個方法,分為三大級別的新產品。
ArcGIS for Desktop 基礎版:提供了綜合性的數據使用、制圖、分析,以及簡單的數據編輯和空間處理工具。
ArcGIS for Desktop 標准版:在 ArcGIS for Desktop 基礎版的功能基礎上,增加了對 Shapefile 和 Geodatabase 的高級編輯和管理功能。
ArcGIS for Desktop 高級版:是一個旗艦式的 GIS 桌面產品,在 ArcGIS for Desktop標准版的基礎上,擴展了復雜的 GIS 分析功能和豐富的空間處理工具。
另外,ArcGIS 還提供了兩個免費的桌面端產品。ArcReader,免費的地圖數據(PMF)瀏覽、查詢以及打印出版工具;ArcGIS Explorer Desktop:相比 ArcReader 更強大,支持瀏覽本地數據和 ArcGIS for Server 提供的服務,支持數據的查詢和分析任務,具有開放性和互操作能力。
雖然大家都是用的盜版,擁有最高級別的新產品,但不小心則會在開發過程中遇到權限問題。
3. 初始化許可的兩種方法
直接式:編寫AoInitialize代碼,一般來說,可以使用ArcGIS許可初始化向導。對於開發者來說,可以使用Visual Studio集成開發環境下的ESRI工具,通過Add ArcGIS License Checking命令可以調用ArcGIS許可初始化向導。
間接式:在Windows窗體上放置一個LicenseControl控件。
示例:(ArcEngine10.1環境下)
private static LicenseInitializer m_AOLicenseInitializer = new ArcEngineTest.LicenseInitializer(); /// <summary> /// 應用程序的主入口點。 /// </summary> [STAThread] static void Main() { //綁定Runtime if (!RuntimeManager.Bind(ESRI.ArcGIS.Engine)) { if (!ESRI.ArcGIS.RuntimeManager.Bind(ProductCode.Desktop)) { MessageBox.Show("不能綁定ArcGIS runtime,應用程序即將關閉."); return; } } //初始化產品代碼和擴展代碼 m_AOLicenseInitializer.InitializeApplication( new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeStandard }, new esriLicenseExtensionCode[] { esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst, esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork, esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst, esriLicenseExtensionCode.esriLicenseExtensionCodeDataInteroperability }); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Main()); //關閉程序后關閉許可初始化 m_AOLicenseInitializer.ShutdownApplication(); }
(1) AreEngine許可類型一旦執行后,在程序運行期間無法進行修改;
(2) 使用擴展模塊中的功能時,不但要初始化ProductCode,還要初始化ExtensionCode;
(3) 使用GP調用了spatialanaly中的工具,報錯:the tool is not licensed,是因沒許可初始化是沒有初始化ExtensionCode。