在我的上一篇博文裡面,談到了註記的轉換問題,但是其中的轉換並未包含空間參考資訊,所以,再寫一篇來記錄空間參考資訊的轉換。
首先,是擷取dwg檔案中的參考資訊,部分關鍵代碼如下
IWorkspacePtr ipWork;
IWorkspaceFactoryPtr ipWFactory(CLSID_CadWorkspaceFactory);
HRESULT result = ipWFactory->OpenFromFile(CComBSTR(path),
NULL, &ipWork);
IFeatureWorkspacePtr ipFWork = ipWork;
IFeatureDatasetPtr ipDataset;
result = ipFWork->OpenFeatureDataset(CComBSTR(filename), &ipDataset);
IFeatureClassContainerPtr ipFContainer = ipDataset;
IArrayPtr arrLayer(CLSID_Array);
long lClassCount = 0;
ipFContainer->get_ClassCount(&lClassCount);
for (long i = 0; i < lClassCount; i++)
{
IFeatureClassPtr ipFClass;
result = ipFContainer->get_Class(i, &ipFClass);
esriFeatureType type;
ipFClass->get_FeatureType(&type);
//判斷是否為註記層
if (esriFTCoverageAnnotation != type)
continue;
IGeoDatasetPtr ipGeoDataset(ipFClass);
ISpatialReferencePtr ipSpaRef;
ipGeoDataset->get_SpatialReference(&ipSpaRef);
}
接下來,就是把擷取到的空間參考資訊設定到SDE中的annotation features中,可以通過IFeaturelayer,ILayer等介面來設定,由於比較簡單,就不把代碼貼出來了。如果大家有其他好的辦法,也歡迎留言交流