ArcObject c# cad导入sde

环境说明

使用Arcgis Engine 10.3.0.0 把本地cad文件导入到sql矢量数据库(修改表中字段值)  demo

​连接sde配置

            IPropertySet pPropertySet = new PropertySet();

            pPropertySet.SetProperty("SERVER", "0.0.0.0");
            pPropertySet.SetProperty("INSTANCE", "sde:sqlserver:0.0.0.0");
            pPropertySet.SetProperty("DATABASE", "");
            pPropertySet.SetProperty("USER", "");
            pPropertySet.SetProperty("PASSWORD", "")

            IWorkspaceFactory2 workspaceFactory = new SdeWorkspaceFactoryClass();

            IWorkspace sdeWorkspace = workspaceFactory.Open(pPropertySet, 0);

 

打开本地cad文件

注意先打开工作空间目录,在打开具体的文件。

            String nameOfPath = @"E:\data\cad\";
            String nameOfCADFile = "demo.DWG";
            //Set the Workspace Factory.
            IWorkspaceFactory pWorkspaceFact = new CadWorkspaceFactory();
            //Open the workspace. 
            IWorkspace pWorkspace = pWorkspaceFact.OpenFromFile(nameOfPath, 0);

导入数据(修改表中字段值)

1.IFeatureClass.CreateFeatureBuffer配合insert cursor使用。不会触发事件,该方法常常用来一次性插入大量要素,比第一种方法效率高很多。此外,IFeatureClass.Insert(bool useBuffering)方法中参数useBuffering建议总将其设为true,这样数据会先缓冲在客户端,然后执行Flush时批量写入,以提升效率。

2.这里提一下,该方法中涉及到cursor的释放,有两种方法释放游标:
a, 直接使用ComReleaser.ReleaseCOMObject(cursor); 或者Marshal.FinalReleaseComObject(cursor);

b, 使用using(){ }方式,如下:

(执行完using后会自动释放insertCursor和featureBuffer,可以避免程序比较复杂时不确定在哪释放或者忘记释放的情况,是比较优秀的编程方式,推荐使用。)

插入数据参考:https://blog.csdn.net/xinying180/article/details/56486624

      IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;

      IFeatureWorkspace sdeFeatureWorkspace = (IFeatureWorkspace)sdeWorkspace;

//选择cad中类型为点的featureClass
FeatureClass pFeatClass = pFeatureWorkspace.OpenFeatureClass(System.String.Concat(nameOfCADFile, ":Point"));


            IQueryFilter pFilter = new QueryFilter();
            string cadLayer = "图层名称";
            string where = string.Format("Layer='{0}'", cadLayer);
            pFilter.WhereClause = where;
//记录总数
            int count = pFeatClass.FeatureCount(pFilter);
            IFeatureCursor cadFeatureCursor = pFeatClass.Search(pFilter, true);

            IFeature pCadFeature;

//打开sde featureClass

            IFeatureClass featureClass = sdeFeatureWorkspace.OpenFeatureClass("要素名称");


//导入
            using (ComReleaser comReleaser = new ComReleaser())
            {
                IFeatureCursor featureCursor = featureClass.Insert(true);
                while ((pCadFeature = cadFeatureCursor.NextFeature()) != null)
                {
                    IGeometry pGeometry = pCadFeature.Shape as IGeometry;
                    IZAware pLineZ = pGeometry as IZAware;
                    pLineZ.ZAware = false;
                    IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
                    featureBuffer.Shape = pGeometry;
//修改表字段值
                    //int findex = featureClass.FindField("test"); 
                    //featureBuffer.set_Value(findex, "test");

                    featureCursor.InsertFeature(featureBuffer);
                }

                comReleaser.ManageLifetime(featureCursor);
            }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值