1、VC6.0+Arcgis Engine二次开发_读取Workspace里的IFeatureClass
首先,查找Workspace根目录下是否存在IFeatureClass,方法如下:
1)用成员函数get_Datasets()获得一枚举变量,如下:
//在当前工作空间中,以查找“esriDTFeatureClass”类型
ipWorkspace->get_Datasets( esriDTFeatureClass,&ipEnumFCls );
2)遍历ipEnumFCls:ipEnumFCls->Next( &ipDT );
3)如果ipDT存在 则: ipFeatCls = ipDT。
接着,查找Workspace子目录中的IFeatureClass,方法如下:
1)基本上同上一步,只是参数不同:
//在当前工作空间中,以查找“esriDTFeatureDataset”类型
ipWorkspace->get_Datasets( esriDTFeatureDataset,&ipEnumFCls );
2)同上2)
3)如果ipDT存在,则遍历ipDT:ipDT->get_Subsets( &ipEnumSubFCls )
4)如果ipEnumSubFCls存在,则遍历ipEnumSubFCls:ipEnumSubFCls->Next( &ipSubDT );
5)如果ipSubDT存在,则ipSubFtCls = ipSubDT。此即为子目录下的IFeatureClass。
此方法扩展后,可以通过get_Datasets()方法读取其他很多类型的数据,比如ITable/ITopology等等。
2、VC6.0+Arcgis Engine二次开发_获取IFeatureClass所在的IWorkspace
此方法比较简单,但是容易出错。关键在于IFeatureClass即可以在IWorkspace中,也可以存在于IDataset中。
一种比较合理的方式为:
IDatasetPtr ipFtDt(ipFtCls);
ipFtDt->get_Workspace( &m_ipWs );
而不能:
IFeatureDatasetPtr ipFtDt;
ipFtCls->get_FeatureDataset( &ipFtDt );
ipFtDt->get_Workspace( &m_ipWs );
申明:本文系原创,如果转载,请注明:转自GIS足迹:www.gisfoot.com