IFeatureDataConverter2之三——导出指定字段的Shape

之前发过两篇文章关于IFeatureDataConverter接口,具体可以在文章一文章二中看到成果;今天再次研究这个接口,又有了新的发现!


需求:

在导出操作中,导出指定的字段生成Shape文件。

问题来源:

在ArcGIS的其他数据库中,如ArcSDE、fileGDB或者MDB中存在一个字段类型BLOB—大二进制类型,它可以用来存储很多东西,如视频、图片等;但是很不幸的是Shape文件中并不支持这个字段类型,所以我们在直接导出的时候就会出现异常!

BLOB:

大二进制类型主要的操作是通过IMemoryBlobStream 接口操作的;包括将BLOB类型字段数据读取到文件中将文件数据写入的BLOB字段中

分析与解决:

public IEnumInvalidObject ConvertFeatureClass (
IDatasetName inputFClassName,
IQueryFilter InputQueryFilter,
ISelectionSet InputSelectionSet,
IFeatureDatasetName outputFDatasetName,
IFeatureClassName outputFClassName,
IGeometryDef OutputGeometryDef,
IFields OutputFields,
string configKey,
int FlushInterval,
int parentHWND);

这就是转换方法的参数,由于OutputFields是来源于我们需要转换的要素类,所以他包含了所有的要素类字段,包括BLOB。

其实这里ESRI的设计误导了我,既然我想改变输出的字段总数,当然是从这个输出字段集入手了;但是经过几个小时的尝试之后,我发现无论如何设置或者QI这个参数都是无用的,它始终与输入的要素类总数一致!

难道真的不行?不甘心的我打开ArcMap,右键这个BLOB图层,导出Shape,竟然成功了,还不包括BLOB字段;既然ArcMap可以实现,文档中也重点提出不可以,所以8成是可以实现的;

导出图片


于是我将目光顶上了其他的参数,仔细查看了文档,找到了这句话:To create a featureclass with a subset of the columns from the source data use IQueryFilter::SubFields. 这次感觉找到了正确的方向~,经过了尝试果然是可行的!

总结:

1.文档还是需要仔细研究的;
2.不要被参数的命名所迷惑;
3.一个接口的参数都是很有用的!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值