ArcGIS离线数据编辑【二】

来源:互联网 发布:java运行class文件 编辑:程序博客网 时间:2024/06/07 20:40

 

在《ArcGIS离线数据编辑【一】》中介绍了ArcGIS的离线数据编辑技术的主要实现过程,本节将在上文的基础上介绍在离线数据编辑中的ArcSDE数据库版本的管理有关内容。

设定当前的ArcSDE数据库中除了默认的Default版本外,在Default版本基础上创建两个子版本V1V2,并将这三个版本分别赋予sdeVersion1Version2三个用户。

    分别以V1V2两个版本登录,执行相应的离线编辑,确保编辑后的结果在向其父版本提交时存在冲突。

    在提交版本过程中,首先使用IWorkspaceEdit4接口Reconcile4方法进行版本协调,监测是否存在冲突;Reconcile4方法参数要根据冲突解决方案来设定

    监测出来的冲突提供了如下三种解决方案:

(1)数据库版本替换当前版本:使用Default版本中的内容替换当前提交的版本。

(2)当前版本替换数据库版本:使用当前提交的编辑版本替换Default版本中的内容。

(3)用户自定义冲突解决方案:根据实际的情况对冲突要素实体逐个解决。

    版本提交的源代码:

   publicstaticvoid CommitVsn(IWorkspacewsp,clsPublic.ConflictCheck pCheck,AxMapControl sMapCtrl)

       {

 

           IWorkspaceEdit pWSE = wspasIWorkspaceEdit;

 

           IVersionEdit4 pVsnE = wspasIVersionEdit4;

 

           try

 

           {

 

               boolbLock = true;

 

               boolbabortIfConflict =false;

 

               boolbChildWin =false;

 

               boolbattributeCheck =true;

 

               if(pCheck == clsPublic.ConflictCheck.Current)

 

                   bChildWin = true;

 

               pWSE.StartEditing(false);

 

               if(!pWSE.IsBeingEdited())return;

 

               pWSE.StartEditOperation();

 

               if(!pVsnE.Reconcile4(“SDE.DEFAULT, bLock, babortIfConflict, bChildWin,battributeCheck))

 

               {

 

                   if(pVsnE.CanPost())

 

                   {

 

                       pVsnE.Post(“SDE.DEFAULT);

 

                       pWSE.StopEditOperation();

 

                   }

 

                   else

 

                   {

 

                       pWSE.AbortEditOperation();

 

                   }

 

                   pWSE.StopEditing(true);

 

               }

 

               else

 

               {

 

                   if(pCheck == clsPublic.ConflictCheck.UserDefine)

 

                   {

 

                       //用户自定义处理过程

 

                       SortedList<string,IConflictClass>sConflictClassLst =newSortedList<string,IConflictClass>();

 

                       IVersionEdit pVsnEdit = wspasIVersionEdit;

 

                       CheckConflictClass(pVsnEdit, sConflictClassLst);

 

                       if (sConflictClassLst.Count == 0)

 

                       {

 

                           pVsnE.Post(“SDE.DEFAULT);

 

                           pWSE.StopEditOperation();

 

                           pWSE.StopEditing(true);

 

                       }

 

                       else

 

                       {

 

                           frmManageConflict pfrm =newfrmManageConflict(pVsnEdit,sConflictClassLst,sMapCtrl);

 

                           pfrm.ShowDialog();

 

                           bool bAllManage = pfrm.IsAllManage;

 

                           pfrm.Dispose();

 

                           if (bAllManage)

 

                           {

 

                               pVsnE.Post(“SDE.DEFAULT);

 

                               pWSE.StopEditOperation();

 

                               pWSE.StopEditing(true);

 

                           }

 

                           else

 

                           {

 

                               pWSE.AbortEditOperation();

 

                               pWSE.StopEditing(false);

 

                           }

 

                       }

 

                   }

 

                   elseif (pCheck ==clsPublic.ConflictCheck.Current)

 

                   {

 

                       pVsnE.Post(“SDE.DEFAULT);

 

                       pWSE.StopEditOperation();

 

                       pWSE.StopEditing(true);

 

                   }

 

                   elseif (pCheck ==clsPublic.ConflictCheck.DataBase)

 

                   {

 

                       pWSE.StopEditOperation();

 

                       pWSE.StopEditing(true);

 

                   }                   

 

               }

 

               MessageBox.Show(“版本提交完毕!“,“提示“, MessageBoxButtons.OK,MessageBoxIcon.Information);

 

           }

 

           catch (Exception pEr)

 

           {

 

               MessageBox.Show(pEr.Message,“提示“,MessageBoxButtons.OK,MessageBoxIcon.Exclamation);

 

               pWSE.AbortEditOperation();

 

               pWSE.StopEditing(false);

 

           }

 

        }

 

0 0