在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庫時,這種方法只適用於沒有注冊版本的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高,詳細可以參見以下網址:LINK,這里面有詳細介紹.
