AE中Shapefile文件添加到SDE数据集

linder_lee 原文 AE中Shapefile文件添加到SDE数据集(c#)

主要完成用C#,通过AE将本地Shapefile文件导入到SDE的指定数据集下面。

首先说下思路:

(1) 通过OpenFileDialog打开本地的Shp文件;

(2)通过获取的Shp文件创建FeatureClass,获取shp的字段 IFields,并判断图层类别;

(3)连接SDE中指定数据集,并创建新的FeatureClass;

(4)将shp文件对应的 FeatureClass里的Feature复制到SDE中新建的FeatureClass中。

接着说明下,开发过程中遇到的一些诡异问题:

(1) 在调用IFeatureDataset的CreateFeatureClass方法时,报错提示:The application is not licensed to create or modify schema for this type of data!

其解决方案 是:修改在form窗体中添加的axLicenseControl的属性,设置为ArcGIS Engine Enterprise...选项;并重新Update下ESRI的License文件。

同时一定要记住,要将除了ArcGIS Engine Enterprise Geo....外的其它选项的勾去掉。

最后为了记录下一天的成果,贴下代码:

(1)调用 OpenFileDialog

openFileDialog1.Filter = ("ShapeFile 文件(*.shp)|*.shp");
openFileDialog1.InitialDirectory = "D:\\project\\ThematicDataManager";//对话框目录
openFileDialog1.ShowDialog();

(2)打开shp文件

//打开ShapeFile文件
ShapefileWorkspaceFactory fileWorkspaceFactory = new ShapefileWorkspaceFactoryClass();

IFeatureWorkspace featureWorkspce = fileWorkspaceFactory.OpenFromFile(strWorkspacePath, 0) as IFeatureWorkspace;
IFeatureLayer featureLayer = new FeatureLayerClass();
IFeatureClass featureClass = featureWorkspce.OpenFeatureClass(strNewLayer);
featureLayer.FeatureClass = featureClass;

(3)获取shp文件所有字段信息

IFields fields;// = featureClass.Fields;
IEnumFieldError pFieldError;
IFieldChecker pFieldChecker = new FieldCheckerClass();
pFieldChecker.ValidateWorkspace = featureWorkspce as IWorkspace;
pFieldChecker.Validate(featureClass.Fields, out pFieldError, out fields);

(4)打开数据集(省略,前面已写过)

(5)创建新要素类

//创建新featureclass
IFeatureClass pFCls = ztDataset.CreateFeatureClass(strtemp, fields, null, null, featureClass.FeatureType, featureClass.ShapeFieldName, "");

(6) 在新要素类中添加要素Feature(调用函数)

//追加要素,shp文件追加featureclass中(三个参数:shp文件,shp字段集,sde中FeatureClass文件)
private void shp2fc(IFeatureClass featureClass, IFields sourceFeatureClassFields, IFeatureClass pFCls)
{
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = "";
IFeatureCursor pFeaCursor = pFCls.Insert(true);
IFeatureBuffer pFeaBuffer = pFCls.CreateFeatureBuffer();
IField pField = new FieldClass();
IFeature pFeature = null;
int iIndex = 0;
long n = 0;
for (int i = 0; i < featureClass.FeatureCount(queryFilter); i++)
{
pFeature = featureClass.GetFeature(i);
try
{
pFeaBuffer = pFCls.CreateFeatureBuffer();
//添加字段值
for (int j = 0; j < sourceFeatureClassFields.FieldCount; j++)
{
pField = sourceFeatureClassFields.get_Field(j);
iIndex = pFeaBuffer.Fields.FindField(pField.Name);
if (iIndex != -1)
{
pFeaBuffer.set_Value(iIndex, pFeature.get_Value(j));
}
}
pFeaCursor.InsertFeature(pFeaBuffer);
}
catch (System.Exception ex)
{
MessageBox.Show("单要素写入异常!" + ex.Message, "提示");
return;
}
finally
{
n++;
if (n % 100 == 0)
{
pFeaCursor.Flush();
}
}
pFeaCursor.Flush();
}
}

到此,shp文件数据添加到Sde中就完成了。

时间: 2024-08-01 22:40:54

AE中Shapefile文件添加到SDE数据集的相关文章

每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容

前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望能够对大家有所帮助. 1.   在列表中为列表项添加子项 为列表添加子项大家都很熟悉,但是如何为列表项添加子项呢?例如列表项是一个文件夹,如何为该文件夹添加子项呢?这里就用到了List.AddItem()方法,具体示例如下: 首先我们要获取列表中的子项: SPListItem root_item=l

如何将文件添加到忽略列表中

在使用CleanMyMac3的过程中,如果需要忽略某些文件的扫描,确定不需要清理该文件,为了让这些文件以后不会出现在扫描结果中,我们需要将文件添加到忽略列表中,那么你知道如何将文件添加到忽略列表中吗? CleanMyMac3扫描大型和旧文件(举例)结束后,点击"查看详情",查看所有即将删除的文件,找到需要忽略的文件并选中,然后点击"文件"--"添加到忽略列表中". 图一:添加到忽略列表中 出现对话框"您已经将一个项目添加到CleanMy

因为 &#39;PRIMARY&#39; 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间

导致你的问题的,应该有2种可能性: 1.存放你的primary文件组的磁盘,已经满了: use master--你的数据库名称 go --看看你的primary组里的文件 select ds.name, df.physical_name, --主文件组的物理文件的路径 --打开我的电脑,查看文件所在盘,是否磁盘已满 df.is_percent_growth, --是否自动增长 df.growth --增长多少 from sys.data_spaces ds inner join sys.data

无法为数据库 XXX 中的对象XXX 分配空间,因为 &#39;PRIMARY&#39; 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。

无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满.请删除不需要的文件.删除文件组中的对象.将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间. 原因是装了mssql express 2005 版本,该版本最大的限制是4G 百度说明: 1.数据库的大小限制:SQL Server 2005 Express 和SQL Server 2008 Express 数据库的大小限制最大为 4GB,最新版本的SQL Server 2008 R2 E

Android中给layout下的布局文件添加动画效果

先上实现效果: 给ListView添加文本内容,文本内容添加进ListView的过程中增加动画效果 步骤一: 先定义好一个动画文件,把要实现的动画效果写好. 1.在res文件夹下创建anim文件夹 2.在anim文件夹中添加一个fd.xml(文件名自定义)文件 fd.xml内容: <!--组合动画 duration:组合动画发生的的间隔时间 --> <set android:duration="1000" xmlns:android="http://sche

润乾报表设计器中使用 spring 框架实现自定义数据集

spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.在 web 开发环境中经常会与 struts.hibernate联合起来使用,进行规范的框架结构开发.润乾中的二次开发也可以与 SSH 框架相结合部署到 web 项目中.本文介绍在设计时没有启动 web 服务,在设计器中使用 spring 的方式来实现自定义数据集. 实现思路:编写两个自定义数据集,一个在设计器中使用,一个在 web 项目中使用,在设计器中使用的类需要编写临时加载 spring 框架配置文件的代码,启动 spr

Android中的文件读写全面总结

转载请注明出处:http://blog.csdn.net/bettarwang/article/details/41625187 在深入分析Java中的I/O类的特征及适用场合 一文中,我详细介绍了Java中的I/O,但是,如果以为Android中的I/O与Java中一样,那就大错特错了.实际上,它们有一定的相同之外,但更多的是区别,因为Android系统中的文件存放位置不同,读取方式也不一样.下面将详细介绍Android中的文件读写: 一.资源文件的读取,不需要在Manifest文件中添加权限

运维学习之Linux系统中的文件传输、归档、压缩

不同系统之间的文件传输 1.文件归档 1. 文件归档,就是把多个文件变成一个归档文件 2. tar c ##创建 f ##指定归档文件名称 t ##显示归档文件中的内容 r ##向归档文件中添加文件 --get ##取出单个文件 --delete ##删除单个文件 x ##取出归档文件中的所有内容 -C ##指定解档目录 -z ##gz格式压缩 -j ##bz2格式压缩 -J ##xz格式压缩 2.压缩 gz gzip etc.tar ##压缩成gz格式 gunzip  etc.tar.gz #

从Windows磁盘修复文件(FOUND.000)中恢复文件

当你在硬盘分区间复制很多文件时,当你使用下载软件时,当你用Word写作时,如果忽然遇见停电.Windows失去响应或者系统自动重新启动,在看着屏幕一黑的瞬间你会有何感受?只能希望在重新启动以后重要的文就不要丢失了.可是很多时候事与愿违,重新启动以后除了"FOUND.000"文件夹中一个个类似"file0001.chk"的文件之外,你原来的文件已经"丢失".别急,其实这些文件中很有可能包含你期待的重要数据,要做的只是把它们恢复原貌(将CHK文件恢复