ArcEngine数据编辑操作--添加点

添加地物

什么是地物,这是 GIS的基本概念,我在这不想多说,我只想说明一点,地物可以表现在地图上,如房子、铁路、水管等等。我们把房子的总称称为一个地物类,在AE中对应一个地物类(IFeatureClass),一个地物类在地图上表示为一个地物层(IFeatureLayer),单独的一栋房子或一条管道我们称为地物(IFeature),Arcgis中一类地物只能放在一个层,通过图层的叠加组成一幅地图。

熟悉面向对象的编程语言的人都知道,其实上边的地物类,地物的概念就是类和实体的概念。房子、铁路、水管等是一类地物的抽象,而具体的某一房子就是对象了。大家了解了这一点。接下来的开发就容易理解一些了。当然,还有一些其他的概念也必须了解一下:如长事务、短事务、编辑空间等。请大家查找一些相关资料,了解这方面的内容。

我们先开始最基本的编辑功能:添加点线面的操作。它包括输入添加点线面和通过鼠标拖动添加点线面。下边讨论一下添加点线面的基本的实现方法:

添加点

我们可以有多种方法添加点,但基本的思路一样,只是有少量的接口有变化。下边是通过FeatrueClassCreateFeature()函数添加地物。

public void AddPointByStore()

{

//得到要添加地物的图层

IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;

//定义一个地物类,把要编辑的图层转化为定义的地物类

IFeatureClass fc = l.FeatureClass ;

//先定义一个编辑的工作空间,然后把转化为数据集,最后转化为编辑工作空间,

IWorkspaceEdit w = (fc as IDataset).Workspace as IWorkspaceEdit;

IFeature f ;

IPoint p;

//开始事务操作

w.StartEditing (false);

//开始编辑

w.StartEditOperation() ;

for (int i = 0 ; i< 100 ; i++ )

{

//创建一个地物

f= fc.CreateFeature();

p = new PointClass();

//设置点的坐标

p.PutCoords (i,i);

//确定图形类型

f.Shape = p;

//保存地物

f.Store();

}

//结束编辑

w.StopEditOperation();

//结束事务操作

w.StopEditing(true);

}

上边的代码能添加点地物,但不能作为最终的代码使用,细心的人会看到。这段代码只是把第一层加进来,然后在第一层上边添加点地物,如果第一层不是点层,该怎么办,那就要判断了。怎么判断我们以后再说。通过上边的代码,我们已经清楚地了解到,编辑地物的基本框架,这也是我们所说的事务,如果想操作能返回和重做,就必须把代码写在IWorkspaceEditStartEditing()StopEditing()函数之间,把相关的操作写在IWorkspaceEditStartEditOperation()StopEditOperation()之间。并且操作是利用IWorkspaceEdit接口完成的,所以要仔细理会IWorkspaceEdit接口的用处,如何工作空间都可以转化为IWorkspaceEdit的对象,当转化为IWorkspaceEdit定义的对象后,我们定义一个IFeature的对象,然后利用IFeatureClassCreateFeature()函数创建一个地物,并赋值给定义的IFeature对象。接着设置IFeature对象的一些属性,如:坐标值,坐标系,地物类型等,最后是调用IFeature对象的Store()保存添加的地物。

上边的方法可以添加点地物,接着看看下边的代码。看有什么不同:

public void AddPointByWrite()

{

IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;

IFeatureClass fc = l.FeatureClass ;

IFeatureClassWrite fr = fc as IFeatureClassWrite ;

IWorkspaceEdit w = (fc as IDataset).Workspace as IWorkspaceEdit;

IFeature f ;

IPoint p;

w.StartEditing (true);

w.StartEditOperation() ;

for (int i = 0 ; i< 100 ; i++ )

{

f= fc.CreateFeature();

p = new PointClass();

p.PutCoords (i,i);

f.Shape = p;

fr.WriteFeature (f);

}

w.StopEditOperation();

w.StopEditing(true);

}

代码中用红色标记的两行就是不同的代码,其实他就是保存方式的不同而已。在这利用了IFeatureClassWrite 接口来保存数据。再看看下边的代码:

public void AddPointByBuffer()

{

IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;

IFeatureClass fc = l.FeatureClass ;

IWorkspaceEdit w = (fc as IDataset).Workspace as IWorkspaceEdit;

w.StartEditing (true);

w.StartEditOperation() ;

IPoint p;

IFeatureBuffer f;

IFeatureCursor cur = fc.Insert(true);

for (int i = 0 ; i< 100 ; i++ )

{

f= fc.CreateFeatureBuffer();

p = new PointClass();

p.PutCoords (i,i);

f.Shape = p;

cur.InsertFeature (f);

}

w.StopEditOperation();

w.StopEditing(true);

}

其实不同的地方就两句代码,红色表示的。在这没有再定义地物接口了(IFeature),而是使用IFeatureBuffer 接口,保存的时候是使用InsertFeature()保存,这对大数据量处理的非常有好处。他是先把要添加的保存到缓冲区里。最后一次性保存。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcEngine二次开发中,可以使用StartOperation和StopOperation方法来进行空间数据编辑操作。StartOperation方法用于开始一个编辑操作,而StopOperation方法用于完成编辑操作并将其添加操作堆栈的顶部,以便实现撤消和重做功能。 以下是一个示例代码,演示如何使用StartOperation和StopOperation进行空间数据编辑: ```python # 导入ArcEngine相关模块 import arcpy from arcpy import editing # 获取编辑工作空间 workspace = r"C:\data\workspace.gdb" # 创建编辑工作空间 editWorkspace = arcpy.da.Editor(workspace) try: # 启动编辑操作 editWorkspace.startEditing(False, True) # 启动操作 editWorkspace.startOperation() # 进行空间数据编辑操作 # ... # 完成编辑操作 editWorkspace.stopOperation() # 停止编辑 editWorkspace.stopEditing(True) except Exception as e: # 发生错误时,中止编辑操作 editWorkspace.abortOperation() editWorkspace.stopEditing(False) print("编辑操作失败:", str(e)) ``` 在上述代码中,我们首先导入了ArcEngine相关模块,并指定了编辑工作空间。然后,我们创建了一个编辑工作空间对象,并使用startEditing方法启动编辑操作。接着,我们使用startOperation方法启动操作,并在其中进行空间数据编辑操作。最后,我们使用stopOperation方法完成编辑操作,并使用stopEditing方法停止编辑。 需要注意的是,在进行空间数据编辑操作时,应该进行适当的错误处理,并在发生错误时使用abortOperation方法中止编辑操作,以确保数据的完整性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值