ArcGIS读取DWG文件路径问题

您所在的位置:网站首页 arcmap无法打开指定文件dwg ArcGIS读取DWG文件路径问题

ArcGIS读取DWG文件路径问题

#ArcGIS读取DWG文件路径问题| 来源: 网络整理| 查看: 265

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)细心很重要。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3