• AE编辑矢量必须需要IWorkspaceEdit开启StartEditing吗


    平时大量读写矢量数据属性不多,偶尔操作少量矢量数据的时候,习惯不去开启编辑状态。

    今天好奇百度总结了下下什么时候应该开启编辑状态。

    一、总结

    1. 所作操作需要恢复和重做,特别是长事务操作。
    2. 防止存储失败。
    3. 连接数据库时。
    4. 开启编辑要先注册版本。

    二、疑惑

    编辑shp时需不需开启编辑?

    之前似乎遇到了和这里 StartEditing()的问题  同样的问题   

    void UpdateFeature(IFeature iF,IGeometry iGeo)
    {
    IDataset iDataset = iF.Class as IDataset;
    IWorkspaceEdit iWorkSpaEdit = iDataset.Workspace as IWorkspaceEdit;
    //iWorkSpaEdit.StartEditing(true);//为什么有了这段代码就不行了.
    iWorkSpaEdit.StartEditOperation();
    iF.Shape = iGeo;
    iF.Store();
    iWorkSpaEdit.StopEditOperation();
    //iWorkSpaEdit.StopEditing(true);

    }

    在更新shape文件的时候,发现了一个问题,iWorkSpaEdit.StartEditing(true);//使用了这个代码之后,总是 iF.Store();后马上退出,造成无法编辑.

    后来请教一位同事,他说shape不需要,因为不会存在多用户编辑的问题.

    三、参考

      参考一:   IWorkspaceEdit的一些思考

    今天终于完成VCT的转换,远远超出了预计的时间。主要是没有把几何数据显示出来,也就是没有存储下来。终其原因,没有把得到 IGeometry的feature调用store,也就是没有保存几何信息。而featureclass则会显示你创建了该feature。所以从属性上面的纪录数来看,还以为是对的。
    另外,一开始不知道,不调用IWorkspaceEdit也可以使用feature.stroe。主要还是一开始受前辈影响吧。今天仔细察看了IWorkspaceEdit的说明文件,上面说,当要编辑物体时候,最好还是要打开编辑状态,除非是个别物体编辑时候当与数据库连接的时候,就必须使用编辑状态了。里面有七条规则,可以参阅。
    另外还要说的是,如果打开了编辑状态,就一定要调用feature.store,或则调用discard。不然会有时抛出异常。我想是这样的,编辑状态,但是看IWorkspace这类名,就知道是创建了一个工作空间,当改变的信息没有被feature保存的时候,工作空间并不会自动释放存储的改变信息,而这个时候关闭工作空间和编辑状态,那么这些内存就会泄露,抛出异常,也是情理之中了

     参考二: 关于开启编辑的详细描述,七条规则可以读读      StartEditOperation与StartEdit

    这也是我们所说的事务,如果想操作能返回和重做,就必须把代码写在IWorkspaceEditStartEditing()StopEditing()函数之间,把相关的操作写在IWorkspaceEditStartEditOperation()StopEditOperation()之间。

    参考三: 这里内容丰富       IWorkspaceEdit接口

    强烈建议使用edit session在edit operation中执行insert,update或delete操作。虽然不用明确指出开始和结束一个edit operation,但这样做结果是不确定的,取决于数据库操作时的状态,甚至所做的修改不能实现而出错。基于这个原因,所有编辑操作都应在edit operation中。

    Geodatabase确保了edit session期间database中的row对象的唯一实例。地理数据库不支持嵌套事务,在SDE地理数据库中有版本的环境中编辑时一次只能打开一个事务。这就是说,在一个连接下编辑多个版本时,在另一个版本上调用StartEditing时要首先在第一个版本上调用StopEditing。在关闭第一个事务之前打开另一个事务,将返回应用程序一个oper transaction错误。在程序中调用先IsBeingEdited再调用StartEditing可以避免这个错误。使

    参考四:ArcGIS 10——版本编辑流程

    在默认情况下,ArcMap编辑会话被设置为执行版本编辑。表示只能编辑已注册为版本的数据。

    ArcMap中每个编辑会话只能编辑一个版本。因此如果地图引用了一个版本,则该版本自动打开以供编辑;如果引用了多个版本,则必须选择其中一个版本来进行编辑。



    作者:AllenRobin http://gisrsman.cnblogs.com
    版权声明:本博原创文章可以被转载,但是在未经本人许可前,不得用于任何商业用途或其他以盈利为目的的用途。如需转载,请在转载时声明作者、保留出处。本人保留对本文的一切权利。 作者:AllenRobin Blog:http://gisrsman.cnblogs.com
  • 相关阅读:
    正则表达式() [] {}区别
    JAVA int自动装箱
    Intellij Idea debug 远程部署的的tomcat项目
    TensorFlow MNIST CNN 代码
    线性代数-01-向量究竟是什么
    线性代数-线性代数的本质
    TensorFlow MNIST 入门 代码
    TensorFlow 学习可视化 TensorBoard 简易教程
    TensorFlow 函数
    TensorFlow Demo2
  • 原文地址:https://www.cnblogs.com/GISRSMAN/p/4571831.html
Copyright © 2020-2023  润新知