ArcEngine IWorkspaceEdit Interface

ArcGIS 官方文档链接  http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/IWorkspaceEdit_Interface/002500000m5v000000/

ESRI都不对AO进行维护了,而且随着ArcGIS产品版本的不断更新,新的Lisence对于开发环境有着很苛刻的要求。所以从长远来看,AO的开发会逐渐退出历史舞台,但对于刚开始接触GIS开发的我来说,了解下还是很有必要的。

IWorkspaceEdit接口下的方法,它主要通过编辑操作和编辑会话对地理数据库进行创建、修改、删除等管理。官方帮助对其介绍的很详细,在这就不赘述了。

IWorkspaceEdit的优点:

1、在编辑过程中如果发生异常,则在编辑之前的操作将会回滚,不会保存到数据库中。(在没有执行存储命令之前,这句话有效)

2、利用UndoEditOperation 和 RedoEditOperation 方法,对已经停止编辑,但未保存的操作,进行撤销和重做操作。

3、可以进行批量的更新(修改)操作,在对sde地理数据库进行操作时,很大的发挥了性能优势。

4、允许多用户对一个地理数据库进行编辑操作,在编辑过程中,用户之间不会有影响。(保存编辑之后可能会有影响,这块具体问题具体对待)

 

下面就是主要对StartEditing,StartEditOperation,StopEditing,StopEditOperation,AbortEditOperation方法简单的说下,都是一些个人的见解。

 1 public void CreateRowInEditSession(IWorkspace workspace, ITable table)
 2 {
 3       //投射workspace到IWorkspaceEdit接口
 4       IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
 5 
 6       // 开启一个编辑会话
 7       workspaceEdit.StartEditing(false);
 8 
 9       // 开始一个编辑操作
10       workspaceEdit.StartEditOperation();
11 
12       // 创建表里的一行数据
13      IRow row = table.CreateRow();
14      row.Store();
15 
16       // 保存编辑操作
17       workspaceEdit.StopEditOperation();
18 
19      // 提交编辑操作
20      workspaceEdit.StopEditing(true);
21 }

StartEditing(bool withUndoRedo)   这里参数需要说下,如果为true,则会创建撤销和重做栈。如果不是必须的话,一般会为 false,这样在性能上会提高一些。

StopEditOperation()  只是将操作过程保存了下来,并没有将操作结果保存。只有当StopEditing(bool saveEdits) 的参数为true时才会将操作结果保存下来。

AbortEditOperation() 会中止一个操作,往往用在异常抛出之前,紧跟其后的是StopEditing(false) 。

 

当然,ArcObjects还提供了专门针对编辑的 ESRI.ArcGIS.Editor的Library,里面涉及到很多接口、类,以及他们下面的方法、属性。这些以后都回去了解下。

转载于:https://www.cnblogs.com/jasenchen/p/7172387.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C# ArcEngine中更改GDB中要素数据集的坐标系,可以按照以下步骤操作: 1. 打开要素数据集所在的GDB文件: ``` IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory(); IWorkspace workspace = workspaceFactory.OpenFromFile(@"C:\data\myGDB.gdb", 0); ``` 2. 获取要素数据集: ``` IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace; IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset("myFeatureDataset"); ``` 3. 获取要素数据集的描述对象: ``` IDataset dataset = featureDataset as IDataset; IObjectClassDescription objectClassDescription = new FeatureClassDescriptionClass(); IFields fields = null; IUID uid = objectClassDescription.CLSID; IEnumDataset enumDataset = featureDataset.Subsets; enumDataset.Reset(); IDataset subsetDataset = enumDataset.Next(); while (subsetDataset != null) { if (subsetDataset is IFeatureClass) { IFeatureClass featureClass = subsetDataset as IFeatureClass; if (featureClass.AliasName == "myFeatureClass") { fields = featureClass.Fields; uid = featureClass.ClassID; break; } } subsetDataset = enumDataset.Next(); } ``` 4. 创建新的要素类,并设置其坐标系: ``` IFeatureClassDescription newFeatureClassDescription = new FeatureClassDescriptionClass(); IObjectClassDescription newObjectClassDescription = newFeatureClassDescription as IObjectClassDescription; IFieldsEdit newFieldsEdit = new FieldsClass(); IFields newFields = fields; newFieldsEdit.Clone(ref newFields); IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit; bool hasParent = dataset.Category == "Feature Dataset"; IObjectClass newObjectClass = featureDataset.CreateFeatureClass("newFeatureClass", newFieldsEdit, uid, null, esriFeatureType.esriFTSimple, "SHAPE", ""); IDataset newDataset = newObjectClass as IDataset; IGeoDataset geoDataset = newDataset as IGeoDataset; ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference newSpatialReference = spatialReferenceFactory.CreateProjectedCoordinateSystem(3857); //设置新的坐标系 geoDataset.SpatialReference = newSpatialReference; ``` 需要注意的是,更改坐标系可能会影响到数据的准确性和精度,建议在更改前备份数据并谨慎操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值