ArcEngine建立IFeature的三種方法

2021-08-10 18:48:41 字數 2381 閱讀 4866

在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)

feacursor.insertfeature(feabuffer);

經過一位網友的幫助,以上的文章有不足的地方,就是ifeatureclass.createfeaturebuffer在featureclass中插入一條記錄,在本文中feacursor.insertfeature(feabuffer)之後加上feacrusor.fulsh()將建立的記錄輸入到資料庫中,而且在面對大資料量插入的時候用ifeatureclass.createfeaturebuffer()效率比ifeatureclass.createfeature高,詳細可以參見以下**:link,這裡面有詳細介紹.

三、使用ifeatureclasswriter介面

public void drawpoint(ilayer player,double x,double y)

ArcEngine建立IElement簡單例子

it gis終結者原文arcengine建立ielement簡單例子 以下幾個函式功能主要是向地圖中新增ielement,一共四個函式 getcolor,create linesymbol,create fillsymbol,addcreateelement 功能函式 addcreateelemen...

Arcengine建立記憶體工作空間幫助類

建立記憶體要素類 public class mymemoryworkspace idisposable 要素類集合 private readonly dictionary featureclasses public mymemoryworkspace 建立記憶體工作空間 記憶體工作空間名稱 publ...

arcEngine 路徑規劃

作者 瘋狂的烏龜 2015 5 26 arcengine 10.1 功能 路徑規劃 using system using system.collections.generic using system.linq using system.text using esri.arcgis.geodatab...