arcgis engine删除数据及数据导入速度较快的方法

最近利用arcgis engine开发一款用于审核软件,需要先进行图形库的建立,还有些原始数据经过一些处理形成需要的数据。

  代码实现的过程中发现数据进行过处理以后,数据量比较大,几万条的Feature一条条写入sde库速度让人无法忍受。然后在网上查了不少资料,发现多数类似于shape导入sde的时候都是用游标一条条插入的。但是也找到了一个方法,虽然也需要一些时间,但是总体比游标快太多了,记录在此。

 1 /// <summary>
 2         /// 图层导入数据集
 3         /// </summary>
 4         /// <param name="lName">源图层的IName</param>
 5         /// <param name="inWorkspace">源图层所在的工作空间</param>
 6         /// <param name="featureDataset">目标数据集</param>
 7         /// <returns>返回导入成功(true),失败(false)</returns>
 8         private bool ImportLayerIntoDataset(IName lName, IWorkspace inWorkspace, IFeatureDataset featureDataset, string strOutFeatureName)
 9         {
10             try
11             {
12                 IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();
13                 IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;
14
15                 IFeatureClassName outFeatureClassName = new FeatureClassNameClass();
16                 IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;
17                 IDataset outWorkspaceDataset = (IDataset)featureDataset.Workspace;
18                 IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;
19                 outDatasetName.WorkspaceName = outWorkspaceName;
20                 outDatasetName.Name = "SDE." + strOutFeatureName;
21
22                 IFieldChecker fieldChecker = new FieldCheckerClass();
23                 IFields outFeatureClassFields;
24                 IFields inFeatureClassFields = inFeatureClass.Fields;
25                 IEnumFieldError enumFieldError;
26                 fieldChecker.InputWorkspace = inWorkspace;
27                 fieldChecker.ValidateWorkspace = featureDataset.Workspace;
28
29                 fieldChecker.Validate(inFeatureClassFields, out enumFieldError, out outFeatureClassFields);
30                 IField geometryField;
31                 geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));
32                 IGeometryDef geometryDef = geometryField.GeometryDef;
33                 IQueryFilter qf = new QueryFilterClass();
34                 qf.WhereClause = "";
35                 IFeatureDataConverter fctofc = new FeatureDataConverterClass();
36                 IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName, qf, (IFeatureDatasetName)featureDataset.FullName, outFeatureClassName, geometryDef, outFeatureClassFields, "", 1000, 0);
37
38                 return true;
39             }
40             catch (Exception ex)
41             {
42                 MessageBox.Show(ex.Message);
43                 return false;
44             }
45         } 

图层导入数据集

ConvertFeatureClass在文档中的解释为:Converts a featureClass to a Personal Geodatabase/Geodatabase featureClass.

1 IDataset pDataset = pFeatureClass as IDataset;
2 IName pName = pDataset.FullName;
3
4 IWorkspace pWorkspace = pDataset.Workspace;

获取上述函数的参数

通过IFeatureClass上述方式即可获得函数的参数。

另:由于做删除数据的时候,脑子秀逗了下,忘记解锁数据了,导致删除后图形能在图上显示,但是数据表里没有数据了。当时查找了各种删除数据的方式,主要也是游标的方式一条条的删除。但是看到有人介绍了好几种删除的方式,只记下了一种,也算是删除速度最快的一种。

1 string strSQL="delete from " + pFeatureClass.AliasName + " where XMBH = ‘" + strProjectID + "‘";
2 IDataset pDataset = pFeatureClass as IDataset;
3 pDataset.Workspace.ExecuteSQL(strSQL);

批量删除数据

-------记录GIS学习的小心得

arcgis engine删除数据及数据导入速度较快的方法

时间: 2024-08-26 09:11:11

arcgis engine删除数据及数据导入速度较快的方法的相关文章

数据库的导出 与导入 速度相当快的方法

Microsoft Windows [版本 10.0.10586](c) 2015 Microsoft Corporation.保留所有权利. C:\WINDOWS\system32> sqlplus sys/[email protected] as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期五 8月 26 10:59:42 2016 Copyright (c) 1982, 2010, Oracle. All rights reser

ArcGIS Engine中加载数据

ArcGIS Engine中加载数据 http://blog.csdn.net/gisstar/article/details/4206822 分类: AE开发积累2009-05-21 16:491118人阅读评论(0)收藏举报 database数据库serveruser工作class 1.加载Shapefile数据 1 IWorkspaceFactory pWorkspaceFactory;2 IFeatureWorkspace pFeatureWorkspace;3 IFeatureLaye

arcgis AE删除SDE featureClass数据

//删除SDE图层         public static bool DeleteSDELayer(ESRI.ArcGIS.Geodatabase.IWorkspace m_pWorkspace, string SDEDSname )         {             try             {                 ESRI.ArcGIS.Geodatabase.IEnumDatasetName pEnumDsName = m_pWorkspace.get_Da

并行提高oracle数据导入速度

近期有一个行业项目,需要把较大数据从文件中导入到oracle. 我们使用oracle的sqlldr导入数据,当数据量较大时导入的时间过长:导入一张8千万条记录的表需要2.5个小时,太慢了. 后来采用了sqlldr并行导入的方式将时间缩短到了0.8小时,这里记录一下使用过程. 思路 将要导入的数据文件拆分成10份,然后使用多任务并行执行对应数据份数的sqlldr命令(当然也就需要同样数量的control文件),多个客户端同时往数据库中导入数据. 这里有两点比较重要,1.如何自动生成若干条sqlld

BULK INSERT如何将大量数据高效地导入SQL Server

转载自:http://database.51cto.com/art/201108/282631.htm BULK INSERT如何将大量数据高效地导入SQL Server 本文我们详细介绍了BULK INSERT将大量数据高效地导入SQL Server数据库的方法,希望本次的介绍能够对您有所帮助. AD:WOT2014课程推荐:实战MSA:用开源软件搭建微服务系统 在实际的工作需要中,我们有时候需将大量的数据导入到数据库中.这时候我们不得不考虑的就是效率问题.本文我们就介绍了一种将大量数据高效地

ArcGIS Engine中数据的加载 (转)

1.加载Shapefile数据 1 IWorkspaceFactory pWorkspaceFactory; 2 IFeatureWorkspace pFeatureWorkspace; 3 IFeatureLayer pFeatureLayer; 4 5 //获取当前路径和文件名 6 OpenFileDialog dlg = new OpenFileDialog(); 7 dlg.Filter = "Shape(*.shp)|*.shp|All Files(*.*)|*.*"; 8

SQL SERVER几种数据迁移/导出导入的实践

SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel.数据库与文本文件.数据库与数据库之间的导出导入). (一)数据库与Excel 方法1: 使用数据库客户端(SSMS)的界面工具.右键选择要导出数据的数据库,选择“任务”——“导出数据”,下图1,按照向导一步一步操作即可.而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等.当然在可以在向导进行修改.需要注意的是如果标题不是

使用ArcGIS Server发布我们的数据

原文:使用ArcGIS Server发布我们的数据 引言 上一篇我们已经安装好了ArcGIS体系的服务软件,这一篇将介绍如何把我们自己的数据通过ArcGIS Server发布出去,并且能够通过Web页面进行显示和编辑. 发布数据服务 在进行WebGIS开发中,地图显示的内容可以分成两类:一类是底图,或者是矢量的世界地图.中国地图.某个地区的底图:另一类就是业务图,对于用于遥感数据发布的WebGIS应用就是遥感影像的边框图层,对于电力作业的就是杆塔.线路图层,对于水利作业的就是河流.居民地图层.

db2删除表中数据

DB2数据库系统建表后,难免会有将表中数据清空的需求,本文将为您介绍DB2数据库中四种数据删除的方法,供您参考,您可以根据实际情况来进行选择,希望能对有所帮助. 1. 使用 DELETE 语句,即: DELETE FROM <表名> 该语句将清除表中所有数据,但由于这一操作会记日志,因此执行速度会相对慢一些,另外要注意的是,如果表较大,为保证删除操作的成功,应考虑是否留有足够大的日志空间. 2. 使用 NOT LOGGED INITIALLY 选项,即: ALTER TABLE <表名&