原文地址:http://www.cnblogs.com/MyLucifer/archive/2010/12/01/1893212.html

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

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

IAoInitialize m_AoInitializa = new AoInitializeClass();

esriLicenseStatuspEsriLicenseStatus=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库时,这种方法只适用于没有注册版本的dateset或featureclass(这个仅仅是在我的程序中出现过这种问题,仅供参考),下面为代码(打开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高,详细可以参见以下网址:http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Creating_features/00010000049v000000/,这里面有详细介绍

AO创建IFeature的两种方法的更多相关文章

  1. Solr创建Core的两种方法

    创建Core的两种方法: 第一种方法: 1.打开dos命令窗口,切换目录到${solr.home}\bin,然后输入:solr create -c corename之后回车: 2.打开solr安装文件 ...

  2. JS动态创建元素(两种方法)

    前言 创建元素有两种方法 1)将需要创建的元素,以字符串的形式拼接:找到父级元素,直接对父级元素的innnerHTML进行赋值. 2)使用Document.Element对象自带的一些函数,来实现动态 ...

  3. js如何动态创建表格(两种方法)

    js如何动态创建表格(两种方法) 一.总结 一句话总结: 1.方法一:写好创建表格的html代码,将之赋值给div的innerHTML. 2.方法二.直接用创建好的table元素的方法insertRo ...

  4. Vue 创建组件的两种方法

    地址:https://blog.csdn.net/cofecode/article/details/74634301 创建组件的两种方法 1.全局注册 2.局部注册 var child=Vue.ext ...

  5. 进程和创建线程的两种方法(threading.Thread)

    进程 如QQ 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理, 网络接口的调用等,进程就是各种资源管理的集合 线程:是操作系统最小的调度单位,是一串指令的结合 进程 要操作 ...

  6. Java 创建线程的两种方法

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  7. (转)Android创建桌面快捷方式两种方法

    [IT168技术]Android在桌面上生成快捷方式有两种情况,一种是直接在桌面直接生成;一种是长按桌面,在弹出的快捷菜单中生成. 谈谈在桌面上直接生成.个人觉得这个比较爽快,既然都是快捷方式了干嘛还 ...

  8. Java创建线程的两种方法

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  9. Java线程(一)——创建线程的两种方法

    Thread 和 Runnable Java程序是通过线程执行的,线程在程序中具有独立的执行路径.当多条线程执行时,它们之间的路径可以不同,例如,一条线程可能在执行switch的一个case语句,另一 ...

随机推荐

  1. C# this指针用法

    this指针是什么: 这里有一些面向对象编程的概念需要说明:类(Class)的概念和对象(Object)的概念类是对事物概括,也是C#编码时所有代码归属的基本单位:而对象是对类的实例化,也就是C#里n ...

  2. IE下同样的$.ajax()被调用两次,只能执行一次(第一次)

    今天发现了这个问题,仅限于IE下所有浏览器包括Edge 百度了一下原来问题就在这句话:如果第二次请求与第一次请求完全相同,会直接从缓存获取. 那么就在请求时让URL变得不一样吧 $.ajax({ ty ...

  3. Java从入门到精通——基础篇之Servlet与JSP的区别

    一.基本概念 1.1 Servlet Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面.它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器 ...

  4. php中使用linux命令四大步骤

    一.PHP中调用外部命令介绍在PHP中调用外部命令,可以用,1>调用专门函数.2>反引号.3>popen()函数打开进程,三种方法来实现: 方法一:用PHP提供的专门函数(四个):P ...

  5. CPU原理

    cpu map 1.CPU的整体架构: 2.从CPU向内存 3.CPU和内存的关系图 4.CPU指令集 5.A+B 6.结果输入寄存器 7.寄存器中的临时存储,用来暂存B 8.将B传入寄存器 9.A会 ...

  6. ARPA

    ARPA是英文Advanced Research Projects Agency的缩写,代表美国国防部高级研究计划署.是美国国防部高级研究计划管理局因军事目的而建立的,开始时只连接了4台主机,这便是只 ...

  7. iOS 23 种设计模式

    设计模式主要分三个类型:创建型.结构型和行为型. 其中创建型有: 一.Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二.Abstract Factory,抽象工厂 ...

  8. adb 选择设备

    在adb中有多个设备时,可以先adb devices列举出设备,然后可以通过adb -s <设备名>  [其他参数] 对某个设备进行操作. 例如: adb -s 0123456789ABC ...

  9. Django 学习笔记之七 实现分页

    接着上篇,在上篇的基础上实现网页数据分页显示 1.打开views.py,编辑如下 #coding:utf-8from django.shortcuts import render,get_object ...

  10. Linq常用

    1.左关联查询var lst = from m in db.信息          join d in db.明细信息          on m.单号 equals d.单号 into mi     ...