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

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)创建新要素类

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

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。



    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6111801.html ,如需转载请自行联系原作者


相关文章
|
2月前
|
XML 计算机视觉 数据格式
数据集学习笔记(四):VOC转COCO数据集并据txt中图片的名字批量提取对应的图片并保存到另一个文件夹
这篇文章介绍了如何将VOC数据集转换为COCO数据集的格式,并通过Python脚本根据txt文件中列出的图片名称批量提取对应的图片并保存到另一个文件夹。
33 3
|
2月前
|
存储
将ASD光谱仪的.asd文件转为文本文件
将ASD光谱仪的.asd文件转为文本文件
|
7月前
|
数据采集 编解码 人工智能
LANDSAT_7/02/T1/RAW的Landsat7_C2_RAW类数据集
LANDSAT_7/02/T1/RAW的Landsat7_C2_RAW类数据集
64 0
ENVI_IDL:如何读取HDF4文件和HDF5文件的数据集和属性?
参考Documentation Center (l3harrisgeospatial.com) 由于时间和精力,这里并没有对其中的函数进行详细的说明,只是介绍了函数作用以及用法。
247 0
|
7月前
|
存储 定位技术
ASD光谱仪.asd格式光谱曲线文件转换为.txt格式的方法
ASD光谱仪.asd格式光谱曲线文件转换为.txt格式的方法
102 1
ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?
ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?
195 0
|
机器学习/深度学习 人工智能 计算机视觉
|
存储 编解码
ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析
ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析
437 1
|
存储
ENVI_IDL: 创建HDF5文件并写入数据(以将Geotiff文件写入HDF文件为例) + 详细解析
ENVI_IDL: 创建HDF5文件并写入数据(以将Geotiff文件写入HDF文件为例) + 详细解析
206 0
TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式
TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式
TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式