AO创建IFeature的两种方法

简介:

原文 AO创建IFeature的两种方法

 

在ArcGIS Resouce Center中,ESRI介绍了两种创建Feature的方法(可以在本地的Geodatabase和sde的featureclass

第一种是IFeatureClass.CreateFeature,在这种方法最后需要加上IFeature.Store去提交创建的要素,本人认为这种方法相比下面一种方法更好些,因为Store的方法能够直接提交修改并在数据库中看到,不会因为其他复杂的操作影响数据入库。下面是在SDE库中创建IFeature的代码给大家参考一下:

复制代码
IAoInitialize m_AoInitializa = new AoInitializeClass();
esriLicenseStatus pEsriLicenseStatus=m_AoInitializa.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);

IPropertySet propSet = new PropertySetClass();
propSet.SetProperty("SERVER", "192.168.1.143");
propSet.SetProperty("INSTANCE", "5151");
propSet.SetProperty("USER", "myTestUser");
propSet.SetProperty("PASSWORD", "123456");
propSet.SetProperty("VERSION", "SDE.DEFAULT");

IWorkspaceFactory pwf = new SdeWorkspaceFactoryClass();
IFeatureWorkspace pFeatureWorkspace= (IFeatureWorkspace)(pwf.Open(propSet, 0)) ;
IFeatureClassfeaClass=pFeatureWorkspace.OpenFeatureClass("要打开的Featureclass名字");
 
IFeature feature = feaClass.CreateFeature();
feature.Shape=IGeometry;//(这里的IGeometry可以是IPolygon,IPolyline,IPoint)

int fieldindex = feature.Fields.FindField("字段名");
feature.set_Value(fieldindex, "字段值");
feature.Store();
 
复制代码

 


第二种方法为IFeatureClass.CreateFeatureBuffer,这个方法采用插入游标(Insert Cursors)的方法,在创建简单数据的时候效率会比第一种方法更快些,但是在ESRI的官网上提到使用IFeatureCursor.InsertFeature方法时,复杂的操作和各种事件的触发不能够保证。根据自己实际操作的心得,有时候会出现数据创建延时,明明代码已经通过了,但数据库中的数据要过很久才能显示出来,甚至有时候都显示不出来。这个客户肯定接受不了这种没有保证的数据创建。还有一点,在使用SDE库时,这种方法只适用于没有注册版本的datesetfeatureclass(这个仅仅是在我的程序中出现过这种问题,仅供参考),下面为代码(打开SDE的部分就不重复了)

复制代码
IFeatureCursor feaCursor = feaClass.Insert(true);
IFeatureBuffer feaBuffer = feaClass.CreateFeatureBuffer();
feaBuffer.Shape = IGeometry;//(这里的IGeometry可以是IPolygon,IPolyline,IPoint)

int fieldindex = feaBuffer.Fields.FindField("字段名");
if (fieldindex >= 0)
{                              
      feaBuffer.set_Value(fieldindex, "字段值" );
}

feaCursor.InsertFeature(feaBuffer);
复制代码

经过一位网友的帮助,以上的文章有不足的地方,就是IFeatureClass.CreateFeatureBuffer在featureclass中插入一条记录,在本文中feaCursor.InsertFeature(feaBuffer)之后加上feaCrusor.Fulsh()将创建的记录输入到数据库中,而且在面对大数据量插入的时候用IFeatureClass.CreateFeatureBuffer()效率比IFeatureClass.CreateFeature高,详细可以参见以下网址:LINK,这里面有详细介绍.

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。


  本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5905417.html,如需转载请自行联系原作者



相关文章
|
6月前
|
Java API
使用ASM为一个类增加属性工具类
使用ASM为一个类增加属性工具类
56 0
|
7月前
|
Serverless 调度 数据安全/隐私保护
快速创建函数
本文介绍如何在函数计算控制台快速开发一个简单的Serverless Hello World函数
47 1
|
7月前
|
JavaScript
为什么data属性是一个函数而不是一个对象?
为什么data属性是一个函数而不是一个对象?
90 1
|
前端开发 Java API
深度解读JAVA中的DO、BO、VO、DTO、AO、PO、DO、AO各自的含义
在刚接触一些比较规范代码的时候就遇到了这些,用于描述对象的不同类型,每个模块都是相互依赖的,所以在这里进行一个详细系统的总结。
1211 0
PADS新建封装
前面我们已经讲解过如何新建一个电阻元器件,那么接下来我们就要新建一个该电阻元器件在现实世界中的映射——封装(Footprint)。打开PADS Layout,执行如下步骤: 1、打开库管理器,选中新建的库ubug_lib,点击“封装”按钮后“新建”按钮变为可点击,如下图所示:
477 0
Lexicography——CF1267L构造题
Lucy likes letters. She studied the definition of the lexicographical order at school and plays with it. At first, she tried to construct the lexicographically smallest word out of given letters. It was so easy! Then she tried to build multiple words and minimize one of them. This was much harder!
269 0