使用ArcObjects或者ArcEngine對ArcGIS要素類重命名

將要素類轉IDataset再進行重命名,需要注意可能存在要素類被鎖和同名情況,因此要加CanRename判斷和catch。
需要注意以下兩點:
1、對SDE要素類進行重命名需要較高的開發權限,經過測試似乎只有將License綁定爲Advanced級別開發License【注:測試使用ArcGIS10.1系列產品,使用License控件進行驗證,ArcSDE for Oracle 11g】。如果沒有License驗證綁定的情況下對SDE要素類進行重命名,儘管沒有ArcMap等等其他應用程序Lock要素類,但是CanRename都會返回false。
2、使用接口IDataset進行Rename,僅僅是重命名Name,而AliasName需要通過IClassSchemaEdit進行修改要素類別名。也就是說用戶可以自由控制要素類的名稱和別名,但是如果不是業務的特殊要求,不建議隨意修改要素類名稱。
以下修改要素類名稱、別名代碼

/// <summary>
        /// 修改要素類名稱(不修改別名)
        /// </summary> 
        ///<param name="newName">新要素類名</param>
        ///<param name="pFeatureClass">原要素類</param>
        private bool RenameFeatureClassName(string newName, IFeatureClass pFeatureClass)
        {
            IDataset ds = pFeatureClass as IDataset;
            bool isRename = false;
            try
            {    
                if (ds.CanRename())
                {
                    ds.Rename(newName);
                    isRename = true;
                }
            }
            catch
            {
                isRename = false;
            }

            return isRename;
        }

/*****************************************************************************/
  /// <summary>
        /// 修改要素類名稱以及別名
        /// </summary> 
        ///<param name="newName">新要素類名</param>
        ///<param name="newAliasName">新要素類別名</param>
        ///<param name="pFeatureClass">原要素類</param>
        private bool RenameFeatureClassName(string newName, string newAliasName, IFeatureClass pFeatureClass)
        {
            IDataset ds = pFeatureClass as IDataset;
            bool isRename = false;
            try
            {
                IClassSchemaEdit2 pClassSchemaEdit2 = pFeatureClass as IClassSchemaEdit2;
                pClassSchemaEdit2.AlterAliasName(newAliasName);
                if (ds.CanRename())
                {
                    ds.Rename(newName);
                    isRename = true;
                }
            }
            catch
            {
                isRename = false;
            }

            return isRename;
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章