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,如需转载请自行联系原作者



相关文章
|
2月前
|
Serverless 调度 数据安全/隐私保护
快速创建函数
本文介绍如何在函数计算控制台快速开发一个简单的Serverless Hello World函数
24 1
|
3月前
|
编解码
ABB AO02 SD系列输入/输出控制器
ABB AO02 SD系列输入/输出控制器
|
4月前
|
JavaScript
为什么data属性是一个函数而不是一个对象?
为什么data属性是一个函数而不是一个对象?
28 1
|
8月前
|
前端开发 Java API
深度解读JAVA中的DO、BO、VO、DTO、AO、PO、DO、AO各自的含义
在刚接触一些比较规范代码的时候就遇到了这些,用于描述对象的不同类型,每个模块都是相互依赖的,所以在这里进行一个详细系统的总结。
315 0
lodash创建一个新的对象,对象的属性名是和传入对象一样,值则在函数中修改
lodash创建一个新的对象,对象的属性名是和传入对象一样,值则在函数中修改
86 0
|
Java 编译器
创建一个对象的时候
创建一个对象的时候
57 0
|
缓存 安全 Java
仅且仅创建一次对象
此篇算是对《voliatile,synchronized,cas》理论的一种实践
117 0
|
Oracle 关系型数据库 MySQL
OB有问必答 | 参数和变量的区别是什么?
OceanBase 的参数和变量设置方式常让初学者很迷惘,实际掌握其实并不难,下面就为大家展开介绍
第188天:extend拷贝创建对象的原理
一、拷贝创建对象的原理 1 //拷贝创建对象核心代码 2 function extend(target,source) { 3 //遍历对象 4 for(var i in source){ 5 target[i] = so...
1106 0