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,這里面有詳細介紹.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM