ArcGIS离线数据编辑【二】

 

在《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 = wsp asIWorkspaceEdit;

 

           IVersionEdit4 pVsnE = wsp asIVersionEdit4;

 

           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 = wsp asIVersionEdit;

 

                       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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值