SDE与shapefile之间的数据导入与导出

一、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, 0) 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, 0);
            }
            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("172.30.242.185", "5151", "server185_SDE", "sde", "hiway2014", "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, 0) 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, 0) as IFeatureWorkspace;
            pFeaCls = pFWS.OpenFeatureClass(name);
            IFeatureCursor featureCursor = pFeaCls.Search(null, false);
            while ((pFeature = featureCursor.NextFeature()) != null)
            {
                pGeometry = pFeature.ShapeCopy;
            }
            return pGeometry;
        }

SDE与shapefile之间的数据导入与导出

时间: 2024-10-06 00:36:56

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

sqlite的数据导入与导出

数据导入的来源可以是其他应用程序的输出,也可以是指定的文本文件,这里采用指定的文本文件.   1. 首先,确定导入的数据源,这里是待导入的,按固定格式的文本文件.   2. 然后,依照导入的文件格式,确定想导入的目标数据表,这个数据表如果没有,可以依照待导入的文本文件格式,创建一个相对应的数据表.   3. 最后,执行.import命令,将文本文件中数据导入数据表中. 1. 数据源 在/home/ywx/yu/sqlite/下,创建一个名为data.txt的文本文件,并输入以下数据,数据之间采用

memcached命令行memcached数据导入和导出PHP链接memcached memcach

memcached命令行 memcached数据导入和导出 PHP链接memcached 先安装php的memcache扩展cd /usr/local/src/wget ?http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz tar zxf memcache-2.2.3.tgz?cd memcache-2.2.3/usr/local/php-fpm/bin/phpize./configure --with-php

HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)

Hive总结(七)Hive四种数据导入方式 (强烈建议去看) Hive几种数据导出方式 https://www.iteblog.com/archives/955 (强烈建议去看) 把MySQL里的数据导入到HDFS 1.使用MySQL工具手工导入 把MySQL的导出数据导入到HDFS的最简单方法就是,使用命令行工具和MySQL语句. 为了导出整个数据表或整个数据库的内容,MySQL提供了mysqldump工具. 比如 SELECT  col1,col2 FORM TABLE INTO OUTFI

数据导入,导出 表操作

一.数据的导入导出 1.数据导入:把系统文件的内容保存到数据库的表里 默认只有数据库管理冲数据库服务器本机登录数据库才有数据导入权限 表结构要与文件内容匹配. 把/etc/passwd文件的内容保存到数据库服务器userdb库的userlist表中 mysql> createdatabase userdb; mysql> create table userlist( -> username  varchar(15) not null, -> password  char(1) no

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

ParisGabriel 每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰  开局一张图 表字段重命名(change)  alter table 表名 change 原名 新名 数据类型: SQL查询 执行顺序: 3. select ...聚合函数 from 表名 1. where ... 2. group by... 4. having... 5. order by... 6. limit... group by 语句 作用:给查询结果进行分组 注意: 1.group by之后的字段

mongodb 数据导入和导出

mongodb中的mongoexport 负责数据导出 mongodb中的mongoimport负责数据导入 通过mongoexport工具可以把mongodb中的数据表导出成JSON格式或CSV格式的文件中 导出CSV格式示例: 导出数据 gamedb 中数据表user 中的user,createTime,gold,level,region,vip_level项数据到文件/home/data/user.csv中 -d:指明使用的库,本例中为gamedb -c:指明要导出的集合,本例中为user

oracle 数据导入和导出(原创)

oracle的数据导入导出必须是在两个地方建立相同的用户才能完整导入(本地导入新的数据库需重建权限).所以导入就得按以下步骤进行: 假定服务器端用户为puser 服务器端导出可以这样做: 导出数据:exp puser/[email protected] file=c:\bb.dmp full=y 本地数据库可以这样做: 1.删除用户:drop user puser cascade; 2.创建用户:create user puser identified by padmin 3.赋于权限:gran

Oracle数据导入、导出dmp文件

数据导出,命令exp,将远程数据库中的数据导入到本地,比如你在windows下可以将Linux中的数据库中数据导出到Windows本地. 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中,将Test数据库中所有数据导出到一个dmp文件中.前提是登录用户即system有导出权限.   exp system/manager@TEST file=d:\daochu.dmp full=y2 将数据库中system用户与sys用户的表导出,指定导出某

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

数据导入 1.mysqlimport命令行导入数据 在使用mysqlimport命令导入数据时,数据来源文件名要和目标表一致,不想改文件名的话,可以复制一份创建临时文件,示例如下. 建立一个文本users.txt,内容如下: 1001,张三,zhangsan@163.com 1002,李四,zhangsan@126.com 1003,王五,zhangsan@qq.com 1004,李白,zhangsan@hotmail.com 创建一个表users mysql> create table if