一、SDE要素导出到shapefile中。

1、创建一个新的shapefile文件。

 private bool CreateShapefile(string filepath, string name)
{
bool isSuccssed = false;
try
{
IFeatureWorkspace pFWS = null;
IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
pFWS = pWSF.OpenFromFile(filepath, ) as IFeatureWorkspace; IFields pFields;
IFieldsEdit pFieldsEdit;
pFields = new FieldsClass();
pFieldsEdit = pFields as IFieldsEdit;
IField pField;
IFieldEdit pFieldEdit;
pField = new FieldClass();
pFieldEdit = pField as IFieldEdit;
pFieldEdit.Name_2 = "Shape";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
IGeometryDef pGeomDef;
IGeometryDefEdit pGeomDefEdit;
pGeomDef = new GeometryDefClass();
pGeomDefEdit = pGeomDef as IGeometryDefEdit;
pGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
pGeomDefEdit.SpatialReference_2 = new UnknownCoordinateSystemClass();
pFieldEdit.GeometryDef_2 = pGeomDef;
pFieldsEdit.AddField(pField);
IFeatureClass pFeatureClass;
pFeatureClass = pFWS.CreateFeatureClass(name, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
isSuccssed = true;
}
catch
{
isSuccssed = false;
}
return isSuccssed;
}

2、从SDE中读取要素,得到Geometry图形。

private IWorkspace GetSdeWorkspace(string Server, string Instance, string database, string user, string password, string version)
{
IWorkspace pWS = null;
IWorkspaceFactory pWSF = null;
IPropertySet pPropertySet = new PropertySet();
//sde数据库连接的各个参数
pPropertySet.SetProperty("Server", Server);
pPropertySet.SetProperty("Instance", Instance);
pPropertySet.SetProperty("Database", database);
pPropertySet.SetProperty("user", user);
pPropertySet.SetProperty("password", password);
pPropertySet.SetProperty("version", version);
try
{
pWSF = new SdeWorkspaceFactory();
pWS = pWSF.Open(pPropertySet, );
}
catch
{
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(pPropertySet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSF);
pPropertySet = null;
pWSF = null;
}
return pWS;
}
private List<IGeometry> GetGeometryFromSde(string pFeaClassName,string objectid)
{
List<IGeometry> pGeometryList = new List<IGeometry>();
IWorkspace pWS = null;
IFeatureWorkspace pFWS = null;
IFeatureCursor pFeatCursor = null;
IFeature pFeature = null;
IFeatureClass pFeatClss = null;
IQueryFilter pQueryFilter =new QueryFilterClass();
pWS = GetSdeWorkspace("192.168.121.110", "", "server110_SDE", "sde", "sde2014", "DEFAULT");
try
{
pFWS = pWS as IFeatureWorkspace;
pFeatClss = pFWS.OpenFeatureClass(pFeaClassName);
pQueryFilter.WhereClause = "OBJECTID=" + objectid;
IFeatureCursor featureCursor = pFeatClss.Search(pQueryFilter, false);
while ((pFeature = featureCursor.NextFeature()) != null)
{
if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
{
pGeometryList.Add(pFeature.ShapeCopy);
}
}
}
catch
{
}
finally
{
if (pFeatCursor != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatCursor);
pFeatCursor = null;
}
if (pWS != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(pWS);
}
}
return pGeometryList;
}

3、将sde中获得的要素,加到shapefile中。

 private void AddFeature2Shapefile(IGeometry geometry, string filepath, string name)
{
IFeatureWorkspace pFWS = null;
IFeatureClass pFeaCls = null;
IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
pFWS = pWSF.OpenFromFile(filepath, ) as IFeatureWorkspace;
pFeaCls = pFWS.OpenFeatureClass(name);
IDataset dataset = pFeaCls as IDataset;
IWorkspace workspace = dataset.Workspace;
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();
IFeatureBuffer featureBuffer = pFeaCls.CreateFeatureBuffer();
IFeatureCursor featureCursor = pFeaCls.Insert(true);
featureBuffer.Shape = geometry;
featureCursor.InsertFeature(featureBuffer);
featureCursor.Flush();
Marshal.ReleaseComObject(featureCursor);
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
}

二、将一个shapefile中的要素加到另一个shapefile中方法与上面类似。只是获得的要素源不同。

 private IGeometry GetGeometryFromShapefile(string filepath, string name)
{
IGeometry pGeometry = null;
IFeatureWorkspace pFWS = null;
IFeatureClass pFeaCls = null;
IFeature pFeature = null;
IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
pFWS = pWSF.OpenFromFile(filepath, ) as IFeatureWorkspace;
pFeaCls = pFWS.OpenFeatureClass(name);
IFeatureCursor featureCursor = pFeaCls.Search(null, false);
while ((pFeature = featureCursor.NextFeature()) != null)
{
pGeometry = pFeature.ShapeCopy;
}
return pGeometry;
}

SDE与shapefile之间的数据导入与导出的更多相关文章

  1. SQL Server 之 在数据库之间进行数据导入导出

    1.同一服务器上数据库之间进行数据导入导出 (1).使用 SELECT INTO 导出数据 在SQL Server中使用最广泛的就是通过SELECT INTO语句导出数据,SELECT INTO语句同 ...

  2. 通过 Sqoop1.4.7 将 Mysql5.7、Hive2.3.4、Hbase1.4.9 之间的数据导入导出

    目录 目录 1.什么是 Sqoop? 2.下载应用程序及配置环境变量 2.1.下载 Sqoop 1.4.7 2.2.设置环境变量 2.3.设置安装所需环境 3.安装 Sqoop 1.4.7 3.1.修 ...

  3. 数据分析(7):pandas介绍和数据导入和导出

    前言 Numpy Numpy是科学计算的基础包,对数组级的运算支持较好 pandas pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数.pandas兼具Numpy高性能的数组计 ...

  4. Hadoop Hive概念学习系列之HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)

    Hive总结(七)Hive四种数据导入方式 (强烈建议去看) Hive几种数据导出方式 https://www.iteblog.com/archives/955 (强烈建议去看) 把MySQL里的数据 ...

  5. sqoop学习2(数据导入与导出)

    最近学习了下这个导数据的工具,但是在export命令这里卡住了,暂时排不了错误.先记录学习的这一点吧 sqoop是什么 sqoop(sql-on-hadoop):是用来实现结构型数据(如关系型数据库) ...

  6. SQL Server 数据导入与导出

    1. BCP 命令 用法: bcp {dbtable | query} {in | out | queryout | format} 数据文件 [-m 最大错误数] [-f 格式化文件] [-e 错误 ...

  7. Python全栈 MySQL 数据库 (索引、数据导入、导出)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     表字段重命名(change)   alter table 表名 ...

  8. Hawk 5.1 数据导入和导出

    除了一般的数据库导入导出,Hawk还支持从文件导入和导出,支持的文件类型包括: Excel CSV(逗号分割文本文件) TXT (制表符分割文本文件) Json xml Excel 目前来看,Exce ...

  9. MySQL学习笔记十一:数据导入与导出

    数据导入 1.mysqlimport命令行导入数据 在使用mysqlimport命令导入数据时,数据来源文件名要和目标表一致,不想改文件名的话,可以复制一份创建临时文件,示例如下. 建立一个文本use ...

随机推荐

  1. 2015年CSDN博客排名第一名,何方神圣?

    2015年CSDN博客排名第一名,何方神圣? 一.引子: 话说博主phphot,雄霸天下好多年. 俱往矣, 落花流水春去也. 斗转星移,江山易主. 详细可以参见下文: CSDN博客排名第一名,何许人也 ...

  2. jquery easyui datagrid 分页实现---善良公社项目

    接着上篇文章,接下来给大家分享分页的实现,分页其实多多少少见过很有几种,框架中带的图片都特别的好看,会给用户以好的使用效果,具体实现,需要自己来补充代码: 图示1: 通常情况下页面数据的分页显示分成真 ...

  3. iOS屏幕适配-iOS笔记

    学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeCla ...

  4. Python学习笔记 - dict和set

    dict #!/usr/bin/env python3 # -*- coding: utf-8 -*- #dict >>> d = {'Michael': 95, 'Bob': 75 ...

  5. (四十九)Quartz2D自定义控件

    利用Quartz2D来自定义UIImageView: 模仿UIImageView: 设置frame,设置图片. 注意一个细节,自定义的imageView,应该通过重写set方法来设置图片并且重绘,否则 ...

  6. Oracle Inventory Management Application Program Interface ( APIs)

    In this Document   Goal   Solution   References APPLIES TO: Oracle Inventory Management - Version 12 ...

  7. 《java入门第一季》之面向对象面试题(this和super的区别)

    this和super的区别? 分别是什么呢? this代表本类对象的引用. super代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员) 怎么用呢? A:调用成员变量 this.成员变量 ...

  8. SpriteBuilder中子节点的相对位置(%百分比定位)

    子节点(或在这里确切的为精灵sprites)50%的偏移效果使得其在父节点中居中显示,该父节点的纹理在左下角(锚点为0,0). 这样做好过用父节点的位置的实际值来定位.根据父节点实际位置来定位在早期的 ...

  9. Java-ServletContextListener

    /** * Implementations of this interface receive notifications about * changes to the servlet context ...

  10. Java基本数据类型和长度

    转自:http://lysongfei.iteye.com/blog/602546 java数据类型     字节  表示范围 byte(字节型)     1  -128-127  short(短整型 ...