ArcEngine创建IFeature的三种方法

更新时间:2023-07-31 20:20:59 阅读: 评论:0

ArcEngine创建IFeature的三种⽅法
在ArcGIS Resouce Center中,ESRI介绍了两种创建Feature的⽅法(可以在本地的Geodataba和sde的featureclass)
⼀、
IFeatureClass.CreateFeature,在这种⽅法最后需要加上IFeature.Store去提交创建的要素,本⼈认为这种⽅法相⽐下⾯⼀种⽅法更好些,因为Store的⽅法能够直接提交修改并在数据库中看到,不会因为其他复杂的操作影响数据⼊库。下⾯是在SDE库中创建IFeature的代码给⼤家参考⼀下:
IAoInitialize m_AoInitializa = new AoInitializeClass();
esriLicenStatus pEsriLicenStatus=m_AoInitializa.Initialize(esriLicenProductCode.esriLicenProductCodeEngineGeoDB);
IPropertySet propSet = new PropertySetClass();
propSet.SetProperty("SERVER", "192.168.1.143");
propSet.SetProperty("INSTANCE", "5151");
propSet.SetProperty("USER", "myTestUr");
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.t_Value(fieldindex, "字段值");
feature.Store();
⼆、
IFeatureClass.CreateFeatureBuffer,这个⽅法采⽤插⼊游标(Inrt Cursors)的⽅法,在创建简单数据的时候效率会⽐第⼀种⽅法更快些,但是在ESRI的官⽹上提到使⽤IFeatureCursor.InrtFeature⽅法时,复杂的操作和各种事件的触发不能够保证。根据⾃⼰实际操作的⼼得,有时候会出现数据创建延时,明明代码已经通过了,但数据库中的数据要过很久才能显⽰出来,甚⾄有时候都显⽰不出来。这个客户肯定接受不了这种没有保证的数据创建。还有⼀点,在使⽤SDE库时,这种⽅法只适⽤于没有注册版本的datet或featureclass(这个仅仅是在我的程序中出现过这种问题,仅供参考),下⾯为代码(打开SDE的部分就不重复了)
山西网上税务局
IFeatureCursor feaCursor = feaClass.Inrt(true);
惆帐
西红柿功效和作用IFeatureBuffer feaBuffer = feaClass.CreateFeatureBuffer();
牛棒骨的做法黄国梁>形容事物多的成语feaBuffer.Shape = IGeometry;//(这⾥的IGeometry可以是IPolygon,IPolyline,IPoint)
int fieldindex = feaBuffer.Fields.FindField("字段名");
工作总结和计划if (fieldindex >= 0)
{
feaBuffer.t_Value(fieldindex, "字段值" );
}
feaCursor.InrtFeature(feaBuffer);
经过⼀位⽹友的帮助,以上的⽂章有不⾜的地⽅,就是IFeatureClass.CreateFeatureBuffer在featureclass中插⼊⼀条记录,在本⽂中feaCursor.InrtFeature(feaBuffer)之后加上feaCrusor.Fulsh()将创建的记录输⼊到数据库中,⽽且在⾯对⼤数据量插⼊的时候
⽤IFeatureClass.CreateFeatureBuffer()效率⽐IFeatureClass.CreateFeature⾼,详细可以参见以下⽹址:,这⾥⾯有详细介绍.
三、
使⽤IFeatureClassWriter接⼝
public void DrawPoint(ILayer pLayer,double X,double Y)
{
IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;            IFeatureClassWrite fr = pFeatureClass as IFeatureClassWrite;            IFeature pFeature;
IPoint pPoint;狗可以吃猫粮吗
//pWorkspaceEdit.StartEditing(true);
pWorkspaceEdit.StartEditOperation();
pFeature = pFeatureClass.CreateFeature();
pPoint = new PointClass();
pPoint.PutCoords(X, Y);
pFeature.Shape = pPoint;
fr.WriteFeature(pFeature);
pWorkspaceEdit.StopEditOperation();
}

本文发布于:2023-07-31 20:20:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1125060.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:创建   数据   没有   数据库   保证   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图