ArcGIS读取DWG文件路径问题

1、问题背景

最近接手同事留下的一个加载DWG的问题。测试时发现传入DWG文件路径,打开的时候死活报错。

如图:


2、分析步骤

1)怀疑是ArcEngine未授权,于是添加授权代码进行测试,未能解决。

2)使用AccessWorkspaceFactory打开.mdb文件进行测试,发现可以打开。

3)是不是组件版本的问题呢?修改组件引用方式,修改版本,不能解决。

4)发现CadWorkspaceFactory位于ESRI.ArcGIS.DataSourcesFile命名空间下,于是想起打开FileGDB、Shapefile的方式,即传入的应该是文件夹路径。于是修改测试代码,发现可以解决问题。

3、解决办法

如图:


即:CadWorkspaceFactory打开的的文件路径应当是目标DWG文件所在的文件夹,而在使用FeatureWorkspace对象打开要素类即OpenFeatureClass时,其参数才是具体的“文件名+要素类类型”的形式。

4、一点思考

刚开始时觉得ArcEngine中打开DWG文件的方式很怪异,即明明写着OpenFromFile,其参数不是文件路径,而是文件夹路径,OpenFeatureClass时明明只需要指定FeatureClass的类型是点、线、面或注记,却还要在前面加上文件名,真是十分别扭。

结合平时使用C++进行ArcEngine开发的经历,忽然觉得这样也有其合理之处,理由如下:

1)DataSourcesFile本身就已经告诉我们了,我要加载的文件(这一点与基于C++进行ArcEngine开发的方式是一致的)所在的文件夹,而非PGDB。如加载FileGDB时,其参数虽以.gdb结尾,但本身就是一个文件夹,而不是.mdb文件这样的文件路径。

2)打开不同类型的文件,使用不同的WorkspaceFactory引擎,各个引擎之间的参数是不同的。

	HRESULT hr;
	IWorkspaceFactoryPtr ipWorkspaceFactory;
	if (FissDataTypeFGDB == m_nDataType)
	{
		hr = ipWorkspaceFactory.CreateInstance(CLSID_FileGDBWorkspaceFactory);
	}
	else if (FissDataTypePGDB == m_nDataType)
	{
		hr = ipWorkspaceFactory.CreateInstance(CLSID_AccessWorkspaceFactory);
	}
	else if (FissDataTypeShape == m_nDataType)
	{
		hr = ipWorkspaceFactory.CreateInstance(CLSID_ShapefileWorkspaceFactory);
	}
	if (FAILED(hr) || NULL == ipWorkspaceFactory)
	{
		return FALSE;
	}

3)细心很重要。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值