|
阅读:1411回复:1
[求助]关于ConvertFeatureClass 急呀
<P>本人想用IFeatureDataConverter实现SDE要素类的导出,即将SDE要素类导出为本地机上的shapefile于是编写为下列代码,编译链接没错误但总是转换失败,自己找了很多遍也不知道错在哪了。望各位高手帮我看看纠正一下我的错误,在下感激不尽.</P>
<P> IDatasetPtr ipDataset(ipWorkspace);<BR> INamePtr ipName;<BR> ipDataset->get_FullName(;ipName);<BR> IWorkspaceNamePtr pInSDEWorkspaceName(ipName);<BR> IFeatureClassNamePtr pInSDEFeatCLSNm(CLSID_FeatureClassName);<BR> IDatasetNamePtr pInSDEDSname(pInSDEFeatCLSNm);<BR> pInSDEDSname->put_Name(_bstr_t("SDE.country_polygon"));<BR> pInSDEDSname->putref_WorkspaceName(pInSDEWorkspaceName);</P> <P><BR> IWorkspaceNamePtr pOutshpWsName(CLSID_WorkspaceName);<BR> pOutshpWsName->put_PathName(_bstr_t("E:\\SDE导出"));<BR> pOutshpWsName->put_WorkspaceFactoryProgID(_bstr_t("esricore.ShapefileWorkspaceFactory.1"));</P> <P> IFeatureDatasetNamePtr pOutshpFeatDSName(CLSID_FeatureDatasetName);<BR> IDatasetNamePtr pshpDSname;<BR> pshpDSname=pOutshpFeatDSName;<BR> pshpDSname->put_Name(_bstr_t("SDE导出"));<BR> pshpDSname->putref_WorkspaceName(pOutshpWsName);</P> <P><BR> IFeatureClassNamePtr pOutputFCName(CLSID_FeatureClassName);<BR> IDatasetNamePtr pOutputDSname(pOutputFCName);<BR> pOutputDSname->put_Name((_bstr_t)"country_polygon");<BR> pOutputDSname->putref_WorkspaceName(pOutshpWsName);</P> <P> IFeatureWorkspacePtr ipFeatureworkspace(ipWorkspace);<BR> IFeatureClassPtr pInSDEFeatCLS;<BR> ipFeatureworkspace->OpenFeatureClass(_bstr_t("SDE.country_polygon"),;pInSDEFeatCLS);<BR> </P> <P><BR> IFieldsPtr pOutShpFlds;<BR> IFieldsPtr pInSDEFlds;<BR> IFieldCheckerPtr pFldChk(CLSID_FieldChecker);<BR> IFieldPtr pGeoField;<BR> IGeometryDefPtr pOutShpGeoDef;<BR> IGeometryDefEditPtr pOutShpGeoDefEdit;</P> <P> pInSDEFeatCLS->get_Fields(;pInSDEFlds);<BR> pFldChk->Validate(pInSDEFlds,NULL,;pOutShpFlds);<BR> pOutShpFlds=pInSDEFlds;</P> <P> long index,numFields;<BR> IFieldPtr ipField;<BR> esriFieldType type;<BR> pOutShpFlds->get_FieldCount(;numFields);</P> <P> for(index=0;index<numFields;index++)<BR> {<BR> pOutShpFlds->get_Field(index,;ipField);<BR> ipField->get_Type(;type);<BR> if(type==esriFieldTypeGeometry)<BR> {<BR> pGeoField=ipField;<BR> break;<BR> }<BR> }<BR> pGeoField->get_GeometryDef(;pOutShpGeoDef);<BR> pOutShpGeoDef->QueryInterface(_uuidof(IGeometryDefEdit),(void**);pOutShpGeoDefEdit);<BR> pOutShpGeoDefEdit->put_GridCount(1);<BR> pOutShpGeoDefEdit->put_GridSize(0,1500000);</P> <P> HRESULT hr;<BR> IFeatureDataConverterPtr pFCToShp(CLSID_FeatureDataConverter);<BR> IEnumInvalidObjectPtr ipEnumInvalidObject;<BR> hr=pFCToShp->ConvertFeatureClass(pInSDEFeatCLSNm,NULL,pOutshpFeatDSName,pOutputFCName,NULL,pOutShpFlds,_bstr_t(""),1000,0,;ipEnumInvalidObject);<BR> if(FAILED(hr))<BR> MessageBox("失败");</P> |
|
|
1楼#
发布于:2006-11-30 23:21
我有C#的代码,QQ联系:171567188
|
|
|