(C#语言)

private void ImportFeatureClassToNewWorkSpace(IFeatureDataset apFD)
        {
            //打开SHP文件
            string StrFilter = "SHP文件(.shp) | *.shp";
            string ImportShapeFileName = OpenFile(StrFilter);
            if (ImportShapeFileName == "") { return; }
            string ImportFileShortName = System.IO.Path.GetFileNameWithoutExtension(ImportShapeFileName);
            string ImportFilePath = System.IO.Path.GetDirectoryName(ImportShapeFileName);

IWorkspaceName pInWorkspaceName;
            IFeatureDatasetName pOutFeatureDSName;
            IFeatureClassName pInFeatureClassName;
            IDatasetName pInDatasetName;
            IFeatureClassName pOutFeatureClassName;
            IDatasetName pOutDatasetName;
            long iCounter;
            IFields pOutFields, pInFields;
            IFieldChecker pFieldChecker;
            IField pGeoField;
            IGeometryDef pOutGeometryDef;
            IGeometryDefEdit pOutGeometryDefEdit;
            IName pName;
            IFeatureClass pInFeatureClass;
            IFeatureDataConverter pShpToClsConverter;
            IEnumFieldError pEnumFieldError = null;

//得到一个输入SHP文件的工作空间,
            pInWorkspaceName = new WorkspaceNameClass();
            pInWorkspaceName.PathName = ImportFilePath;
            pInWorkspaceName.WorkspaceFactoryProgID = "esriCore.ShapefileWorkspaceFactory.1";
            //创建一个新的要素类名称,目的是为了以来PNAME接口的OPEN方法打开SHP文件
            pInFeatureClassName = new FeatureClassNameClass();
            pInDatasetName = (IDatasetName)pInFeatureClassName;
            pInDatasetName.Name = ImportFileShortName;
            pInDatasetName.WorkspaceName = pInWorkspaceName;
            //打开一个SHP文件,将要读取它的字段集合
            pName = (IName)pInFeatureClassName;
            pInFeatureClass = (IFeatureClass)pName.Open();
            //通过FIELDCHECKER检查字段的合法性,为输入要素类获得字段集合
            pInFields = pInFeatureClass.Fields;
            pFieldChecker = new FieldChecker();
            pFieldChecker.Validate(pInFields, out pEnumFieldError, out pOutFields);
            //通过循环查找几何字段
            pGeoField = null;
            for (iCounter = 0; iCounter < pOutFields.FieldCount; iCounter++)
            {
                if (pOutFields.get_Field((int)iCounter).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    pGeoField = pOutFields.get_Field((int)iCounter);
                    break;
                }
            }
            //得到几何字段的几何定义
            pOutGeometryDef = pGeoField.GeometryDef;
            //设置几何字段的空间参考和网格
            pOutGeometryDefEdit = (IGeometryDefEdit)pOutGeometryDef;
            pOutGeometryDefEdit.GridCount_2 = 1;
            pOutGeometryDefEdit.set_GridSize(0, 1500000);

//创建一个新的要素类名称作为可用的参数
            pOutFeatureClassName = new FeatureClassNameClass();
            pOutDatasetName = (IDatasetName)pOutFeatureClassName;
            pOutDatasetName.Name = pInDatasetName.Name;
            
            //创建一个新的数据集名称作为可用的参数
            pOutFeatureDSName = (IFeatureDatasetName)new FeatureDatasetName();
            //因为ConvertFeatureClass需要传入一个IFeatureDatasetName的参数,通过它确定导入生成的要素类的工作空间和要素集合
            //情况一
            //如果本函数的参数(IFeatureDataset)是一个确切的值,那么将它转换成IFeatureDatasetName接口就可以了。因为ConvertFeatureClass根据该接口就
            //可以确定工作空间和要素集合,IFeatureClassName就可以不考虑上述问题
            //情况二
            //如果本函数的参数(IFeatureDataset)是一个NULL值,表示要创建独立要素类,
            //那么ConvertFeatureClass函数无法根据IFeatureDatasetName参数确定工作空间和要素集合
            //这个时候需要IFeatureClassName参数确定工作空间和要素集合

//如果参数的值是NULL,说明要创建独立要素类
            if (apFD == null)
            {
                //创建一个不存在的要素集合pFDN,通过它将IFeatureClassName和工作空间连接起来,而ConvertFeatureClass函数并不使用该变量作为参数,
                IFeatureDatasetName pFDN = new FeatureDatasetNameClass();
                IDatasetName pDN = (IDatasetName)pFDN;
                IDataset pDS = (IDataset)pWorkspace;
                pDN.WorkspaceName = (IWorkspaceName)pDS.FullName;
                pDN.Name = pDS.Name;
                pOutFeatureClassName.FeatureDatasetName = (IDatasetName)pFDN;
                //将pOutFeatureDSName设置为Null,将它做为参数给ConvertFeatureClass函数,因为IFeatureClassName本身已经和工作空间关联了,生成的
                //要素类在工作空间的根目录下,即独立要素类
                pOutFeatureDSName = null;
                
            }
            else//创建的要素类是在给定的参数(要素集合)下
            {
                pOutFeatureDSName = (IFeatureDatasetName)apFD.FullName;
            }
            
            //开始导入
            pShpToClsConverter = new FeatureDataConverterClass();
            pShpToClsConverter.ConvertFeatureClass(pInFeatureClassName, null, pOutFeatureDSName, pOutFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0);
            MessageBox.Show("导入成功","系统提示");
        }

转载于:https://www.cnblogs.com/linhugh/archive/2012/05/02/2479213.html

将shp文件导入到GeoDatabase中相关推荐

  1. shp文件导入Oracle并发布到Geoserver

    将shp文件导入oracle中,并发布到geoserver上 1. 环境准备 1.1 环境介绍 Oracle 11g Geoserver 2.11.1 1.2 软件准备 首先需要安装支持空间数据的or ...

  2. 将多个csv文件导入到pandas中并串联到一个DataFrame中

    本文翻译自:Import multiple csv files into pandas and concatenate into one DataFrame I would like to read ...

  3. 云服务器如何导入文件,如何将文件导入云服务器中

    如何将文件导入云服务器中 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 华为云 ...

  4. 将csv文件导入到数据库中

    1.csv文件简介 CSV全称 Comma Separated values,是一种用来存储数据的纯文本文件格式,通常用于电子表格或数据库软件.这样你就发现了,csv其实就是纯文本文件,可以使用记事本 ...

  5. php导入qq数据txt代码,/谁有能都实现将excel文件导入到数据中,并在php网页上显示的源码啊,有的发送1091932879@qq.com,谢谢!...

    PHP网页怎么导入Excel的数据 参码如下: // 1.引用ExcelReader类文 require_once 'Excel/reader.php'; // 2.实例化读取Excel类 $data ...

  6. shp文件导入postgresql数据库

    目录 1.打开postgis postgis bundle 2.点击view connection details连接数据库 3.点击option:编码为LATIN1->点击import 选择s ...

  7. 将dblp中的文件导入到endnote中

    将dblp中的文件导入到endnote中 复制要导入的论文题目到dblp中搜索 点击第一个按钮的第一个链接 跳转后页面点击cite 点击1 Endnote,然后点击2下载. 此时并没有下载文件,页面跳 ...

  8. Shp文件导入MySql数据库工具包,只是针对于8.0+以上版本定制开发

    由于最新的geotools工具类不支持8.0+以上的MySQL数据库,故而开发该工具用于数据处理.采用javaFX开发的一个很简单的数据导入工具,对于5.0+的版本,大家参考网上的相关代码即可,也可在 ...

  9. access数据库导入oracle数据库,将excel表格导入access数据库再导入oracle数据库方法-如何将ACCESS数据库的文件导入到ORACLE中?...

    怎样将excel中的数据导入到oracle数据库中 敢问楼主,表A存在几列,表B存在几列,表C存在几列 常规方法(表中列和excel中列一致) PLSQL 中 : select * from A up ...

最新文章

  1. 公开课报名 | 详解CNN-pFSMN模型以及在语音识别中的应用
  2. 照葫芦画瓢-comments(注释)
  3. mysql 存储过程 排序_更改MySQL存储过程“数据库排序规则”的名称
  4. ios不响应presentModalViewController界面的处理
  5. shell基础09 gawk程序(上)
  6. 文件 单片机_如何查看你写的单片机程序有多大?
  7. 线程同步 线程安全_同步装饰器来替换线程安全类
  8. oracle参数文件和口令文件
  9. android 生命周期管理,Android Activity生命周期和堆栈管理的详解_Android_脚本之家...
  10. 图论算法——无向图的深度优先搜索和广度优先搜索
  11. codeforces733-C. Epidemic in Monstropolis 贪心加链表
  12. Java基础知识陷阱(九)
  13. c语言书籍(c语言书籍)
  14. 【matlab深度学习工具箱】classificationLayer参数详解
  15. 群赛 round#5 解题报告(superoxide,choice,rpwt)
  16. mysql之mysql.sock文件
  17. R语言数据的排序、转换、汇总
  18. 杂谈|程序员还是工程师
  19. linux 配置使用ftp 使用账号密码登陆失败
  20. 1490_TC275_UART_shell例程测试

热门文章

  1. android手机界面管理系统的设计与实现(硕士学位论文).pdf,基于Android系统的手机文件管理器的设计与实现...
  2. babel import语法 js_搭建开发JS库的运行环境
  3. Metasploit profiling工具的利用
  4. Metasploit发布了版本5.0.76
  5. Xamarin 2017.10.9更新
  6. 2021易烊千玺高考成绩查询,易烊千玺高考分数公布?最骄傲的是他?网友:分太低!...
  7. 手机充值接口 php,首信易支付,话费充值接口
  8. js function如何传入参数未字符串_Python爬虫 JS 案例讲解:爬取漫画
  9. 服务器被修改,我的世界
  10. Nature子刊:皮层内脑机接口的主导感