CAD数据导入数据库

1、读取CAD数据

分层读取CAD数据

        /// <summary>/// 获取CAD图层(点线面)/// </summary>/// <param name="filePath">CAD文件路径</param>/// <param name="featureType">导出类型1 点 2 线 3 面 4 注记</param>/// <returns></returns>private IFeatureLayer GetCADFeatureLayer(string filePath, int featureType){if (!File.Exists(filePath))return null;//创建CAD工作空间IFeatureLayer layer = new CadFeatureLayerClass();CadWorkspaceFactoryClass CADWFC = new CadWorkspaceFactoryClass();IFeatureWorkspace workspace = CADWFC.OpenFromFile(System.IO.Path.GetDirectoryName(filePath), 0) as IFeatureWorkspace;//打开工作数据集IFeatureDataset featureDataset = workspace.OpenFeatureDataset(System.IO.Path.GetFileName(filePath));IFeatureClassContainer featureClassContainer = (IFeatureClassContainer)featureDataset;//CAD文件要素遍历for (int i = 0; i < featureClassContainer.ClassCount; i++){//获取要素IFeatureClass featureClass = featureClassContainer.get_Class(i);//判断类型if (featureClass.ShapeType == esriGeometryType.esriGeometryPoint && featureType == 1){//点layer.FeatureClass = featureClass;return layer;}else if (featureClass.ShapeType == esriGeometryType.esriGeometryPolyline && featureType == 2){//线layer.FeatureClass = featureClass;return layer;}else if (featureClass.ShapeType == esriGeometryType.esriGeometryPolygon && featureType == 3){//面  layer.FeatureClass = featureClass;return layer;}else if (featureClass.ShapeType == esriGeometryType.esriGeometryAny && featureType == 4){//注记layer = new CadAnnotationLayerClass();layer.FeatureClass = featureClass;return layer;}}return null;}

2、写入数据

        /// <summary>/// 数据入库/// </summary>/// <param name="currentLayer">入库图层(写入数据的图层)</param>/// <param name="CadPath">CAD文件路径</param>/// <param name="fieldGridView">通用属性字段表</param>/// <param name="progressInput">进度条</param>private void SaveFeature(IFeatureLayer currentLayer, string CadPath, GridView fieldGridView,ProgressBarControl progressInput){//参数判断if (!File.Exists(CadPath)){return;}//获取Cad 点图层IFeatureLayer featureLayer = GetCADFeatureLayer(CadPath, 1);IFeatureCursor featureCursor = null;string sql = "";featureCursor = featureLayer.Search(null, false);//设置最大进度条progressInput.Properties.Maximum = featureLayer.FeatureClass.FeatureCount(null)+5;//判断数据是否存在if (progressInput.Properties.Maximum==5){return;}progressInput.Properties.ShowTitle = true;progressInput.Properties.PercentView = true;progressInput.Properties.Step = 1;progressInput.EditValue = 5;//字段表DataTable dataTable = ((DataView)fieldGridView.DataSource).ToTable();if (dataTable.Rows.Count==0){return;}//默认字段Dictionary<string, string> fieldsDic = new Dictionary<string, string>{{ "ISTEMP", "0" }};//赋值字段for (int i = 0; i < dataTable.Rows.Count; i++){if (dataTable.Rows[i][1] != null && dataTable.Rows[i][1].ToString() != "")fieldsDic.Add(dataTable.Rows[i][0].ToString(), dataTable.Rows[i][1].ToString());}//创建要素IWorkspaceEdit workspace = (IWorkspaceEdit)((IDataset)currentLayer).Workspace;try{if (workspace.IsBeingEdited()){return;}//打开编辑workspace.StartEditing(false);workspace.StartEditOperation();// 创建要素缓存IFeatureBuffer newFeatureBuffer = currentLayer.FeatureClass.CreateFeatureBuffer();IFeatureCursor insertCursor = currentLayer.FeatureClass.Insert(true);IFeature feature;while ((feature = featureCursor.NextFeature()) != null){progressInput.PerformStep();newFeatureBuffer.Shape = feature.Shape;//字段赋值foreach (string key in fieldsDic.Keys){if (newFeatureBuffer.Fields.FindField(key)!=-1){newFeatureBuffer.set_Value(newFeatureBuffer.Fields.FindField(key), fieldsDic[key]);}}insertCursor.InsertFeature(newFeatureBuffer);System.Windows.Forms.Application.DoEvents();}//写入insertCursor.Flush();//保存与结束编辑workspace.StopEditOperation();workspace.StopEditing(true);}catch{//异常 关闭编辑workspace.StopEditOperation();workspace.StopEditing(true);return;}}

3、解释

进度条说解释ProgressBarControl:

  1. 刷新进度
    System.Windows.Forms.Application.DoEvents();
  2. 进度条百分比设置:
    progressInput.Properties.ShowTitle = true; progressInput.Properties.PercentView = true;

4、项目引用

using DevExpress.XtraEditors.Controls;
using DevExpress.XtraGrid.Views.Grid
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Windows.Forms;

5、声明

1)文章来源于项目实践,如存在问题或疑问,请留言,感谢您的阅读,谢谢!
2)转载请标注来源,感谢您的阅读
3)代码来源于项目,敏感部分已去除,如存在错误,或者错别字请留言(手敲),感谢你的阅读

CAD数据导入数据库相关推荐

  1. 将excel中是数据导入数据库

    2019独角兽企业重金招聘Python工程师标准>>> 将excel中是数据导入数据库 1.利用excel生成sql语句: 列如: 1).insert: =CONCATENATE(& ...

  2. eplise怎么连接数据库_基于手机信令的大数据分析教程(一)数据导入数据库

    前言 该套教程以一个初学大数据的菜鸟视角,编写数据分析处理的整套流程.写得较为详(luo)细(suo),希望适用于任何城乡规划大数据的初学者.持续更新中,若有错误,望指正! 1.任务总纲 (1)职住数 ...

  3. python将EXCEL数据导入数据库时日期型数据变成数字并加.0的问题一行代码解决方案方案

    [问题描述]:python将EXCEL数据导入数据库时日期变成文本型数据并显示为数字格式 [解决方案] 数据源: codes: #!/usr/bin/python3 -- coding: utf-8 ...

  4. 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  5. python接入excel_使用python将excel数据导入数据库过程详解

    因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...

  6. 从EXCEL文件将数据导入数据库的向导程序设计!

    原创文章,转载请注明出处! 最近在做一个向导程序,希望把EXCEL表中数据导入数据库,首先是选择数据源.字段匹配最后进行数据检验和错误设置!类的关系比较复杂,希望理清类与类之间的关系.程序的架构有些像 ...

  7. Excel数据导入数据库(Java)

    Excel 文件数据导入数据库 首先说明下读写Excel三种常用的技术: POI : 效率高,操作相对JXL复杂,支持公式,宏,图像图表,一些企业应用上会比较实用.能够修饰单元格属性.字体 数字 日期 ...

  8. ssis 导入excel_使用SSIS包将MS Excel数据导入数据库

    ssis 导入excel The easiest way to import the data into the SQL database is using the Import Data wizar ...

  9. 如何把数据导入数据库

    开发工具与关键技术:SQL 数据库是我们经常用到的软件,但是如何把自己想要的数据导入到数据库之中呢 下面我来给大家讲解一下. 首先我做一个案例: 先给大家看一下我将要导入的是哪一个数据: 就是这两个了 ...

最新文章

  1. Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load.
  2. C#中Ref和out的使用区别
  3. Android 开关按钮切换,类似于iphone 效果,view实现
  4. 合并两个有序链表(C++)
  5. LVS、Nginx 及 HAProxy 工作原理
  6. nodejs命令行执行程序_在NodeJS中编写命令行应用程序
  7. 怎么用javascript进行拖拽(转摘)
  8. “锤死挣扎”的骁龙845+128GB旗舰机暴降1500元 仍冷清!
  9. 【观点】健康的心智是中国未来最大的生产力
  10. Windows内核编程学习1:构建HelloWorld
  11. java class文件比较_Beyound Compare中比较java字节码class文件
  12. wmb 开发的几个坑
  13. 人民大学赵鑫:基于知识与推理的序列化推荐技术研究
  14. cmd 如何打开资源管理器
  15. 《期货基础知识》期权交易入门知识
  16. rabbitmq遇到的一些坑
  17. 数据挖掘之时间序列模型(最全流程分析)
  18. exe程序嵌入Winform窗体(转载)
  19. 威纶通定时循环操作宏_数控铣床编程操作,四个实例助你快速入门
  20. System.InvalidOperationException:“寄宿的 HWND 必须是指定父级的子窗口。”

热门文章

  1. Java萌新入门的第一篇文章
  2. const、*、的大乱斗
  3. Linux 内核配置项详解 myimx6
  4. Tomcat11——Tomat集群
  5. 全新文案馆头像壁纸小程序源码+带后台的
  6. select函数介绍
  7. css 预处理器 less sass
  8. php微信公众号支付实例教程,PHP微信公众号支付教程(含图文)
  9. 下列各排序法中,最坏情况下的时间复杂度最低的是(**C** )A.希尔排序 B.快速排序 C.堆排序 D.冒泡排序
  10. 【周刊】“熊孩子”乱敲键盘攻破 Linux 桌面;500 个值得学习的 AI 开源项目;Rust 升级成为微软一级项目...