博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AE中Shapefile文件添加到SDE数据集
阅读量:6436 次
发布时间:2019-06-23

本文共 2924 字,大约阅读时间需要 9 分钟。

linder_lee 原文 

主要完成用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

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

(2)打开shp文件

1
2
3
4
5
6
7
//打开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)创建新要素类

//创建新featureclassIFeatureClass 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中就完成了。

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6111801.html
,如需转载请自行联系原作者
你可能感兴趣的文章
qsort()与sort的用法(收藏)
查看>>
SAP ABAP 如何查询一个变量表里的变量被哪支程序使用到?
查看>>
Python问答环节(2)
查看>>
【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback
查看>>
怎样才算是一个合格的网页设计师?
查看>>
10天学安卓-第九天
查看>>
Git协作流程
查看>>
getResource(String name)用法及源码分析
查看>>
神奇的事情,不同进程监听同一个端口,居然都成功
查看>>
PreparedStatement批量处理的一个Framework(原创)
查看>>
3Dmax+blend+WPF综合运用
查看>>
zabbix启动无效,无法监听10051
查看>>
Google C++ Coding Style:右值引用(Rvalue Reference)
查看>>
docker登录
查看>>
php安装filter扩展模块
查看>>
Android——发送和接收广播
查看>>
上海网域CEO肖确伟:IDC精细化运营探讨
查看>>
DirectShow开发快速入门之慨述
查看>>
Kubernetes排错:用容器的元数据提供新思路
查看>>
《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.12. File-5.22...
查看>>