数据的转换(shp sde mdb 之间的转换)

调用用下面的方法可以将要素类从sde导出到shp或者mdb 或者从三个中的任意一个导出到另外一个。方法是:

/// <summary>
        /// 将一个要素类从一个工作空间转移到另外一个工作空间
        /// 注意目标工作空间不能有改要素类,必须先清除  
        /// </summary>
        /// <param name="sourceWorkspace">源工作空间</param>
        /// <param name="targetWorkspace">目标工作空间</param>
        /// <param name="nameOfSourceFeatureClass">源要素类名</param>
        /// <param name="nameOfTargetFeatureClass">目标要素类名</param>
        public void IFeatureDataConverter_ConvertFeatureClass(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, string nameOfSourceFeatureClass, string nameOfTargetFeatureClass)
        {            
            //create source workspace name   
            IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace;
            IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName;
            //create source dataset name   
            IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
            IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName;
            sourceDatasetName.WorkspaceName = sourceWorkspaceName;
            sourceDatasetName.Name = nameOfSourceFeatureClass;
            //create target workspace name   
            IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;
            IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;
            //create target dataset name   
            IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
            IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName;
            targetDatasetName.WorkspaceName = targetWorkspaceName;
            targetDatasetName.Name = nameOfTargetFeatureClass;
            //Open input Featureclass to get field definitions.   
            ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;
            IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open();

//Validate the field names because you are converting between different workspace types.   
            IFieldChecker fieldChecker = new FieldCheckerClass();
            IFields targetFeatureClassFields;
            IFields sourceFeatureClassFields = sourceFeatureClass.Fields;
            IEnumFieldError enumFieldError;
            // Most importantly set the input and validate workspaces!     
            fieldChecker.InputWorkspace = sourceWorkspace;
            fieldChecker.ValidateWorkspace = targetWorkspace;
            fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields);
            // Loop through the output fields to find the geomerty field   
            IField geometryField;
            for (int i = 0; i < targetFeatureClassFields.FieldCount; i++)
            {
                if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    geometryField = targetFeatureClassFields.get_Field(i);
                    // Get the geometry field's geometry defenition            
                    IGeometryDef geometryDef = geometryField.GeometryDef;
                    //Give the geometry definition a spatial index grid count and grid size        
                    IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;
                    targetFCGeoDefEdit.GridCount_2 = 1;
                    targetFCGeoDefEdit.set_GridSize(0, 0);
                    //Allow ArcGIS to determine a valid grid size for the data loaded      
                    targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;
                    // we want to convert all of the features   
                    IQueryFilter queryFilter = new QueryFilterClass();
                    queryFilter.WhereClause = "";
                    // Load the feature class     
                    IFeatureDataConverter fctofc = new FeatureDataConverterClass();
                    IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0);
                    break;
                }
            }

}

只要设定了工作空间,不管工作空间是文件的 数据库的 还是什么的,可以自由转换。

比如我要将sde的要素类导出成shp文件,如下:

public void Export_Shp(IFeatureClass pFeatClass, string path)
        {
            IDataset pDataSet = pFeatClass as IDataset;
            IWorkspace pWorkspace = pDataSet.Workspace;

string strShapeFolder = path;
            string fileName = pFeatClass.AliasName;

string fullFileName = path + "\\" + fileName + ".shp";
            fullFileName = fullFileName.Replace(@"\\", @"\");
            if (File.Exists(fullFileName))
            { //如果已经存在就先删除
                DirectoryInfo di = new DirectoryInfo(path);
                FileInfo[] fis = di.GetFiles(fileName + "*");
                foreach (FileInfo fi in fis)
                {
                    fi.Delete();
                }
            }

IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace pWS = (IFeatureWorkspace)pWSF.OpenFromFile(strShapeFolder, 0);

this.IFeatureDataConverter_ConvertFeatureClass(pWorkspace, (IWorkspace)pWS, pFeatClass.AliasName, fileName);

}

转载于:https://www.cnblogs.com/linhugh/articles/2515063.html

数据的转换(shp sde mdb 之间的转换)相关推荐

  1. python变量类型之间转换_Python常用数据类型之间的转换总结

    函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 complex(real [,imag]) ...

  2. proj4经纬度bl转换xy_多种坐标系之间的转换之Proj.NET_转载

    Proj.NET (http://www.codeplex.com/ProjNET)是一个.NET下开源的空间参照和投影引擎,遵循OGC相关标准.负责人(Coordinators )是D_Guidi ...

  3. java数据类型之间的转换_Java基本类型之间的转换

    一.基本数据类型长度 byte:一个字节,8位,有符号 short:两个字节,16为,有符号 char:两个字节,16位,无符号 int:4个字节,32位,有符号 float:4个字节,32位,有符号 ...

  4. 进制转换—任意进制之间的转换

    一.十进制转化为任意进制 1.十进制数num转为七进制:力扣504 class Solution {public String convertToBase7(int num) {if(num==0){ ...

  5. tensor数据类型转换_PyTorch的tensor数据类型及其相关转换

    1 基本类型 PyTorch的数据类型为各式各样的tensor,tensor可以理解为高维矩阵,与Numpy中的array类似. PyTorch中的tensor包括CPU上的数据类型和GPU上的数据类 ...

  6. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    参考博客: Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围 ...

  7. 计算机原理与基础 —— 进制之间的转换(二进制与十、八、十六禁止之间的转换)

    进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制.八进制.十进制与十六进制,它们之间区别在于数运算时是逢几进一位.比如二进制是逢2进一位,十进制也就是我们常用的0-9是 ...

  8. java中的字符,字符串,数字之间的转换

    java中的字符,字符串,数字之间的转换 string 和int之间的转换 string转换成int :Integer.valueOf(" ") int转换成string : St ...

  9. 二、八、十、十六进制之间的转换

    二进制.八进制.十进制.十六进制之间的转换 进制也就是进制位,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制.八进制.十进制与十六进制,它们之间区别在于数运算时是逢几进一位.比如二进制 ...

最新文章

  1. 微信小程序实践_4显示新闻(2)
  2. 机智云明星开发者 | 董程森
  3. 【毕业求职季】-听说你想去大厂看学妹,带你看看字节跳动抖音电商后端面试长啥样?
  4. 我与Linux系统的交集
  5. Asp.Net Core 混合全球化与本地化支持
  6. 内容推荐策略产品经理的方法和实践
  7. [交互设计工具/原型创作工具]Axure RP Pro 5.0新特性 破解版 注册码
  8. Android背景图片设置
  9. html css实验6,(实验六DivCSS网页布局.doc
  10. Mbed OS :DMX512 灯光控制协议
  11. php的get和post,PHP中GET和POST区别
  12. ABB机器人示教器上人机界面的功能
  13. 从麻将到“农药”,细数 AI 攻占的游戏领域
  14. Mac 终端连接和操作服务器常用命令
  15. 使用linux内核仿真ZNS(zoned namespace SSD)
  16. 自己写的一点福利代码(三)
  17. 魔法师元素平衡(C++解法)
  18. html %3cstyle%3e 添加css,从网站适应CSS样式到一个Django香脆形式复选框
  19. ldrex strex
  20. 计算机图形渲染基础知识(个人笔记)

热门文章

  1. 输出指定个数所有枚举_【一天一大 lee】区间和的个数 (难度:困难) Day20201107
  2. 简单选择排序_一文带你读懂排序算法(一):冒泡 amp; 快速选择排序 amp; 简单插入排序算法...
  3. zookeeper版本更新_很遗憾,没有一篇文章能讲清楚ZooKeeper
  4. java 判断是否包含中文_Java 判断字符串是否包含中文正则表达式
  5. hbase major_compact 文件会变小吗_图解式学习:可能是最易懂的Hbase架构原理解析(二)...
  6. 3DShader之阴影贴图(Shadow Mapping)
  7. pytorch学习率衰减
  8. getpriority java_Java Thread类的最终int getPriority()方法(带示例)
  9. python标准库os.path中_Python零基础入门学习19:常用标准库之os.path子库
  10. 如何利用用户业务行为画像,做套餐与用户之间个性化智能匹配模型?