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 = ;
long n = ;
for (int i = ; i < featureClass.FeatureCount(queryFilter); i++)
{
pFeature = featureClass.GetFeature(i);
try
{
pFeaBuffer = pFCls.CreateFeatureBuffer();
//添加字段值
for (int j = ; j < sourceFeatureClassFields.FieldCount; j++)
{
pField = sourceFeatureClassFields.get_Field(j);
iIndex = pFeaBuffer.Fields.FindField(pField.Name);
if (iIndex != -)
{
pFeaBuffer.set_Value(iIndex, pFeature.get_Value(j));
}
}
pFeaCursor.InsertFeature(pFeaBuffer);
}
catch (System.Exception ex)
{
MessageBox.Show("单要素写入异常!" + ex.Message, "提示");
return;
}
finally
{
n++;
if (n % == )
{
pFeaCursor.Flush();
}
}
pFeaCursor.Flush();
}
}

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

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

  1. 在thinkphp中js文件添加路径

    JS文件不认识__URL__这些tp独特的链接,所以要自己重新定义url,才能使用这些路径. 在js对于的模板上定义url 然后在js文件中引用

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

    前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望 ...

  3. Shapefile文件中的坐标绘制到屏幕时的映射模式设置

    pDC->SetMapMode(MM_ANISOTROPIC ); //首先选择MM_ANISOTROPIC映射模式,其它映射模式都不合适 pDC->SetWindowExt( max(a ...

  4. iOS-C文件添加到iOS项目中,运行报错

    iOS-C文件添加到iOS项目中,运行报错 问题: 往项目中添加一个空的c文件, 编译运行; 出现2,30个编译错误. 原因: 由于在项目中添加了Pch文件,在文件中所有代码还没有开始运行之前, pc ...

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

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

  6. 【Android Studio安装部署系列】二十、Android studio如何将so文件添加到svn中

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在使用android studio的过程中,常常会遇到一个头疼的问题,添加的so,居然无法被svn添加. 选项都是灰的: 那这种问题 ...

  7. 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”

    通过源码了解ASP.NET MVC 几种Filter的执行过程   一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...

  8. pdf文件添加到word中

    今天遇到了一个问题,如何把pdf文件添加到word中,而不是只添加图标,下面是解决方案: 1.用word 打开pdf文件: 2.打开word文件: 3.把1中的pdf文件复制粘贴 到2中的word文件 ...

  9. Git_添加、删除远端仓库中的文件

    一.将文件添加到远端仓库 1.新增文件 2.使用git add 将文件添加到本地缓存中 3.使用git commit 将文件添加到本地仓库中 4.使用git push 将本地仓库中的修改同步到远端仓库 ...

随机推荐

  1. Spring 配置文件头部xmls解析

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  2. 10.cocos2d坐标系

    一.笛卡儿坐标系 OpenGl坐标系为笛卡儿右手系.x向右,y向上,z向外.在cocos2d-lua中坐标系原点在屏幕的左下角,x向右,y向上,z则是指的zorder(层级). 二.世界坐标系,本地坐 ...

  3. deep-in-es6(三)

    模板字符串:反撇号(`)包起来的内容. eg: var str = `assassin`; console.log(str); 模板占位符:${};可达到数据的渲染,在占位符中可以是表达式,运算符,函 ...

  4. SpringCloud组件和概念介绍

    一:什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及 ...

  5. 下载编译 Android wear 源代码,尝试制作可穿戴设备功能

    体验 Android Wear 缘由: Android wear 代码公布已经非常久了.一直没有尝试,这里是个编译的过程和步骤,假设要尝试.本文假定读者已经有下载编译 Android  的经验,假设没 ...

  6. 如何创建Hiren的BootCD USB磁盘 -- 制作U盘启动盘

    如何创建Hiren的BootCD USB磁盘 原文 https://www.wintips.org/how-to-create-hirens-bootcd-usb-disk/  本文基本是谷歌翻译 H ...

  7. 使用SqlBulkCopy进行批量数据插入

    Dim dt As DataTable = New DataTable() dt.Columns.Add("DtCostProductRuleGUID", GetType(Guid ...

  8. web存储方法,现成代码

    1.cookie的设置与取用 function setCookie(cname,cvalue,exdays){ var d = new Date(); d.setTime(d.getTime()+(e ...

  9. springMVC注解用法:@modelattribute的用法

    在Spring MVC里,@ModelAttribute通常使用在Controller方法的参数注解中,用于解释model entity,但同时,也可以放在方法注解里. 如果把@ModelAttrib ...

  10. SpringMVC 传递相同名称的参数的最佳方法

    华为云4核8G,高性能云服务器,免费试用 >>>   SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时需要传递多个对象(除了Model和web元素 ...