zoukankan      html  css  js  c++  java
  • AO创建IFeature的两种方法

     

    ArcGIS Resouce Center,ESRI介绍了两种创建Feature的方法(可以在本地的Geodatabasesdefeatureclass

    第一种是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高,详细可以参见以下网址:http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Creating_features/00010000049v000000/,这里面有详细介绍

  • 相关阅读:
    计算器类(C++&JAVA——表达式转换、运算、模板公式)
    使用/\_ 打印正三角形 C/C++
    Triangle2D类(Java)
    让键盘输入不影响界面的动态效果(C++)
    Java 7.21 游戏:豆机(C++&Java)
    Java 7.35 游戏:猜字游戏(C++&Java)
    Java 8.9 游戏:井字游戏(C++&Java)
    JAVA 8.20 游戏:四子连(Java&C++)
    简易Java文本编译器(C++)
    PAT 1089 狼人杀-简单版(20 分)(代码+测试点分析)
  • 原文地址:https://www.cnblogs.com/MyLucifer/p/1893212.html
Copyright © 2011-2022 走看看